🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

스프링 핵심 원리

  • 객체지향의 5대 원칙

할인정책 인터페이스에 구현체를 할당하는 코드에서..

private final DiscountPolicy discountPolicy = new FixDiscountPoilcy();
private final DiscountPolicy discountPolicy = new RateDiscountPolicy();

discountPolicy라는 인터페이스를 사용해 구현체만 바꿔주면서 사용하고 있다.

다형성 활용, 인터페이스와 구현 객체를 분리했지만  결국 클라이언트 코드에서

구현 클래스에 의존하고 (DIP위반) 기능을 변경하면 클라이언트 코드를 건드려야 함(OCP위반).

*결국 외부에서 구현체를 주입하지 않으면 DIP와OCP 원칙을 지킬 수 없음.

 

  • 문제 해결
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;

public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}

생성자에 의해 구현체를 주입 당하고 있음. 구현체가 무엇이 들어올지 알 수 조차 없기 때문에

인터페이스에만 의존하고 있다고 할 수 있음. (DIP)--> 이 방식을 생성자 의존성 주입이라고 한다.

당연하게도 구현체 변경 시 코드의 수정이 필요 없게된다. (OCP)

클래스의 권한이 줄어듬 -> 책임이 명확해짐 (SRP)- > 관심사의 분리 

 

  • IoC : 위 처럼 외부에서 제어 흐름을 관리하는 것을 말한다.
  • IoC 컨테이너 : 의존성을 대신 주입해주는 외부 객체
  • DI: 위 처럼 실행 시점(런타임)에 외부에서 실제구현객체를 생성 후 클라이언트에 전달해 서버의 의존관계가 연결 되는 것, 의존관계 주입이다.
  •  
  • 스프링 컨테이너

-  ApplicationContext객체를 말한다.

- @Configuration 클래스를 구성 정보로 사용하고 @Bean 메소드를 컨테이너에 등록. 스프링 빈이라 칭 함.

  • 빈 조회
  1. bean 조회 시 부모타입을 조회하면 자식 타입들이 전부 조회 됨.
  2. 고로 Object타입 조회 시 모든 빈이 조회된다.

 

  • BeanFactory

- 스프링 컨테이너 최상위 인터페이스, 빈 조회 및 관리 담당

- ApplicationContext가 상속 받아서 추가 부가기능과 함께 제공하기 때문에 직접 사용하진 않음

- 고로 BeanFactory나 ApplicationContext를 스프링 컨테이너라고 칭한다.

  • BeanDefinition

- 스프링은 메타정보를 BeanDefinition인터페이스를 사용해서 추상화한다.

- 그래서 구현체를 바꿀 수 있기 때문에 java파일 xml이나 다른 파일로도 구현이 가능 함.

- 빈 만드는 방법은 직접 등록, factory method 사용해서 등록 (어노테이션사용)으로 나뉜다.

 

 

 

 

 

 

 

 

 

댓글을 작성해보세요.

채널톡 아이콘