티스토리 뷰

주의 사항!

  • 이 글은 제가 직접 공부하는 중에 작성되고 있습니다.
  • 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
  • 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.

 

final 필드

final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없습니다. final 필드는 다음과 같이 선언합니다.

final int field;
final int field = 100;

final 필드의 초기값을 줄 수 있는 방법은 딱 두 가지밖에 없습니다. 첫 번째는 필드 선언 시에 주는 방법이고, 두 번째는 생성자에서 주는 방법입니다. 만약 초기화되지 않은 final 필드를 그대로 남겨두면 컴파일 에러가 발생하게 됩니다.

 

다음 예를 보겠습니다. 주민등록번호 필드는 한 번 값이 저장되면 변경할 수 없도록 final 필드로 선언했습니다. 하지만 주민등록번호는 Person 객체가 생성될 때 부여되므로 Person 클래스 설계 시 초기값을 미리 줄 수 없습니다. 그래서 생성자 매개 값으로 주민등록번호를 받아서 초기값으로 지정해 주었습니다. 반면 nation은 항상 고정된 값을 갖기 때문에 필드 선언 시 초기값으로 "Korea"를 주었습니다.

public class Person
{
	final String nation = "Korea";
	final String ssn;
	String name;

	public Person(String ssn, String name)
	{
		this.ssn = ssn;
		this.name = name;
	}
}

 

(그런데 저는 여기서 한 가지 궁금한 것이 생겼습니다. final 필드가 정적 필드에도 사용할 수 있고, final 정적 필드를 초기화하기 위해 정적 블록을 사용할 수 있을까요?)

//Computer.java
package chapter00.exam00;

public class Computer 
{
	final static double pi;
	
	static
	{
		pi = 3.1415926535;
	}
}
//exam00.java
package chapter00.exam00;

public class exam00 
{
	public static void main(String[] args)
	{
		double result = 10 * 10 * Computer.pi;
		System.out.println(result);
	}
}

(final 필드는 정적 필드에도 적용이 가능했고, 이를 정적 블록을 통해 초기화하는 것도 가능했습니다.) 

 

상수

일반적으로 불변의 값을 상수라고 부릅니다. 원주율 파이(pi)나 지구의 무게 및 둘레 등이 이에 해당될 수 있습니다. 이런 불변의 값을 저장하는 필드를 자바에서는 상수라고 합니다.

 

final 필드는 한 번 초기화되면 수정할 수 없는 필드라고 했습니다. 하지만 그렇다고 final 필드를 상수라고 부르지는 않습니다. 왜냐하면 불변의 값은 객체마다 저장할 필요가 없는 공용성을 띄고 있으며, 여러 가지 값으로 초기화될 수 없기 때문입니다. final 필드는 개체마다 저장되고, 생성자의 매개 값을 통해서 여러 가지 값을 가질 수 있기 때문에 상수가 될 수 없습니다. 상수는 static이면서 final이어야 합니다. 

 

(즉, 앞서 final static 필드를 선언할 수 있는지 확인했던 것이 상수였다는 말입니다.)

 

상수 이름은 모두 대문자로 작성하는 것이 관례입니다. (따라서 앞서 final static 필드를 선언했던 예는 다음과 같이 수정되어야 합니다.)

//Computer.java
package chapter00.exam00;

public class Computer 
{
	final static double PI;
	
	static
	{
		PI = 3.1415926535;
	}
}

 

'공부 일지 > JAVA 공부 일지' 카테고리의 다른 글

자바, import문  (0) 2021.04.07
자바, 패키지  (0) 2021.04.07
자바, 싱글톤(Singleton)  (0) 2021.04.07
자바, 정적 멤버와 static  (0) 2021.04.07
자바, 클래스의 구성 멤버(필드, 생성자, 메서드)  (0) 2021.04.06
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함