[final 필드]

final의 의미는 최종적이란 뜻을 가지고 있습니다.

final필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없다는 것입니다. final 필드는 다음과 같이 선언됩니다.


final 타입 필드 [ = 초기값];


ex)

[Person.java]

public class Person {

final String nation = "Korea";

final String num;

String name;


public Person(String num, String name) {

this.num = num;

this.name = name;

}

}


[PersonExample.java]

public class PersonExample {

public static void main(String[] args) {

Person p1 = new Person("123-123", "최진우");


System.out.println(p1.nation);

System.out.println(p1.num);

System.out.println(p1.name);


//p1.nation = "USA"';        -> final 필드는 값 수정 불가

//p1.num = "456-456";      -> final 필드는 값 수정 불가

p1.name = "지누";

}

}


[상수 (static final) ]

일반적으로 불변의 값을 상수라고 부릅니다.

이런 불변의 값을 저장하는 필드를 자바에서 상수(constant) 라고 합니다.

final과 차이를 살펴보겠습니다.

final필드는 한 번 초기화 되면 수정할 수 없는 필드라고 하였습니다. 그러나 final필드를 상수라 하지는 않습니다.

왜냐하면 불변의 값은 객체마다 저장할 필요가 없는 공용성을 띠고 있으며, 여러가지 값으로 초기화 될 수 없기 때문입니다.

final 필드는 객체마다 저장되고, 생성자의 매개값을 통해서 여러가지 값을 가질 수 있기 때문에 상수가 될 수 없습니다. 상수는 static 이면서, final 이어야 합니다. static final 필드는 객체마다 저장되지 않고, 클래스에만 포함됩니다.

그리고 한 번 초기값이 저장되면 변경할 수 없습니다.

static final 타입 상수 [ = 초기값];


예시)

static final 타입 상수;

static {

상수 = 초기값;

}


ex)

static final double  PI = 3.14159;

static double EARTH_SURFACE_AREA;

-> (상수 이름은 모두 대문자로 작성하는 것이 관례입니다.)



WRITTEN BY
SiriusJ

,