[Java 13] final 필드와 상수

학습목표

  1. final 필드의 선언과 초기화 방법을 안다.
  2. 상수(static final)의 선언과 초기화 방법을 안다.
  3. 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

태그:

카테고리:

업데이트:

댓글남기기