LeeTaes 공부노트

[C#] 의존성 주입(DI, Dependency Injection) 본문

Game Programming/C#

[C#] 의존성 주입(DI, Dependency Injection)

리태s 2024. 6. 29. 12:13
728x90
반응형

의존성 주입(DI, Dependency Injection)

의존성 주입(DI)은 소프트웨어 설계 패턴 중 하나로, 객체지향 프로그래밍에서 객체 간의 의존성을 효율적으로 관리하기 위해 사용되며, 객체가 필요로 하는 의존 객체외부에서 제공(주입)하는 방식으로 객체 간의 결합도를 낮추는데 도움을 주는 설계 방법입니다.

 

클래스 간의 결합도를 낮춰 코드 변경 시 영향을 최소화 할 수 있습니다.

 

의존성

  • 한 객체가 다른 객체를 사용할 때 그 객체는 해당 객체에 의존하고 있다고 합니다.
  • 즉, 파라미터나 리턴값 또는 지역변수 등으로 다른 객체를 참조하는 것을 의미합니다.

예를들어, 게임의 몬스터를 관리하는 클래스에서 BossMainActor의 객체로 지정할지 SubActor의 객체로 지정할지 확정이 되지 않아서 계속 수정이 일어나는 경우라고 가정해보도록 하겠습니다.

 

(ActorBase를 상속받는 MainActor, SubActor 클래스가 존재하는 상황)

public class MonsterManager
{
    private MainActor Boss;
    
    // 생성자
    public MonsterManager()
    {
        Boss = new MainActor();
    }
    
    ...
}

 

만약 위와 같이 작성했다면 MainActor가 아닌 SubActor의 객체로 지정하기 위해 멤버변수, 생성자 코드를 수정해야하며, 반대의 경우도 동일합니다.

 

위 코드를 수정하여, MonsterManager를 생성할 때 외부에서 보스에 대한 정보를 넣어주게 만들어준다면?

public class MonsterManager
{
    private ActorBase Boss;
    
    // 생성자
    public MonsterManager(ActorBase Actor)
    {
        Boss = Actor;
    }
    
    ...
}

 

MainActor와 SubActor의 부모인 ActorBase타입으로 Boss를 관리하며, MonsterManager의 객체를 생성하며 보스를 MainActor로 할 것인지, SubActor로 할 것인지를 외부에서 넣어줄 수 있게 수정하였습니다.

 

만약 기획 상의 변동이 생겨 다른 객체로 변경이 필요할 때에도 MonsterManager 클래스는 수정할 필요가 없게 됩니다.

 

즉, 해당 객체가 필요한 의존성을 스스로 생성하는 대신 외부에서 주입받도록 하여 코드의 유연성유지보수성향상시킨 것을 확인할 수 있습니다.

728x90
반응형

'Game Programming > C#' 카테고리의 다른 글

[C#] 람다식  (0) 2024.06.30
[C#] 얕은 복사 vs 깊은 복사 (Shallow Copy vs Deep Copy)  (0) 2024.06.29
[C#] as, is  (0) 2024.06.25
[C#] Delegate  (0) 2024.06.25
[C#] 가변 파라미터, 선택적 인수, 명명된 인수  (0) 2024.06.25