ViewController를 만들고 테스트를 하려고 다음과 같이 welcome page를 만들었는데
무시무시한 에러페이지 등장.
문제는 private BookService bookService;였다. 이 코드를 다음과 같이 수정해주었더니 문제 해결
[수정 전]
[수정 후]
중요한건 왜이다.
왜 final을 붙여주면 오류가 발생하지 않고 안붙여주면 오류가 발생할까?
그 전에 final에 대해서 알아야한다.
final
- Java에서 final이라는 키워드는 "마지막의" 또는 "변경될 수 없는"이라는 의미를 가지고 있다.
- final이라는 키워드가 변수에 붙으면 값을 변경할 수 없는 상수가 되고 메서드에 붙으면 오버라이딩을 할 수 없고 클래스에 붙으면 자손 클래스를 정의하지 못한다.
- final이 붙은 변수는 "상수"라서 일반적으로 선언과 초기화를 동시에 한다.
- 수정 전 코드를 보면 final이 붙지 않아서 초기화가 진행되지 않아 NullPointerException이 발생한 것이다.