티스토리 뷰
의존성 주입 뜯어보기
: 의존하는 부분을 외부에서 주입하는 것.
-- 의존하는 부분 : "사용하는 객체" 클래스에 "사용되는 객체" 클래스가 작성된 상태
-- 외부에서의 주입 : "사용하는 객체" 클래스의 밖에서 "사용되는 객체" 인스턴스를 주입하는 것.
- 지금까지는 인스턴스를 생성하는 데에 new 키워드를 사용했지만,
인스턴스 생성과 같은 작업을 프레임워크에 맡길 수 있고,
그 역할을 하는 것이 DI 컨테이너다.
*스프링 프레임워크는 임의로 구현한 클래스를 인스턴스로 만들어주는 기능을 제공
=> DI 컨테이너가 그 기능을 제공한다.
다섯 가지 규칙
1) 인터페이스를 이용하여 의존성을 만든다.
==> 의존하는 부분에 인터페이스를 이용한다는 것.
2) 인스턴스를 명시적으로 생성하지 않는다.
==> 인스턴스 생성에 new 키워드를 사용하지 않는다는 것
3) 어노테이션을 클래스에 부여한다.
4) 스프링 프레임워크에서 인스턴스를 생성한다.
3,4번 ==> 인스턴스를 생성하려는 클래스에 인스턴스 생성 어노테이션을 부여한다.
[인스턴스 생성 어노테이션]
어노테이션 | 개요 |
@Controller | 인스턴스 생성 지시. 스프링 MVC를 이용할 때 컨트롤러에 부여 |
@Service | 인스턴스 생성 지시. 트랜잭션 경계가 되는 도메인(서비스) 기능에 부여 |
@Repository | 인스턴스 생성 지시. 데이터베이스 액세스(리포지토리) 기능에 부여 |
@Component | 위 용도 이외의 클래스에 부여 |
5) 인스턴스를 이용하고 싶은 곳에 어노테이션을 부여한다.
==> 스프링 프레임워크에 의해 생성된 인스턴스를 이용하는 클래스에 참조를 받는 필드를 선언하고 필드에 @Autowired
어노테이션을 부여한다.
요약
- 스프링 프레임워크는 임의로 구현한 클래스를 인스턴스화 하는 기능을 제공한다.(DI 컨테이너).
- 스프링 프레임워크를 사용하는 애플리케이션은 인스턴스를 명시적으로 생성하지 않는다.(new 키워드 x)
- 정해진 어노테이션(@Component)을 클래스에 부여하는 것으로 스프링 프레임워크가 인스턴스를 생성한다.
- 생성된 인스턴스를 사용하고 싶은 부분에서 필드를 준비하고 @Autowired를 부여하면
스프링 프레임워크가 인스턴스가 필요한 것으로 판단하고 인스턴스를 주입한다.
- 인터페이스를 이용해서 의존성을 만들고 DI 를 사용하여 '사용되는 객체' 클래스를 변경하는 경우
'사용하는 객체' 클래스의 수정 없이 변경할 수 있다.
'[개발] - Spring > 핵심 가이드' 카테고리의 다른 글
어노테이션과 AOP (0) | 2023.01.14 |
---|---|
데이터베이스, 테이블, 엔티티, 리포지토리 (0) | 2023.01.14 |
핵심 가이드 - 의존성 주입, 관점 지향 프로그래밍 (0) | 2023.01.14 |
스프링 개발을 위한 기초 지식(Java) (0) | 2023.01.14 |
스프링 프레임워크의 구성 및 장점 (0) | 2023.01.14 |