그렇게 오래된 글은 아니지만 제대로 정리를 안하고 끝난 거 같기도 하고 이펙티브 자바 인터페이스&클래스를 배우며 불변, 고정에 대한 말이 자주 나오는 거 같아 헷갈리는 두 개념에 대해 정리하고자 한다.
=> 최종적인 값이므로, 값의 수정이 불가!
final List<Integer> num = {1,2,3,4,5,6};
num.add(7); //가능!
//그래서 Collections.unmodifiableList()가 사용됨
++ Java8에서 추가된 Effective final
int num = 10; //Effective final이다
//선언부터 소멸까지 값이 변경 X이므로
Number number = new Number() {
@Override
public void print() {
System.out.println("num: "+num);
}
}
number.print();
=> 객체 생성 없이 사용할 수 있는 필드, 메서드 생성하고자 할 때!
보통은 클래스 선언시에 많이 사용된다.
ex. public static class Student {}
인스턴스 필드를 포함하지 않고 공용으로 사용되기 때문에
public static class Yeonsan {
static int val = 10;
static int gop(int a, int b) {
return a*b;
}
}
int res1 = Yeonsan.gop(4, 5);
int res2 = Yeonsan.val+5;
위의 경우처럼 바로 굳이 선언해주지 않고 메서드나 필드에 접근하면 됨
static
으로 선언되어야 한다.말 그대로 해석해보자. 최종적으로 고정돼 있는 변수. 값을 변경할 수 없는 변수. 딱 상수
앞에 잘 쓰일 거 같지 않은가?
(ex) static final double PI = 3.141592..
https://doing7.tistory.com/146
https://sudo-minz.tistory.com/135
https://gobae.tistory.com/3