final 키워드
•
변수(variable), 메서드(method), 또는 클래스(class)에 사용할 수 있다
•
어떤 곳에 사용되냐에 따라 다른 의미를 가진다
1. final 변수
•
final이 붙은 변수는 값을 수정할 수 없다
◦
수정될 수 없기 때문에 초기화 값은 필수적이다
◦
초기화 전에 사용하면 컴파일 에러가 생긴다
final int number = 2;
Java
복사
•
상수라고도 부른다
•
get 만 가능하다
•
객체에 대한 참조인 경우, 최초 참조하는 객체 이외의 다른 객체를 참조할 수 없다
◦
참조된 객체의 메소드를 통해 객체 자체의 값은 바꿀 수 있다
◦
객체의 재할당을 막는다
→ 객체 자체가 불변은 아니다
final Person person = new Person("아무개");
person = new Person("어배추고양이") // Compile Error
person.setName("어배추고양이"); // 객체의 값을 바꿀 수 있다
Java
복사
2. final 클래스
•
final이 붙은 클래스는 상속(Inheritance)이 불가능한 클래스가 된다
◦
다른 클래스에서 상속해 재정의를 할 수 없다
◦
ex. Integer와 같은 Wrapper 클래스
•
subclass를 만들 수 없다
•
라이브러리 형태의 프로젝트를 작성할 때 주로 사용
final class Person {
String name;
}
// 상속 불가능
class Doctor extends Person {
}
Java
복사
3. final 메서드
•
final 이 붙은 메서드는 해당 메서드를 오버라이드하지 못한다
→ 재정의가 불가능하다
•
라이브러리 형태의 프로젝트를 작성할 때 주로 사용
public class Person {
String name = "";
public void setName(String name) {
this.name = name;
}
}
public class Doctor extends Person {
// Compile Error
public void setName(String name) {
this.name = "Doctor " + name;
}
}
Java
복사