IT/Java

[Java] final 필드와 상수

Huitopia 2024. 3. 5. 09:46
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