• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

JPA 관련 질문입니다. 기본적인 질문이라 선죄송...

22.08.07 00:36 작성 조회수 415

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

감사합니다. ㅎㅎ