@RequiredArgsConstructor
2022. 2. 13. 17:57ㆍBack-end/Spring
반응형
의존성주입의 종류로는 Constructor(생성자),Setter,Field 타입이 있다.
- Constructor(생성자)
public class ExampleCase {
private final ChocolateService chocolateService;
private final DrinkService drinkService;
@Autowired
public ExampleCase(ChocolateService chocolateService, DrinkService drinkService) {
this.chocolateService = chocolateService;
this.drinkService = drinkService;
}
}
- Setter
public class ExampleCase{
private ChocolateService chocolateService;
private DrinkService drinkService;
@Autowired
public void setChocolateService(ChocolateService chocolateService){
this.chocolateService = chocolateService;
}
@Autowired
public void setDrinkService(DrinkService drinkService){
this.drinkService = drinkService;
}
}
3.Field
public class ExampleCase{
@Autowired
private ChocolateService chocolateService;
@Autowired
private DrinkService drinkService;
}
@RequiredArgsConstructor 어노테이션을 사용한 생성자 주입 방법
생성자주입의 단점은 위의 Constructor(생성자) 코드처럼 생성자를 만들기 번거롭다는 것이다. 하지만 이를 보완하기위해 롬복을 사용하여 간단한 방법으로 생성자 주입 방식의 코딩을 할 수 있다.
@RequiredArgsConstructor
final이 붙거나 @NotNull 이 붙은 필드의 생성자를 자동 생성해주는 롬복 어노테이션
필드 주입방식을 사용한 기존 Service
@Service
public class BannerServiceImpl implements BannerService {
@Autowired
private BannerRepository bannerRepository;
@Autowired
private CommonFileUtils commonFileUtils;
@RequiredArgsConstructor 를 활용한 생성자 주입
@Service
@RequiredArgsConstructor
public class BannerServiceImpl implements BannerService {
private final BannerRepository bannerRepository;
private final CommonFileUtils commonFileUtils;
...
@RequiredArgsConstructor를 사용하지 않으면 원래는 이렇게 생성자 주입을 해야한다
@Service
public class BannerServiceImpl implements BannerService {
private BannerRepository bannerRepository;
private CommonFileUtils commonFileUtils;
@Autowired
public BannerServiceImpl(BannerRepository bannerRepository, CommonFileUtils commonFileUtils) {
this.bannerRepository = bannerRepository;
this.commonFileUtils = commonFileUtils;
}
...
Lombok에서 지원하는 @RequiredArgsConstructor 어노테이션을 사용하여 의존성을 주입 하는 것을 생성자 주입이라고 한다.
스프링 팀은 생성자 주입을 사용할 것을 권장한다.
생성자 주입을 사용할 경우 아래와 같은 장점이 있다.
① 순환 참조 방지
② 테스트 코드 작성 용이
③ 코드 악취 제거
④ 객체 변이 방지 (final 가능)
반응형
'Back-end > Spring' 카테고리의 다른 글
하드코딩을 피하기! (상수 사용, StringBuilder 사용) (0) | 2022.03.30 |
---|---|
[ubuntu] nginx let's encrypt로 https 적용시키기 (0) | 2022.03.30 |
AWS EC2 서버가 갑자기 꺼졌다! 혹은 느려졌다? (0) | 2022.03.29 |
무중단배포 & 배포자동화(Github Actions + CodeDeploy + Nginx) (0) | 2022.03.22 |
Spring : 게시판 : 내림차순 : 최신순으로 하는 법 (0) | 2022.01.25 |