본문 바로가기

WINK-(Web & App)/Spring Boot 스터디

[2024-2 SpringBoot 스터디] 탁태현 #4주차

반응형

 

스프링 컨테이너

스프링은 DI에 유용한 많은 기능을 위한 컨테이너를 제공하고 있다.

 

IOC / DI 컨테이너의 필요성

 

예제 코드를 따라 치다

 

위와 같은 상황에서 null에러가 발생했다. 저장소에 저장을 분명히 했는데 값이 계속 없다고 에러가 발생했다.

위 와 같은 경우에는 MemberRepository객체를 2번 생성하여 저장하는 곳과 찾는 곳이 달라서 에러가 발생헀던 것이다.

이런 상황이 일어나지 않게 도와주는것이 IOC/DI의 역할이다.

 

 

이 경우에는 DiscountPolicy interface를 통해서 추상화를 진행했지만 OCP를 위한 하고 있다. OrderSerivceImpl이 DiscountPolicy와 RateDiscountPolicy를 모두 의존하고 있기 때문이다.

 

이것을 해결하기 위해서는 

위와 같은 방식으로 의존성을 외부에서 주입해주는 DI를 해야한다.

 

이것을 매우 편하고 매우 중요한 특성을 지내게 해주는 것이 바로 DI/IOC 컨테이너다.

 

 

IOC / DI 컨테이너

IOC 컨테이너란 메모리에 떠있는 저장소라고 생각하면 이해가 쉽다.

메모리에 스프링 컨테이너 라는 저장소가 떠있고 그 저장소에 RateDiscountPolicy 인스턴스를 저장해 둔다.

그리고 필요한 곳이 생기면 IOC 컨테이너가 스스로! 의존성 주입이 필요한 곳에 인스턴스를 주입해 준다.

따라서 개발자는 외부에서 어떤 곳에 어떤 의존성을 주입할지 작성해 주기만 하면 된다.

 

이렇게 되었을때는 싱글톤이라는 장점이 생기게 되는데 이를 통해서 제일 처음 언급했던 문제가 해결된다.

이는 다음 강의 내용으로 다음주에 이어서 작성하겠다.

반응형