여러 가지 문제들에 의해 필드주입, setter주입은 사용을 지양하며 반드시 생성자 주입을 사용하는게 좋다.
생성자 주입은 필드변수에 final키워드 사용 가능, 테스트 코드에서 컴파일에러를 통해 실수한 부분을 바로 알 수 있음 등의 장점이 있다.
하지만 생성자 코드를 그때그때 전부 입력하는 것은 좀 귀찮을 수도 있다.
Lombok 라이브러리를 통해 이를 해결할 수 있다.
Lombok 라이브러리는 start.spring.io 에서 프로젝트 생성 시 Dependencies에서 검색하여 추가할 수 있다.
이 라이브러리를 사용하기 위해선
file -> settings -> build, execution, deployment -> compiler -> annotation processors 에서 enable annotation processing을 체크해주어야 한다.
(file -> settings -> plugins 에서 lombok 검색하여 설치는 반드시 해줘야 함)
Lombok 라이브러리를 사용하면 getter, setter, 생성자 등을 직접 만들지 않아도 된다.
클래스에 @Getter, @Setter를 다는 것만으로 라이브러리가 만들어주는 getter, setter를 사용할 수 있으며,
@RequiredArgsConstructor 를 통해 final이 붙은 필드변수들을 받는 생성자를 알아서 만들어준다
@Component
@RequiredArgsConstructor // final이 붙은 필드변수들을 받는 생성자를 알아서 만들어준다
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
}
위 코드에서 눈에 보이는 생성자는 없지만 @RequiredArgsConstructor 에 의해 memberRepository, discountPolicy 두 객체를 받아서 주입해주는 생성자가 존재하게 된다.
생성자 주입의 이점과 코드의 간편화를 동시에 챙길 수 있다.
'김영한님 스프링 강의 정리 > 핵심원리 기본편' 카테고리의 다른 글
빈 생명주기 콜백 (0) | 2021.01.15 |
---|---|
조회한 빈이 두 개 이상일 때? 필드명, @Qualifier, @Primary (0) | 2021.01.11 |
의존성 주입 @Autowired, 옵션 처리 설정 (0) | 2021.01.11 |
빈 이름 중복에 의한 충돌 (0) | 2021.01.10 |
컴포넌트 스캔 - @Component, @Autowired, @Qualifier (0) | 2021.01.09 |