Spring Boot 공부 일기 <2> - Constructor Injection(생성자 주입), Setter Injection(수정자 주입)

이동휘·2024년 8월 5일

Spring Boot

목록 보기
2/21

1. IDE

Intellij

2. 오늘 공부 내용

Constructor Injection(생성자 주입)

Constructor Injection(생성자 주입) - 객체 생성 시점에 필요한 의존성을 생성자 파라미터로 전달받아 주입하는 방식

장점

  • 불변성 - 의존성이 객체 생성 후 변경되지 않도록 보장할 수 있어, 객체를 불변하게 유지하는 데 유리
  • 필수 의존성 강제 - 의존성을 생성자에게 모두 받기 떄문에, 객체가 생성되기 위해 필요한 의존성을 반드시 제공해야 함
  • 테스트 용이성 - 필요한 의존성을 생성자에서 직접 주입하기 때문에, 단위 테스트 시 의존성을 쉽게 대체 할 수 있음

단점

  • 긴 생성자 - 의존성이 많아지면 생성자의 파라미터가 많아져 코드 가독성이 떨어질 수 있음

예시

public class MyService {
    private final MyRepository repository;

    // Constructor Injection
    public MyService(MyRepository repository) {
        this.repository = repository;
    }
}

Setter Injection(수정자 주입)

Setter Injection(수정자 주입) - 객체 생성 후 Setter 메서드를 통해 의존성을 주입하는 방식

장점

  • 유연성 - 객체 생성 후에도 의존성을 변경할 수 있어, 상황에 따라 의존성을 유동적으로 주입하거나 변경할 수 있음
  • 선택적 의존성 - 필수적이지 않은 의존성은 선택적으로 주입할 수 있어, 설정이 간단한 경유 유용

단점

  • 가변성 - 의존성이 객체의 생성 후에도 변경될 수 있어, 객체의 일관성이 보장되지 않을 수 있음
  • 테스트 어려움 - 객체 생성 시 모든 의존성이 주입되지 않기 떄문에, 일부 의존성을 주입하지 않으면 NullPointException 같은 런타임 오류 발생
  • 필수 의존성 보장 어려움 - 필수적인 의존성에 대해서도 주입되지 않을 가능성이 있기 떄문에 , 객체가 제대로 초기화되지 않을 수 도 있음

예시

public class MyService {
    private MyRepository repository;

    // Setter Injection
    public void setRepository(MyRepository repository) {
        this.repository = repository;
    }
}

정리

  • Constructor Injection은 객체의 불변성을 보장하고 필수 의존성을 강제할 수 있지만, 의존성이 많을 경우 생성자가 복잡해질 수 있음
  • Setter Injection은 유연하게 의존성을 주입하고 변경할 수 있지만, 객체의 상태가 불안정해질 수 있음

0개의 댓글