프로덕션 코드에서 이 방식이 바람직하지 않은 이유는 무엇일까? 이 방식을 사용하는 것이 완전히 잘못된 것은 아니지만, 프로덕션 코드로 앱을 유지 관리하고 테스트할 수 있도록 만들고 싶을 것이다. 필드에 직접 값을 주입한 결과는 다음과 같다.
• 다음 코드에서 보듯이 필드를 final로 만들 수 있는 방법은 없으며, final로 만들면 초기화한 후 아무도 값을 변경하지 못하게 할 수 있다.
@Component
public class Person {
private String name = "Ella";
@Autowired
private final Parrot parrot; ← 초깃값 없이는 final 필드를 정의할 수 없기 때문에 컴파일이 실패한다.
}
• 초기화할 때 값을 직접 관리하는 것이 더 어렵다.
나중에 15장에서 배우겠지만, 때로는 객체의 인스턴스를 생성하고 단위 테스트 의존성을 쉽게 관리할 필요가 있다.