Notice
Recent Posts
Recent Comments
Link
관리 메뉴

look-forest

[예제] SPRING으로 전환하기 본문

Spring/Spring 핵심 원리

[예제] SPRING으로 전환하기

studyHub 2023. 4. 29. 16:26

[예제] 스프링 없이 좋은 객체 지향 설계하기

에서 스프링 없이 SOLID 원칙을 준수했던 코드(by AppConfig)를 스프링 기반으로 바꿔보겠다


SPRING은 DI로 《다형성 + OCP, DIP》를 가능케 한다!

DI(Dependency Injection): 의존 관계, 의존성 주입

DI 컨테이너(스프링 컨테이너): 객체들을 컨테이너에 넣어놓고 의존관계를 연결하고 주입

  • 클라이언트 코드의 변경 없이 기능 확장
  • 쉽게 부품을 교체하듯이 개발
  • 순수하게 자바로 OCP, DIP 원칙들을 지키면서 개발을 해보면, 결국 스프링 프레임워크를 만들게 된다. ( 정확히는 DI 컨테이너)

 


 

Spring으로 전환하기

스프링 컨테이너에 객체를 스프링 빈으로 등록하고,

스프링 컨테이너에서 스프링 빈을 찾아서 사용하도록 변경해보자.

 

 

설정 클래스에 @Configuration @Bean 붙이기

  • AppConfig 설정을 구성한다는 뜻의 @Configuration 붙여준다.
  • 메서드에 @Bean 붙여준다. 이렇게 하면 스프링 컨테이너에 스프링 빈으로 등록한다.

 

 

 

호출부: 기존에는 AppConfig를 통해서 객체를 생성하고 DI 했지만 , 이제부터는 스프링 컨테이너를 이용한다

  • ApplicationContext 스프링 컨테이너 한다
  • 스프링 컨테이너는 @Configuration 붙은 클래스(AppConfig) 설정(구성) 정보로 사용한다
  • 여기서 @Bean이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다
  • 이렇게 스프링 컨테이너에 등록된 객체 스프링 이라 한다
  • 스프링 빈은 @Bean 붙은 메서드명을 스프링 빈의 이름으로 사용한다. (이름을 key, 객체를 value 등록)

구성 정보 클래스와 그의 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록

 

 


 

 

그런데.. 코드가 복잡해진 같은데, 스프링 컨테이너를 사용하면 어떤 장점 있을까?

 

 

 


참고 자료
스프링 핵심 원리(김영한 님)