전체 글

전체 글

    [spring] DI와 DL의 차이 ,IoC

    목차 제어의 역전, IoC 의존관계(Dependency)란? DI(Dependency Injection)이란? DL(Dependency Lookup)이란? 1. 제어의 역전, IoC 먼저, 제어의 역전(Inversion of Control)이라는 개념에 대해서 알아보겠습니다. 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)이라 합니다. 기존의 제어 방식은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했습니다. 하지만, 이 방식은 계층간의 결합성이 높아서 만약 한 개의 객체를 변경하면, 연결된 다른 객체들을 수정해주어야 합니다. 이때문에 계층간의 의존관계의 결합도를 낮추고, 유지보수성을 향상시키기 위해 제어의 역전(IoC)이..

    [spring] 빈 생명주기 콜백

    본 포스팅은 김영한 님의 스프링 핵심원리 기본편 강의 섹션 8을 듣고 요약한 내용입니다. 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료됩니다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 합니다. 이때, 개발자에게 의존관계 주입이 완료되었다는 것을 알려주기 위해서 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공합니다. 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 줍니다. Q. 객체를 생성하면서 의존관계를 주입하면 안 되나요? 생성자는 필수 정보(파라미터)를 받고, 메모리를 할당해서 객체를 생성하는 책임을 가집니다. 반면에 초기화는 이렇게..

    [spring] 생성자 주입(2)

    본 포스팅은 김영한 님의 스프링 핵심원리 기본편 강의 섹션 3을 듣고 요약한 내용입니다. 1. 기존 코드 지난 포스팅에 이어 인터페이스(추상)에만 의존하도록 기존 코드를 변경해보도록 하겠습니다. 우리가 원하는 의존관계는 다음 그림과 같습니다. 가장 먼저 큰 문제점은 기존 클라이언트 코드가 추상과 구체 클래스 모두에 의존하고 있다는 점이었습니다. 가장 먼저 기존 클라이언트 코드를 인터페이스에만 의존하도록 변경해보겠습니다. package hello.core.order; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy;..

    [spring] 싱글톤 컨테이너

    본 포스팅은 김영한 님의 스프링 핵심원리 기본편 강의 섹션 5를 듣고 요약한 내용입니다. 1. 싱글톤 컨테이너 스프링 컨테이너는 스프링 빈을 이용하여 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤(1개만 생성)으로 관리합니다. 싱글톤 패턴과 문제점은 아래 포스팅을 참고하세요. [spring] 싱글톤 패턴 본 포스팅은 김영한 님의 스프링 핵심원리 기본편 강의 섹션 5를 듣고 요약한 내용입니다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리 toki0411.tistory.com 스프링 컨테이너는 싱글턴 패턴을 따로 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리합니다. (싱글톤 컨테이너 역할을 합니다.) 따라서, 스프링 컨테이너는 싱글턴..

    [spring] 싱글톤 패턴

    본 포스팅은 김영한 님의 스프링 핵심원리 기본편 강의 섹션 5를 듣고 요약한 내용입니다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 1. 스프링 없는 순수한 DI 컨테이너 기존의 순수한 자바코드로 작성한 DI컨테이너에서는 클라이언트에서 객체를 호출할 때마다 새로운 객체를 생성해왔습니다. 다음 예제를 통해 확인해보겠습니다. package hello.core.singleton; import hello.core.AppConfig; import hello.core.member.MemberService; import org.junit.j..