Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

봄디의 개발일지

[스프링] @RequiredArgsConstructor 어노테이션 본문

스프링

[스프링] @RequiredArgsConstructor 어노테이션

bomdy 2024. 11. 3. 22:55

1️⃣ 의존성 주입의 종류

의존성 주입의 종류로는 Field (필드주입) , Setter (세터주입) ,  Constructor (생성자 주입) 이 있습니다. 

 

✅ Field

public class TestService {
    
    @Autowired
    private UserRepository userRepository;
    
    @Autowired
    private MemberRepository memberRepository;
}

 

✅ Setter

public class TestService {
    private UserRepository userRepository;
    private MemberRepository memberRepository;

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

 

✅ Constructor

public class TestService {
    private final UserRepository userRepository;
    private final MemberRepository memberRepository;
    
    @Autowired
    public TestService (UserRepository userRepository, MemberRepository memberRepository) {
        this.userRepository = userRepository;
        this.memberRepository = memberRepository;
    }
}

 

 

Field, Setter 를 통한 의존성 주입은 필드를 final 로 선언할 수 없기 때문에  불변성 보장이 어렵고, 의존성이 누락 될 위험도 존재합니다. 

Constructor 를 통한 의존성 주입은 생성자 코드를 넣어줘야한다는 단점이 있습니다. 

따라서 @RequiredArgsConstructor 어노테이션을 통해 안정적이고 가독성 있는 코드를 작성하는 게 좋습니다.


2️⃣  @RequiredArgsConstructor 어노테이션이란 ?

@RequiredArgsConstructor 어노테이션이란 Lombok 라이브러리에서 제공하는 기능으로, 

java 클래스에서 final 로 선언된 필드@NotNull 로 선언된 필드에 대해 생성자를 자동으로 생성해주는 어노테이션입니다.

 

@RequiredArgsConstructor 어노테이션을 사용하면 새로운 필드를 추가할 때 생성자를 다시 만들어야하는 불편함을 없애줍니다. 

또한 Mock 객체 주입이 용이해져 테스트 코드의 작성이 쉬워집니다. 

 

✅ @RequredArgsConstructor 사용코드

@RequiredArgsConstructor
public class TestService {
    private final UserRepository userRepository;
    private final MemberRepository memberRepository;
}