작성
·
299
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.위에서 private final ItemRepository itemRepository라고 작성한 부분은
ItemRepository의 객체를 하나만 사용하려는 목적. 즉, 싱글톤 객체를 사용하려는 목적으로 이해를 했습니다.
근데, 위에 코드는 ItemRepository의 참조값을 담을 수 있는 변수를 선언만 하고 실제 객체를 가져오는 부분(ItemRepository 객체)이 없는거 같은데
어떻게 ItemRepository 객체를 BasicItemController 클래스에서 사용할 수 있는건가요?
설명 부탁드립니다.
답변 2
0
0
안녕하세요!
final
자바에서 final 키워드는 싱글톤 객체를 선언하려는 목적이 아닌, 재할당이 불가능하도록 만드는 데에 있습니다.
이처럼 새로운 값으로 재할당 되지 못하도록 막는 역할을 합니다.
따라서 final 객체가 선언 될 때에는 반드시 값을 가져야 합니다. 즉, 초기화가 반드시 필요합니다. (재할당이 불가능하게, 불변하게 사용 할 값이므로 null 이 되어서는 안되겠죠)
스프링의 의존성 주입
스프링은 @Compnent 어노테이션 혹은 @Component 가 포함된 어노테이션 (@Controller, @Service...) 가 선언된 클래스의 생성을 직접 관리하고, 이 관리하는 객체들을 의존성 주입 이라는 방식을 통해서 사용할 수 있게 도와줍니다. 그리고 이 의존성 주입을 하는 방법 중에는 생성자 주입 이라는 방법이 있습니다.
질문자님께서 사용하신 방법이 바로 이 생성자 주입 방식입니다. 이 부분은 컨트롤러 위에서 선언해주신 롬복 어노테이션인 @RequiredArgsConstructer 를 통해서 이루어 지고 있습니다! (해당 어노테이션은 final 이 붙은 필드들이나 @NonNull 인 필드들의 생성자를 간편하게 선언 해 주는 역할을 합니다)
도움이 되었을까요? 더 자세한 내용은 링크를 한번 확인 해 보셔도 좋을 것 같습니다!
감사합니다.