Search
Duplicate

[스프링 핵심원리 기본] 의존관계 자동 주입 - 생성자 주입을 선택해라! & 롬복과 최신 트랜드

상태
스프링 핵심원리 기본
담당자
속성 1
Spring
JAVA
속성
11
1) DI를 사용할 때 생성자 주입을 선택해라!
과거에는 수정자 주입과 필드 주입을 많이 사용했지만, 최근에는 스프링을 포함한 DI 프레임워크 대부분이 생성자 주입을 권장한다. 그 이유는 다음과 같다.
불변
대부분의 의존관계 주입은 한번 일어나면 애플리케이션 종료 시점까지 의존관계를 변경할 일이 없다. 오히려 대부분의 의존관계는 애플리케이션 종료 전까지 변하면 안 된다.
수정자 주입을 사용하면 setXxx메서드를 public으로 열어두어야 한다. 이는 누군가의 실수로 변경할 수 도 있고, 변경하면 안 되는 메서드를 열어두는 것은 좋은 설계 방법이 아니다.
생성자 주입은 객체를 생성할 때 딱 1번만 호출되므로 이후에 호출되는 일이 없다. 따라서 불변하게 설계할 수 있다.
2) 롬복 사용법
개발을 해보면, 두 부분이 다 불변이고, 그래서 다음과 같이 생성자에 final 키워드를 사용하게 된다.
그런데 생성자도 만들어야 하고, 주입받은 값을 대입하는 코드도 만들어야 하고, 필드 주입처럼 좀 편리하게 사용하는 방법은 없을까?
역시 개발자는 귀찮은 것은 못 참는다!
다음 기본 코드를 최적화해보자.
2-1) build.gradle에 라이브러리 및 환경 추가
Code: build.gradle
2-2) 롬복 적용 및 사용법
@RequiredArgsConstructor : final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다.
@Setter, @Getter : 필드를 확인한 후 setter와 getter를 자동으로 만들어준다.
롬복을 통해서 생성자를 한 개를 만들어줌으로써 자동으로 Autowired가 걸린다.
Code : OrderServiceImpl
자동으로 Setter와 Getter를 만들어 주고, 우리는 사용하기만 하면 된다.
Code: Member
결론
DI 의존성 주입은 생성자 주입을 통해서 넣는 것을 지향하는 게 좋다.
그리고 롬복을 사용하면 코드가 깔끔해지면서 관리하는 측면에서 관리하기가 편해진다. 하지만 주의해야 될 점은
@Autowired가 없음 해도 잘 의존성 주입이 잘되는 이유는 생성자가 1개일 때는 자동으로 Spring에서 @Autowired를 해주기 때문이다.!
이 글은 인프런의
제목 : 스프링 핵심 원리 - 기본편
강사 : 김영한 님의 동영상을 참조해 만들었습니다.