코드 그라데이션

DI 컨테이너와 이것의 다섯가지 규칙 본문

Spring/핵심 가이드

DI 컨테이너와 이것의 다섯가지 규칙

완벽한 장면 2023. 1. 14. 20:33

의존성 주입 뜯어보기

: 의존하는 부분을 외부에서 주입하는 것.

-- 의존하는 부분 : "사용하는 객체" 클래스에 "사용되는 객체" 클래스가 작성된 상태

-- 외부에서의 주입 : "사용하는 객체" 클래스의 밖에서 "사용되는 객체" 인스턴스를 주입하는 것.

 

- 지금까지는 인스턴스를 생성하는 데에 new 키워드를 사용했지만,

  인스턴스 생성과 같은 작업을 프레임워크에 맡길 수 있고,

  그 역할을 하는 것이 DI 컨테이너다.

*스프링 프레임워크는 임의로 구현한 클래스를 인스턴스로 만들어주는 기능을 제공

=> DI 컨테이너가 그 기능을 제공한다.

 

의존성 주입의 개념

 

다섯 가지 규칙

1) 인터페이스를 이용하여 의존성을 만든다.

==> 의존하는 부분에 인터페이스를 이용한다는 것.

 

2) 인스턴스를 명시적으로 생성하지 않는다.

==> 인스턴스 생성에 new 키워드를 사용하지 않는다는 것

 

3) 어노테이션을 클래스에 부여한다.

4) 스프링 프레임워크에서 인스턴스를 생성한다.

3,4번 ==> 인스턴스를 생성하려는 클래스에 인스턴스 생성 어노테이션을 부여한다.

 

[인스턴스 생성 어노테이션]

어노테이션 개요
@Controller 인스턴스 생성 지시. 스프링 MVC를 이용할 때 컨트롤러에 부여
@Service 인스턴스 생성 지시. 트랜잭션 경계가 되는 도메인(서비스) 기능에 부여
@Repository 인스턴스 생성 지시. 데이터베이스 액세스(리포지토리) 기능에 부여
@Component 위 용도 이외의 클래스에 부여

 

5) 인스턴스를 이용하고 싶은 곳에 어노테이션을 부여한다.

==> 스프링 프레임워크에 의해 생성된 인스턴스를 이용하는 클래스에 참조를 받는 필드를 선언하고 필드에 @Autowired 

      어노테이션을 부여한다.

 

 

요약

- 스프링 프레임워크는 임의로 구현한 클래스를 인스턴스화 하는 기능을 제공한다.(DI 컨테이너).

- 스프링 프레임워크를 사용하는 애플리케이션은 인스턴스를 명시적으로 생성하지 않는다.(new 키워드 x)

- 정해진 어노테이션(@Component)을 클래스에 부여하는 것으로 스프링 프레임워크가 인스턴스를 생성한다.

- 생성된 인스턴스를 사용하고 싶은 부분에서 필드를 준비하고 @Autowired를 부여하면

  스프링 프레임워크가 인스턴스가 필요한 것으로 판단하고 인스턴스를 주입한다.

- 인터페이스를 이용해서 의존성을 만들고 DI 를 사용하여 '사용되는 객체' 클래스를 변경하는 경우

   '사용하는 객체' 클래스의 수정 없이 변경할 수 있다.

 

http://figma.com

728x90
Comments