Di

    [Spring] 스프링 핵심 원리 기본편 - 7. 의존관계 자동 주입

    7. 의존관계 자동 주입 다양한 의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 특징 생성자 호출 시점에 딱 1번만 호출되는 것이 보장됨 불변, 필수 의존관계에 사용 불변: 생성자 외에 외부에서 의존관계를 수정할 수 없음 필수: final, 꼭 값이 있어야 함 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동으로 지정됨 생성자 주입은 빈을 등록하면서 의존관계 주입도 같이 일어남 - 생성자를 호출하게 되기 때문에 수정자 주입 setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해 주입 특징 선택, 변경 가능성이 있는 의존관계에 사용 참고: @Autowired(required = false) → 주입할 대상이 없어도 동작하게 할 ..

    [Spring] 스프링 핵심 원리 이해2 - 객체 지향 원리 적용

    스프링 핵심 원리 기본편 할인 정책을 바꾸려면 OrderServiceImpl 코드를 변경해야 함 역할과 구현을 충실하게 분리O 다형성 활용O, 인터페이스와 구현 객체를 분리함 OCP, DIP 객체 지향설계 원칙을 충실히 준수한 것처럼 보이지만 사실은 아님 DIP: 주문서비스 클라이언트(OrderServiceImpl)은 DiscountPolicy 인터페이스에 의존하면서 DIP를 지킨 것 같은데? 추상인터페이스 뿐만 아니라 구현 클래스에도 의존하고 있음 추상 인터페이스: DiscountPolicy 구현 클래스: FixDiscountPolicy, RateDiscountPolicy OCP: 변경하지 않고 확장? 지금은 기능을 확장해서 변경하면 클라이언트 코드에 영향을 줌 DIP 위반 → 추상(인터페이스)만 의존..

    [Spring] 제어 역전 IoC와 의존성 주입 DI

    IoC와 DI 제어 역전(IoC) 일반적인 자바 개발: 객체 선언 > 의존성 생성 > 객체에서 제공 일련의 작업들을 개발자가 직접 제어함 제어 역전: 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임 ‘외부’: 스프링 컨테이너(Spring Container) 스프링에서 제어 역전 Bean: 스프링에서의 객체 Container: Bean의 인스턴스화 조립, 관리의 역할, 사용 소멸에 대한 처리 담당 객체 생성 의존성 객체 주입: 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입 의존성 객체 메소드 호출 스프링 컨테이너가 객체를 만드는 시기: 컨테이너가 만들어질 때 필요한 객체를 모두 생성 cf. lazy-init: getBean을 할 때마다 객체가 생성 기본: 싱글톤 패턴 s..

출처: https://gmnam.tistory.com/157 [Voyager:티스토리]