728x90
값 변경을 금지하고 읽기만 허용할 때 주로 final 필드와 상수를 선언하여 사용한다.
1. final 필드 선언
final 필드는 초기값이 저장되면 최종적인 값이 되어 프로그램 실행 중에 수정할 수 없다.
final 타입 필드 [=초기값];
초기값은 필드 선언 시와 생성자에서 대입할 수 있다. 고정된 값이라면 필드 선언 시에 주고 복잡한 초기화 코드가 필요하거나 객체 생성 시 외부에서 전달된 값으로 초기화하면 생성자에서 준다. 두 방법을 사용하지 않으면 컴파일 에러가 발생한다.
예제 코드
더보기
public class Korean {
// 인스턴스 final 필드 선언
final String nation = "korea"; // 고정값으로 초기 대입
final String ssn; // korean 생성시 부여됨
// 인스턴스 필드 선언
String name;
// 생성자 선언
public Korean(String ssn, String name) {
this.ssn = ssn;
this.name = name;
}
}
public class KoreanExample {
public static void main(String[] args) {
// 객체 생성 시 주민등록번호와 이름 전달
Korean ko = new Korean("123456-1234123", "이름");
System.out.println(ko.nation);
System.out.println(ko.name);
System.out.println(ko.ssn);
ko.name = "이름2"; // final 아니라 값 변경 가능
}
}
2. 상수(constant) 선언
불변의 값을 저장하는 필드를 상수라고 부른다. 객체마다 저장할 필요가 없으며, 여러 개의 값을 가지면 안되기 때문에 static인데 final 특성을 가진다.
// 선언 시
static final 타입 상수 [=초기값];
// 정적블록
static final 타입 상수;
static {
상수 = 초기값;
}
복잡한 초기화가 필요할 경우 정적 블록에서 초기화 가능하다.
상수명은 대문자로 작성하며, 서로 다른 단어가 혼합되었다면 언더바(_)로 단어를 연결한다.
정적 필드라 클래스로 접근해 읽을 수 있다.
예제 코드
더보기
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 EarthExample {
public static void main(String[] args) {
// 상수 읽기
System.out.println("지구의 반지름 : " + Earth.EARTH_RADIUS);
System.out.println("지구의 표면적 : " + Earth.EARTH_SURFACE_AREA);
}
}
728x90
'IT > Java' 카테고리의 다른 글
[Java] 상속(Inheritance) (1) | 2024.03.07 |
---|---|
[Java] 접근 제한자 (0) | 2024.03.05 |
[Java] 인스턴스 멤버와 정적 멤버 (0) | 2024.03.05 |
[Java] 메소드 선언과 호출 (0) | 2024.03.04 |
[Java] 생성자 선언과 호출 (0) | 2024.02.29 |