포스트

Spring에서 Autowire의 적용하여 속성과 생성자 비교

소개

Spring 프레임워크에서 의존성 주입(Dependency Injection)을 하기 위해 @Autowired 어노테이션을 사용할 수 있습니다. 이 어노테이션을 속성과 생성자에 적용하는 방식에는 각각 장점과 단점이 있습니다. 본 글에서는 두 방식을 자세하게 비교하여 어떤 경우에 어떤 방식을 사용해야 하는지 설명하겠습니다.

속성에 Autowire 적용

장점

  1. 코드 간결성: 속성에 직접 적용하므로, 별도의 생성자나 설정자(setter) 메서드가 필요 없습니다.
  2. 직관성: 의존성이 어떤 속성에 적용되는지 한 눈에 알 수 있습니다.

단점

  1. 불변성 위반: 속성에 직접 접근해 변경이 가능하므로 객체의 불변성(Immutability)이 깨질 수 있습니다.
  2. 테스트 어려움: 의존성을 외부에서 주입하기 어려워, 단위 테스트가 복잡해집니다.

생성자에 Autowire 적용

장점

  1. 불변성 유지: 생성자를 통해 한 번만 의존성을 주입하므로, 객체가 불변성을 유지할 수 있습니다.
  2. 테스트 용이성: 생성자를 통해 의존성을 주입하면 단위 테스트에서도 쉽게 객체를 생성하고 테스트할 수 있습니다.

단점

  1. 코드 복잡성: 의존성이 많을 경우 생성자가 복잡해질 수 있습니다.

결론: 어떤 방식을 선택할까?

@Autowired 어노테이션을 속성에 적용할지, 생성자에 적용할지 선택하는 것은 프로젝트의 필요와 상황에 따라 달라집니다. 그러나 일반적으로는 생성자에 적용하는 것이 불변성과 테스트 용이성 때문에 권장됩니다. 이로 인해 코드의 유지 보수가 쉬워지고, 버그 발생 가능성이 줄어듭니다.

생성자에 @Autowired를 적용하면 Spring 4.3 버전 이후에는 어노테이션을 생략할 수도 있습니다. 이는 Spring이 단 하나의 생성자만 있는 경우 자동으로 의존성을 주입해주기 때문입니다.

따라서 불변성과 테스트 용이성을 중시한다면 생성자에 @Autowired를 적용하는 것이 좋습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.