티스토리 뷰
주의 사항!
- 이 글은 제가 직접 공부하는 중에 작성되고 있습니다.
- 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
- 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.
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 |