Di 컨테이너 공부

오늘은 제가 스프링 공부하면서 이해가 어려웠던 Di컨테이너에 대해서 공부하려고 합니다.


목차


1. 의존성이란?

(가)라는 클래스와 (나)라는 클래스가 있을 때 여기서 (가) 클래스는 사용하는 객체, (나)는 사용되는 객체라고 할 경우 (가)클래스에서 (나)클래스 사용할 경우 new 사용하여 (나) 클래스의 인스턴스 생성 후 (나) 클래스 메서드 사용을 할 수 있습니다. 그리고 만약 (나) 클래스의 메서드 변경 시 (가) 클래스도 영향을 받는데 이때 (가) 클래스는 (나)클래스에 의존한다고 볼 수 있습니다.

2. 의존성 종류

  1. 클래스 의존 : 자바 처음 배울 때 new 사용해서 많이 사용했지만 사용되는 객체 변경 시 의존 되는 부분은 모두 수정을 해야 되기 때문에 피로도, 실수 등 생길 수 있습니다.
  2. 인터페이스 의존 : 인터페이스를 만들 경우 new 부분에 한곳만 수정을 하면되기 때문에 클래스 의존 보다 수정할 부분이 적습니다.
  3. DI 컨테이너: 의존성 주입은 의존하는 부분을 외부에서 주입하는 것입니다.

-> (1) 인터페이스를 이용하여 의존성 (2) 인스턴스를 명시적으로 생성 X (3) 어노테이션을 클래스에 부여 (4) 스프링 프레임워크에서 인스턴스를 생성 (5) 인스턴스를 이용하고 싶은 곳에 어노테이션을 부여

3. 어노테이션 공부

  1. 어노테이션은 3가지 항목으로 어노테이션 주석을 의미하는 영어로 표현, ‘@XXX’와 같은 형태로 작성, 외부 소프트웨어 필요한 처리 내용을 전달.

2. 레이어별 인스턴스 생성 어노테이션

  • @Controller 애플리케이션 레이어의 컨트로롤러 부여
  • @Service 도메인 레이어의 업무 처리에 부여 – 특히, AOP, @Tanscational은 서비스 영역에서만 사용 가능한 점 추가로 알면 좋습니다.
  • @Repository 인프라 레이어의 데이터베이스 액세스 처리에 부여
  • @Component 위 3가지 용도 이외의 인스턴스 생성 대상 클래스에 부여

4. AOP 관점 지향 프로그래밍

DB 액세스 처리에는 예외 발생 시 처리하는 내용이 반드시 포함 되어야 한다. 예외처리 하지 않을 경우 프로그램 중지되고 자바의 경우 컴파일에 실패한다.


새로 공부 정리한 내용

XML 기반 통해서 해당 DI 처리 했지만 현재는 등록은 3-2 어노테이션 참고, 의존성 주입은 @Autowired, @inject, @Qualifier, @Resource 있습니다.

@RequiredArgsConstructor 하지만 Class위에 작성하면 final, not null이 붙은 곳에는 자동으로 생성자를 생성해 줍니다.

스프링 기본기 다른 글도 참고하면 좋을 것 같아요.

Leave a Comment