Setter DI vs Constructor DI

2024-05-30

Setter DI

public class Illit {
		private LovelyMinjuService service;
		
		public void Illit(LovelyMinjuService service) {
				this.service = service;
		}
		...
}

클래스가 인스턴스화된 후 클래스의 setter 메서드에 의존성을 전달

  • 의존성이 런타임 중에 변경될 수도 있어 클래스를 다른 컨텍스트에서 재사용 가능

Constructor DI

public class Illit {
		private final LovelyMinjuService service;
		
		public Illit(LovelyMinjuService service) {
				this.service = service;
		}
		...
}

해당 클래스가 인스턴스화될 때 의존성이 클래스 생성자에 전달된다.

  • 불변성
  • 항상 완전히 초기화된 상태

뭐가 좋다고 말할 수 없다.

필수적 의존성이고, 불변해야할 땐 생성자, 선택적 의존성이면 setter를 사용할 수 있을 것 같다.

이 두가지 방법을 혼합하여 사용할 수 있으니, 잘 사용해야한다.