현재 질문 게시판에 있는 함수형 글에 호기심이 가서 학습 및 정리를 위해 간단히 글을 작성해보았습니다.

*불필요하게 긴 설명과 잘못된 내용이 조금 있어 수정했습니다.

1. 람다와 final


이번 오류는 람다가 외부에서 값을 읽어온 후 참조하는 과정에서 발생했습니다. 현재 Number클래스 내부에서는 number필드 변수에 final 키워드가 있으면서 값을 명시적으로 할당해주지 않았고, 값이 할당되어 있지 않은 상태에서 divisionByNumber 필드가 number의 값을 참조하려 하고 있습니다. 오류 메시지 또한 이와 같습니다.

Screen Shot 2022-01-23 at 2.58.37 PM.png

즉, 이는 초기화 되지 않은 변수를 참조하고 있기 때문에 발생한 문제인데요, 이를 정리하면 아래와 같습니다.

  1. 자바의 final 키워드가 붙으면 선언 시점에 명시적으로 값을 할당해 줘야 한다.
  2. 단, 생성자에서 이를 받는 경우, 생성과 동시에 할당되기 때문에 이를 신경쓰지 않아도 된다.
public class Number {

    private final int number;
	
    // 생성자에서 받는 경우는 즉시 할당하지 않아도 된다.
    public Number(int number) {
        this.number = number;
    }