final 필드선언
final 타입 필드 [= 초기값];
final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정 할 수 없다.
제어자 | 대상 | 의미 |
final | 클래스 | 변경될 수 없는 클래스,확장될 수 없는 클래스가 된다. 그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 있다. |
메서드 | 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다. | |
멤버변수 | 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다. | |
지역변수 |
▶ 초기값을 줄 수 있는 방법 2가지
- 필드 선언시 주는 방법
- 생성자에게 주는 방법
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필드로 선언했다. 하지만 주민등록번호는 Person 객체가 생성될 때 부여되므로 Person 클래스 설계 시 초기값을 미리 줄 수 없다. 그래서 생성자 매개값으로 주민등록번호를 받아서 초기값으로 지정해주었다. 반면 nation은 항상 고정된 값을 갖기 때문에 필드 선언시 초기값으로 "korea"를 주었다.
public class PersonExample {
public static void main(String[] args) {
Person p1 = new Person("12345-1234567", "철수");
System.out.println(p1.nation);
System.out.println(p1.ssn);
System.out.println(p1.name);
//p1.nation = "usa"; //final 필드는 값 수정 불가
//p1.ssn = "654321-7654321"; //final 필드는 값 수정 불가
p1.name = "을지문덕";
}
}
상수(Static final)
일반적으로 불변의 값을 상수라고 부른다. 이런 불변의 값을 저장하는 필드를 자바에서는 상수(constant)라고 한다.
final 필드는 한번 초기화되면 수정할 수 없는 필드라고 하였다. 그렇지만 final필드를 상수라고 부르진 않는다.
왜냐하면 불변의 값은 객체마다 저장할 필요가 없는 공용성을 띠고 있으며, 여러가지 값으로 초기화될 수 없기 때문이다. final 필드는 객체마다 저장되고, 생성자의 매개값을 통해서 여러가지 값을 가질 수 있기 때문에 상수가 될 수 없다.
상수는 static 이면서 final이어야 한다. static final필드는 객체마다 저장되지 않고, 클래스에만 포함된다. 그리고 한번 초기값이 저장되면 변경할 수 없다.
static final 타입 상수 [=초기값];
static final double PI = 3.14159;
static final double EARTH_SURFACE_AREA;
'java' 카테고리의 다른 글
java_17_스레드(2) (0) | 2021.11.02 |
---|---|
java_6_패키지 (0) | 2021.11.02 |
java_6_정적멤버와 static (0) | 2021.11.01 |
java_17 스레드 (0) | 2021.11.01 |
SOLID 객체지향설계 (0) | 2021.10.31 |