작성
·
662
1
강의 잘 듣고 있습니다. (그랜절)
다 듣고 수강평을 쓸 예정이지만, 중반이상 본 지금도
매우 만족흡족하면서 옆에서 개발지도해주는 느낌으로 잘 해나가고 있습니다.
게시글 수정쪽 와서
전반적인 구조와 설계를 살펴볼 겸 만지작 거려 봤는데
괜히 이 친구가 눈에 밟혀서...
'왜 final 이지?' 라는 생각으로 final을 날려봤습니다.
private final PostRepository postRepository;
근데 에러가 좌라라라라라라랅
메세지는 아래처럼 postRepository를 주입받지 못해서 null 이란거 같은데
Request processing failed; nested exception is java.lang.NullPointerException: Cannot invoke "com.in2l.in2Leisure.api.repository.PostRepository.save(Object)" because "this.postRepository" is null
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException: Cannot invoke "com.in2l.in2Leisure.api.repository.PostRepository.save(Object)" because "this.postRepository" is null
at app//org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
다시한번 제 기본기 없음을 한탄하며,
제가 아는 (써오던) final은 그저 더이상 바꾸기 싫을때 final이라는 단편적인 생각이고
JPARepository를 상속받은 postRepository가 final은 왜 필요하고,
final이 없으면 왜 주입을 못받는건지 모르겠습니다....
(아니면 주입의 문제가 아닌건가요? 설마....)
너무 근본, 근원, 기본적인 질문이라
적절한 설명이 있는 블로그나 강의가 있으면 알려주셔도 어마무시 감사합니다.
답변 1
1
안녕하세요. 호돌맨입니다.
질문을 남겨주셔서 감사합니다.
final을 붙이는 이유는 롬복의 @RequiredArgsConsturctor와 관련이 있고, @RequiredArgsConstructor를 넣는 이유는 생성자와 관련이 있고, 생성자를 쓰는 이유는 설마 하셨던 생성자주입과 관련이 있습니다. (정확히 final을 붙이는 장점은 불변성을 위해서입니다)
관련링크: https://jackjeong.tistory.com/41
한글 검색키워드: 생성자 주입
영어 검색키워드: spring constructor injection
감사합니다. ㅎㅎ