[Java 13] final 필드와 상수
학습목표
- final 필드의 선언과 초기화 방법을 안다.
- 상수(static final)의 선언과 초기화 방법을 안다.
- final 필드와 상수의 차이점을 안다.
1. final 필드
final 필드가 저장되면 이것이 최종적인 값이 되어 프로그램 실행 도중에 수정이 불가능하다는 뜻입니다.
final 타입 필드 [= 초기값]; //final 필드의 선언
수정이 불가능한 fianl 필드의 초기값을 줄 수 있는 방법에는 두가지가 있습니다.
1) 필드 선언시에 주는 방법
2) 생성자에서 주는 방법
예제를 통해 final 필드의 선언과 초기화를 살펴보겠습니다.
예제 1
public class Person {
final String nation = "Korea";
final String ssn;
String name;
public Person(String ssn, String name) {
this.ssn = ssn;
this.name = name;
}
}
public class FinalMain {
public static void main(String[] args) {
Person p1 = new Person("123456-1234567", "홍길동"); // p1 생성자 초기화
System.out.println(p1.nation);
System.out.println(p1.ssn);
System.out.println(p1.name);
System.out.println();
//p1.nation = "usa"; // nation과 ssn 은 final 필드로 선언했기에 수정이 불가
//p1.ssn = "412312-1231231";
p1.name = "김길동"; // name은 수정 가능
Person p2 = new Person("123222-3212311", "이길동"); //p2 생성자 초기화
System.out.println(p2.nation);
System.out.println(p2.ssn);
System.out.println(p2.name);
}
}
2. 상수(static final)
상수는 불변의 값을 의미합니다. 상수는 static이면서 final이어야 합니다. sttic final 필드는 객체마다 저장되지 않고, 클래스에만 포함됩니다. 또한 한 번 초기값이 저장되면 변경할 수 없습니다.
※ final 필드를 상수가 될 수 있는가라는 의문이 생길 수 있습니다. 결론적으로 fianl 필드를 상수라고 부르지 않습니다. 상수는 객체마다 저장할 필요가 없는 공용성을 가지고 있고, 여러가지 값으로 초기화될 수 없기 때문입니다.
static final 타입 상수 [=초기값];
초기값이 단순 값이라면 선언 시에 주는 것이 일반적이고, 복잡한 초기화의 경우 정적 블록에서 가능합니다.
static final 타입 상수;
static {
상수 = 초기값;
}
예제 1
상수는 다음과 같이 선언합니다.
static final double PI = 3.141592; //상수 이름은 모두 대문자로 작성
static final double EARTH_SQUARE_AREA; //서로 다른 단어 혼합 시 언더바(_)로 단어 연결
예제 2
public class Earth {
static final double EARTH_RADIUS = 6400;
//정적 블록을 이용한 초기화
static final double EARTH_SURFACE_AREA;
static {
EARTH_SURFACE_AREA = 4 * Math.PI * EARTH_RADIUS * EARTH_RADIUS;
}
}
public class EarthMain {
public static void main(String[] args) {
System.out.println("지구의 반지름 : " + Earth.EARTH_RADIUS + "km");
System.out.println("지구의 표면적 : " + Earth.EARTH_SURFACE_AREA + "km^2");
}
}
실행결과
지구의 반지름 : 6400.0km
지구의 표면적 : 5.147185403641517E8km^2
댓글남기기