다양한 의존관계 주입 방법

지정욱·2025년 1월 8일

다양한 의존관계 주입 방법

의존 관계 주입 방법으로 크게 4가지 방법이 있다.
1. 생성자 주입
2. 수정자 주입(setter 주입)
3. 필드 주입
4. 일반 메서드 주입

생성자 주입

▪️생성자 주입은 생성자를 통해서 의존 관계를 주입 받는 방법을 말한다.
▪️생성자 호출 시점에 딱 1번만 호출히 가능하다.
▪️불변, 필수 의존관계에 사용된다.

@Autowired
public OrderService(MemberRepository memberRepository, MemberService, memberService) {
 this.memberRepository = memberRepository;
 this.memberService = memberService;
    }
 }

생성자가 1개만 있으면 @Autowired는 생략해도 자동으로 주입된다.

수정자 주입(setter 주입)

▪️setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방식이다.
▪️setter메서드를 통해서 선택, 변경 가능성이 있는 의존관계에 사용된다.

@Autowired
public void setMemberRepository(MemberRepository memberRepository){
	this.memberRepository = memberRepository;
}

setXxx, getXxx라는 메서드를 통해서 값을 읽거나 수정하는 규칙을 만들었는데, 이것이 자바빈 프로퍼티 규약이다.

필드 주입

▪️필드에 바로 주입하는 방식이다.
▪️코드가 간결하지만 치명적인 단점으로 외부에서 변경이 불가능해서 테스트하기하 어렵다.
▪️ DI 프레임워크가 없으면 아무것도 할 수 없다.
▪️사용하지 않는 것이 좋다.

@Autowired
private MemberRepository memberRepository

일반 메서드 주입

▪️일반 메서드를 통해서 주입 받을 수 있다.
▪️한번에 여러 필드를 주입 받을 수 있다.
▪️잘 사용하지 않는다.

@Autowired
public void init(MemberRepository memberRepository, MemberService memberService){
	this.memberRepository = memberRepository;
	this.memberService = memberService;
}

@Autowired 옵션 처리

주입할 스프링 빈이 없어도 동작해야 할 때가 있다.
그런게 @Autowired만 사용하면 required 옵션의 기본값이 true로 되어 있어서 자동 주입 대상이 없으면 오류가 발생한다.

▪️저동 주입 대상을 옵션으로 처리하는 방법

@Autowired(required = false)

자동 주입할 대상이 없으면 수정자 메서드 자체가 호출이 안된다.

최신 트랜드의 의존관계 주입

바로 @RequiredArgsConstructor 어노테이션을 사용하는 것이다.
▪️롬북 라이브러리가 제공하는 @RequiredArgsConstructor기능을 사용하면 final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다.

@RequiredArgsConstructor
public class OrderService {
	private final MemberRepository memberRepository
}

정리하면 최근에는 생성자를 딱 1개 두고, @Autowired를 생략하는 방법을 주로 사용한다. 여기에 Lombok 라이브러리의 @RequiredArgsConstructor함께 사용하면 기능은 다 제공하면서, 코드는 깔끔해진다.

profile
T자형 개발자가 되자

0개의 댓글