필드 주입 방식보다 생성자 주입을 권장하는 이유

seheeee_97·2024년 1월 19일
0

개인 공부

목록 보기
20/44

@RequiredArgsConstructor

: final이 붙거나 @NotNull 이 붙은 필드의 생성자를 자동 생성해주는 롬복 어노테이션

👎필드 주입 방식

@Service
public class PostServiceImpl implements PostService {
    
	@Autowired
	private PostRepository postRepository;
}

👍@RequiredArgsConstructor 사용한 생성자 주입 방식

@Service
@RequiredArgsConstructor
public class PostServiceImpl implements PostService {
    
	private final PostRepository postRepository;
}

🤔어노테이션 없는 생성자 주입 방식

@Service
public class PostServiceImpl implements PostService {

    private final PostRepository postRepository;

    @Autowired
    public PostServiceImpl(PostRepository postRepository) {
        this.postRepository = postRepository;
    }
}



👩‍🏫생성자 주입을 권장하는 이유(생정자 주입 장점)

1. 불변성

클래스 인스턴스를 생성할 때 필요한 의존성을 한 번에 주입함으로써 객체의 상태를 변경 불가능하게 만들어 객체의 예측 가능성을 높이고 오류를 방지

2. 의존성 주입의 강제화

코드의 안전성을 높이고, 런타임에 발생할 수 있는 의존성 부재로 인한 오류를 미리 방지

// 생성자 주입을 사용한 경우
MyClass myObject = new MyClass(myDependency); // 의존성 주입 필수

// 필드 주입을 사용한 경우
MyClass myObject = new MyClass(); // 의존성 주입 없이 객체 생성 가능

3. 테스트 용이성

생성자 주입은 의존성을 외부에서 주입받기 때문에, 테스트 중에 모의 객체(Mock Objects) 등을 쉽게 주입하여 테스트할 수 있음

4. 순환 참조 방지

순환 참조는 두 개 이상의 클래스가 서로를 의존하는 상황을 말하는데 생성자 주입을 사용하면 컴파일 시점에 순환 참조를 감지할 수 있음

5. 변경 용이성(Changeability)

생성자 주입은 의존성이 변경되는 경우 해당 클래스의 생성자만 수정하면 됨.
반면에 필드 주입은 필드를 직접 수정해야 하므로 변경에 따른 유지보수가 더 어려울 수 있음

0개의 댓글