final 키워드가 붙으면 절대 변경할 수 없다. ➡︎ 생성자를 통해 바꿀 수 없다.
💡 클래스 내 필드를
초기화하면 값을 절대 변화 시킬 수 없다.public Class Data () { final int value = 10; // 초기화 한 경우 }
final + 초기화를 하는 경우에는 static을 붙여 메모리 비효율을 줄일 수 있고 중복을 없앨 수 있다. 💡
초기화를 하지 않은 경우에는 생성자를 통해 값을 할당해 줄 수 있다.
DataMain.javaData data1 = new Data(10) // 객체1 data1.print(); -> 10출력 Data data1 = new Data(20) // 객체2 data2.print(); -> 20출력Data.java
public Class Data () { final int value; // 초기화 한 경우 public void print() { System.out.println(this.value); }
❗생성자를 통해 값을 초기화할 경우 인스턴스마다 final 필드에 다른 값을 할당할 수 있다. 즉, 객체의 인스턴스 필드마다 final값을 할당한다.
💡 매개변수에 final을 붙이면 매서드 내부에서 매개변수 값을 변경할 수 없다.
public Class Data () { public int data (final int value) { vlaue = 20; //불가능! return value; } }
❗매개변수가
final이기 때문에 메서드 내에서 변경 불가하다.
대문자를 사용하여 상수명을 정하고 구분은 _를 통해서 한다. ➡︎ 이는 변수와 상수를 구분하기 위해서이다.
ex> static final N_PI
final + 참조형을 하게되면 주소가 고정된다.
final Data data = new Data(); //주소: x001로 고정

❗ 참조 값 내는 final로 선언되지 않기 때문에 변경 가능하다.