728x90
Effectively final
자바 8에서 도입된 Effectively final이란 final 키워드가 붙지 않은 변수가 사실상 final인 경우를 말한다. 즉, final 변수가 아님에도 불구하고 값이 변경되지 않는다면 그 변수는 Effective final이라고 할 수 있다.
자바8 이전에는 내부 클래스, 익명 클래스에서 외부 변수를 참조할 시 그 변수가 반드시 final 변수여야 했다.
자바8의 Effectively final 도입으로 final 키워드가 붙지 않은 변수라도 값이 어디에서도 변경되지 않는다면 final 변수처럼 내부 클래스, 익명 클래스, 람다 표현식에서 참조할 수 있게 되었다.
public class Main {
public void method() {
//final 키워드가 없음에도 불구하고 아래의 내부 클래스, 익명 클래스, 람다 표현식에서 참조 가능 -> Effectively final
int num = 10;
//내부 클래스
class InnerClass {
void innerMethod() {
System.out.println(num);
}
}
//익명 클래스
Consumer<Integer> consumer = new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
System.out.println(num);
}
};
//람다 표현식
IntFunction<Integer> plus = (i) -> num + i;
plus.apply(10);
}
}
참고
'자바' 카테고리의 다른 글
djb2 문자열 해시 함수 (0) | 2022.03.04 |
---|---|
[Java] ThreadLocal (0) | 2021.12.30 |
[자바] 문자열 뒤집기 - StringBuilder.reverse() (0) | 2021.07.05 |
[자바] 직렬화(Serialization) - Serializable, ObjectInputStream, ObjectOutputStream, Transient, serialVersionUID (0) | 2021.05.22 |
[자바] Java8 Optional 옵셔널 (0) | 2020.12.24 |
댓글