‡👩‍💻 ‡/º Error 기록

[Error] @RequiredArgsConstructor | JPA Service나 Repository에 Null Pointer 에러

Trudy | 송연 2024. 1. 3. 21:53

다른 변수에 Null Pointer Exception이 떴을 거라 생각했지만, 디버깅을 돌려보니 Null Pointer Exception이 JPA Respoistory나 Service에 떴다. 

어떻게 하면 이 곳에 Null이 들어가는 지 의문이 들었는 데, 찾아보니까 의존성 주입이 안돼서 그런 것이었다. 

java.lang.NullPointerException: null
	at com.example.demo.user.service.UserService.create(UserService.java:93) ~[classes/:na]

 

 

@RequiredArgsConstructor을 이용해서 생성자 주입을 통해 UserRepository를 의존성 주입을 시켜줬는 데,  final을 달아주지 않아서 생긴 에러였다. 

@RequiredArgsConstructor은  final이나 @NonNull이 붙은 필드들에 대한 생성자를 생성해주기 때문에 의존성 주입이 되지 않는다. 

 

private이나 final을 평소에 달지 않고, 직접 생성자를 구현해서 의존성 주입을 했었는 데 잘 동작했어서 생겼던 사소한 나쁜 습관 때문이었다.

꼼꼼히 private이나 final 등 제어자를 잘 달아주기... 메모

 


@RequiredArgsConstructor의 동작원리를 알면 이 문제에 대해 쉽게 파악했을 것 같다. 

생성자를 자동으로 만들어주는 어노테이션에 대해 알아보자

 

@AllArgsConstructor

  • 클래스의 모든 필드를 인자로 받는 생성자를 자동으로 생성해주는 어노테이션

@NoArgsConstructor

  • 매개변수가 없는 디폴트 생성자를 자동으로 생성해주는 어노테이션

@RequiredArgsConstructor

  • 필드 중 final이나 @NonNull이 붙은 필드들에 대한 생성자를 자동으로 생성해주는 어노테이션