SPRING을 공부하면서 많이 듣던 개념 중 하나는 의존성 주입입니다.
개발자들은 정말 많이 들었지만 이 개념에 대해서 정확하게 알지 못하고 연차가 쌓이는 경우가 대부분입니다.
연차가 쌓일수록 코딩은 기초가 가장 중요하다고 생각합니다. 그래서 저 또한 의존성 주입에 대해 정확하게 알고 가기 위해서 이렇게 포스팅으로 정리하고자 합니다.
의존성 주입 DI(Dependency Injection) 개념
DI는 디자인 패턴 중 하나입니다. 객체 간의 의존성을 단순하게 외부에서 주입해서 사용한다는 의미이다.
실생활에서 예를 들어 설명하자면 우리는 로봇에 팔을 만드는 공장이 있다고 예시를 들어보겠습니다.
A 로봇은 3m짜리 팔이 필요하고, B 로봇은 6m짜리 팔이 필요하다고 생각했을 때
우리는 팔을 만드는 공장에 "3m의 팔이 필요해"라고만 전달해주면 3m짜리 팔을 만들 수 있습니다.
하지만 전체 로봇 공정 자체가 5m짜리의 팔의 로봇만 만들어진다고 생각했을 때는 3m짜리 팔을 만들 때는 그 전체 로봇 팔을 만드는 공장 프로세스 자체를 바꿔버려야 합니다. 그러므로 각기 다른 팔 길이의 로봇을 생산할 수가 없습니다.
의존성 주입이란 로봇을 만드는 공장에 팔을 만드는 공정만 의존성 주입을 하여 각기 다른 팔 길이 (3m, 5m 등)을 생성하여 다양한 로봇의 팔을 만들 수 있게끔 해줍니다.
의존성 주입 DI(Dependency Injection) 주입 방법
- 생성자 주입
- 필드 주입
- Setter 주입
1. 생성자 주입
예제와 같이 생성자는 생성자를 처음 생성할 때 1회 주입만 가능합니다.
객체의 주입을 해야지만 사용되는 프로그램이라면 강제로 주입을 할 경우에 사용됩니다.
하지만 기본적으로 Spring은 Autowired가 없어도 주입이 가능하도록 편의를 제공하고 있습니다.
2. 필드 주입
필드 주입을 통해 단순하게 코드를 짜면 간결하게 짤 수가 있습니다.
하지만 외부에서 변경을 하고 싶어도 불가능하기 때문에 테스트 코드를 할 때 불편함이 있고, 또한 무조건 DI 프레임워크가 존재해야 되므로 점차 사장되는 중입니다.
3. Setter 주입
Setter를 통한 주입은 주입받은 객체가 변경이 필요할 때 사용이 됩니다.
맺은 말
의존성 주입 DI(Dependency Injection)을 통해 우리는 코드를 간결하게 하여 직관성과 편리성을 얻을 수 있습니다. 또한 간단히 DI를 통해 테스트 코드 작성도 쉽게 할 수 있습니다.
우리가 많이 쓰는 spring에서 잘 지원하고 있기 때문에 생성자 주입을 적시적소에 사용한다면 좋은 코딩 편리한 코딩을 하시는데 도움이 되실 겁니다.
'java > 기본용어' 카테고리의 다른 글
[자바] 디자인 패턴(Design Pattern) 이란? (0) | 2021.03.30 |
---|---|
[자바] 컬렉션(Collection) framework 설명 및 예시 (0) | 2021.03.29 |
[자바] Static(스태틱) 란? (0) | 2020.08.12 |