의존성
- 객체가 자신의 기능을 수행하기 위해 필요한 다른 객체나 구성
- 혹은 한 클래스가 다른 클래스나 인터페이스에 대해 가지는 관계
- 의존성이 높으면 코드가 변경에 취약해지고 유지보수가 어려
의존성 주입
- 객체가 자신의 기능을 수행하기 위해 필요한 다른 객체나 구성을 외부에서 주입(제공)하는 것
- 넓은 의미에서, Unity 인스펙터 창의 드래그 드롭도 의존성을 주입해 주는 것이다.
- 객체간의 결합도를 낮추고, 확장과 테스트를 용이하게 하는 것이 목표
예를 들어, 다음과 같은 코드가 있다.
using System;
public class Solution
{
public void Attack()
{
BaseAttack();
}
public void BaseAttack()
{
Console.WriteLine("공격");
}
}
여기서 이 Attack 클래스가 자신의 기능을 실현하기 위해서는 BaseAttack이라는 함수가 필요하다.
그러므로 Attack은 BaseAttack에 의존한다.
여기서 다른 공격들 , 예를들어 JumpAttack이나 Double Attack을 구현하려 한다면 열거형으로 타입을 만들고,
타입에 따라 Attack 함수에서 각각 다른 종류의 함수를 호출해야 할 것이다.
그렇게 된다면 , 의존하는 것이 너무 많아지고 강하게 결합된다. (확장성도 떨어진다)
이런 방식 보다는, 인터페이스를 만들고 그 인터페이스를 의존하여 해결하는 방식이 더욱 효율적이다.
이렇게 하고, 다음과 같은 방식들로 Type을 바꿔주며 ( 의존성을 주입해주며) 사용한다.
- 생성자를 만들면서 Type을 변경
- 필드에 직접 주입
- 메서드로 주입
- 프로퍼티로 주입
유니티에서는 프로퍼티로 주입하는 방식이 많이 사용된다.
그리고 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 |