[IoC] Inversion of Control

김민중·2025년 2월 15일

Spring Triangle

목록 보기
3/9

제어권이 뒤바꼈다


참고:
Inversion of Control Containers and the Dependency Injection pattern

의존성에 대한 일반적인 제어권 : “내가 사용할 의존성은 내가 만든다”

class OwnerController {
	private OwnerRepository repository = new OwnerRepository();
}

IoC : “내가 사용할 의존성을 누군가 알아서 주겠지”

  • 내가 사용할 의존성의 타입(인터페이스)만 맞으면 어떤거든 상관없다.
  • 코드 테스트 하기도 편하다.
class OwnerController {
	private final OwnerRepository owners;
	
	public OwnerController(OwnerRepository owners) {
		this.owners = owners;
	}
}

owners를 사용하지만 생성하지는 않는다.

대신, 생성자를 통해 의존성을 주입받고 있는데, 이를 Dependency Injection이라고 한다.

따라서, DI 또한 IoC의 일종이라고 볼 수 있겠다.

class OwnerControllerTest {
	@Test
	public void create() {
		OwnerRepository owners = new OwnerRepository();
		OwnerController controller = new OwnerController(owners);
	}
}

OwnerController는 위 코드처럼 생성되어 사용된다.

이때, OwnerController의 생성자는 OwnerController(OwnerRepository owners) 하나뿐이므로,

무조건 owners가 주입되어 NullPointerException이 발생할 일은 없게 된다.

profile
Anything

0개의 댓글