Java/기초문법

[Java] final 필드와 상수

worldcenter 2024. 9. 24. 22:14

 

인스턴스 필드와 정적 필드는 언제든지 값을 변경할 수 있습니다. 그러나 경우에 따라서는 값을 변경하는 것을 막고 읽기만 허용해야 할 때가 있습니다. 이 때 final 필드상수를 선언해서 사용합니다.

 

final 필드 선언

final은 '최종적'이란 뜻을 가지고 있습니다. final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없게 됩니다.

final String nation = "대한민국";

 

final 필드에 초기값을 줄 수 있는 방법은 2가지 입니다.

1. 필드 선언 시에 초기값 대입
2. 생성자에서 초기값 대입

 

고정된 값이라면 필드 선언 시에 주는 것이 제일 간단합니다. 하지만 복잡한 초기화 코드가 필요하거나 객체 생성 시에 외부에서 전달된 값으로 초기화 한다면 생성자에서 해야합니다. final 필드를 그대로 남겨두면 컴파일 에러가 발생합니다.

 

 

상수 선언

우리 주변에는 불변의 값이 있습니다. 불변의 값은 수학에서 사용되는 원주율 파이나 지구의 무게 및 둘레 등이 해당됩니다. 이러 불변의 값을 저장하는 필드를 자바에서는 '상수'라고 부릅니다.

상수는 객체마다 저장할 필요가 없고(static) 여러 개의 값을 가져도 안됩니다.(final) 

초기값은 선언 시에 주는 것이 일반적이지만, 복잡한 초기화가 필요한 경우에는 정적 블록에서 초기화 할 수도 있습니다.

상수 이름은 모두 대문자로 작성하는 것이 관례 입니다. 만약 서로 다른 단어가 혼합된 이름이라면 언더바(_)로 단어들을 연결합니다.

// 상수 선언 및 초기화
static final double EARTH_RADIUS = 6400;

// 상수 선언
static final double EARTH_SURFACE_AREA;

// 정적 블록에서 상수 초기화
static {
    EARTH_SURFACE_AREA = 4 * Math.PI * EARTH_RADIUS * EARTH_RADIUS;
}