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

2024. 6. 29. 12:13·Game Programming/C#
728x90
반응형

의존성 주입(DI, Dependency Injection)

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

 

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

 

의존성

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

예를들어, 게임의 몬스터를 관리하는 클래스에서 Boss를 MainActor의 객체로 지정할지 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
'Game Programming/C#' 카테고리의 다른 글
  • [C#] 람다식
  • [C#] 얕은 복사 vs 깊은 복사 (Shallow Copy vs Deep Copy)
  • [C#] as, is
  • [C#] Delegate
리태s
리태s
게임 클라이언트 프로그래머 직무를 준비하며 공부한 내용을 정리한 블로그입니다.
    반응형
    250x250
  • 리태s
    LeeTaes 공부노트
    리태s
  • 전체
    오늘
    어제
    • Home (165)
      • 프로젝트 (20)
        • Isaac 3D (5)
        • TimelessAdventure (13)
        • FruitsPuzzle (2)
      • Game Programming (25)
        • C# (8)
        • Unity Engine (6)
        • Unreal Engine (8)
        • UE_Multiplayer (3)
      • 코딩테스트 (111)
        • 프로그래머스 (Lv. 0) (27)
        • 프로그래머스 (Lv. 1) (31)
        • 프로그래머스 (Lv. 2) (21)
        • 백준 (Study) (29)
        • 알고리즘 (3)
      • CS지식 (7)
        • 운영체제 (7)
      • 일상 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    project t.a develop
    프로그래머스
    Algorithm
    unrealengine
    CS지식
    Summer/Winter Coding
    dataasset
    delegate
    issac3d
    코딩테스트
    구현
    2018 kakao
    c#
    청년취업사관학교
    C++
    프로세스
    ai controller
    백준
    sesac
    pcce 기출문제
    unity
    Unreal Engine
    2019 kakao
    후기
    tsoftobjectptr
    2022 kakao
    프로젝트
    timelessadventure
    fsoftobjectpath
    fruitspuzzle
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
리태s
[C#] 의존성 주입(DI, Dependency Injection)
상단으로

티스토리툴바