개념공부

의존성 주입(Dependency Injection)

Cadi 2025. 1. 8. 16:24

의존성

  • 객체가 자신의 기능을 수행하기 위해 필요한 다른 객체나 구성
  • 혹은 한 클래스가 다른 클래스나 인터페이스에 대해 가지는 관계
  • 의존성이 높으면 코드가 변경에 취약해지고 유지보수가 어려

의존성 주입

  • 객체가 자신의 기능을 수행하기 위해 필요한 다른 객체나 구성을 외부에서 주입(제공)하는 것
  • 넓은 의미에서, Unity 인스펙터 창의 드래그 드롭도 의존성을 주입해 주는 것이다. 
  • 객체간의 결합도를 낮추고, 확장과 테스트를 용이하게 하는 것이 목표

 

예를 들어, 다음과 같은 코드가 있다. 

 

using System;

public class Solution
{
    public void Attack()
    {
        BaseAttack();
    }

    public void BaseAttack()
    {
        Console.WriteLine("공격");
    }
}

 

여기서 이 Attack 클래스가 자신의 기능을 실현하기 위해서는 BaseAttack이라는 함수가 필요하다. 

그러므로 Attack은 BaseAttack에 의존한다.

 

여기서 다른 공격들 , 예를들어 JumpAttack이나 Double Attack을 구현하려 한다면 열거형으로 타입을 만들고,

타입에 따라 Attack 함수에서 각각 다른 종류의 함수를 호출해야 할 것이다.

그렇게 된다면 , 의존하는 것이 너무 많아지고 강하게 결합된다. (확장성도 떨어진다)

 


이런 방식 보다는, 인터페이스를 만들고 그 인터페이스를 의존하여 해결하는 방식이 더욱 효율적이다. 

 

 

 

 

 

이렇게 하고, 다음과 같은 방식들로 Type을 바꿔주며 ( 의존성을 주입해주며) 사용한다.

  1.  생성자를 만들면서 Type을 변경
  2. 필드에 직접 주입
  3. 메서드로 주입
  4. 프로퍼티로 주입

유니티에서는 프로퍼티로 주입하는 방식이 많이 사용된다. 

 

그리고 Unity에서는 zenject Extenject 등의 DI 프레임워크를 활용하기도 함. << 모르는 키워드 적어두기

 

 

 


참조 :
https://mangkyu.tistory.com/150

 

[Spring] 의존성 주입(Dependency Injection, DI)이란? 및 Spring이 의존성 주입을 지원하는 이유

1. 의존성 주입(Dependency Injection)의 개념과 필요성 [ 의존성 주입(Dependency Injection) 이란? ] Spring 프레임워크는 3가지 핵심 프로그래밍 모델을 지원하고 있는데, 그 중 하나가 의존성 주입(Dependency Inj

mangkyu.tistory.com

 

https://www.youtube.com/watch?v=WsnkyHVu-Gw

 

'개념공부' 카테고리의 다른 글

디자인 패턴 : 빌더 패턴  (0) 2025.01.08
디자인 패턴 : 전략 패턴  (0) 2025.01.08
델리게이트, 람다, Action,Func  (0) 2025.01.07
Factory Pattern with Unity  (0) 2025.01.01
Singleton in Unity  (1) 2025.01.01