라라리라
[Spring] 제어의 역전(IoC), 의존성 주입(DI) 본문
스프링Bean을 사용하지 않고, 간단한 도서관리 API의 구조를 만든다고 생각해보자.
추가 요구사항을 구현하는 상상을 해보자..
이제 Memory가 아닌, MySql과 같은 DB를 사용해야한다.
문제 | Repository의 역할에 관련된 것만 바꾸고 싶은데, BookService까지 바꿔야한다.
MemoryRepository를 사용하는 Service가 5000개라고 생각해보자 ..
Repository 변경을 위해서 5천번의 new MySqlRepository 선언을 해줘야한다!
Java Interface를 활용하면??
문제 | 발전 했지만 여전히 아쉽다..
변경해야할 부분이 반으로 줄었지만, 여전히 Repository 변경을 위해서 Service를 수정해야한다.
스프링 컨테이너를 사용해보자
스프링 컨테이너가 개발자 대신 MemoryRepository 혹은 SqlRepository를 선택한 후, BookService를 만들어준다.
이러한 방식을 제어의 역전(IoC)라고 한다.
또한, 컨테이너가 BookService를 만들어 줄 때, MemoryRepository와 MysqlRepository중 하나를
선택해 넣어주는 과정을 의존성 주입(DI)라고 한다.
만약, 둘 다 @Repository 어노테이션이 붙어있으면 어떤 Repository가 주입될까?
@Primary 어노테이션을 통해 우선권을 제어할 수 있다.
실제 @Primary 어노테이션을 MemoryRepository에 붙였다가, MySqlRepository에 붙였다가 변경해보면,
BookService 코드 변경 없이 다른 Spring Bean이 사용됨을 확인할 수 있다.
'코딩 > 다이어리' 카테고리의 다른 글
[Spring] 스프링 Bean을 주입 받는 방법 + @Qualifier (1) | 2024.02.08 |
---|---|
[Spring] @Configuration과 @Bean 어노테이션 (0) | 2024.02.08 |
[클린코드] 레이어드 아키텍처란 무엇이고, 왜 쓰는걸까? (0) | 2024.02.07 |
[인텔리제이] 유용한 단축키 (1) | 2024.02.07 |
[MySQL] 제약 조건(constraint) - FOREIGN KEY (0) | 2024.02.05 |