JAVA/JAVA
Java | Final
pathas
2020. 1. 31. 17:11
Final
final은 '마지막'이라는 뜻으로, 마지막으로 정한 것이니 더 이상 수정할 수 없다는 뜻을 가진 예약어
변수, 메소드, 클래스에 사용 가능
final 사용 위치
위치 | 설명 |
---|---|
변수 | 멤버 변수 및 지역 변수에 모두 사용 가능하며, final 변수는 상수를 의미 관례적으로 final 변수의 이름은 모두 대문자로 작성 |
메소드 | final 메소드는 하위 클래스에서 재정의 불가, 읽기 전용 메소드가 됨 메소드의 원래 목적과 상관 없는 기능으로 변경하는 것을 방지하기 위함 정적 메소드에 많이 사용됨 |
클래스 | final 클래스는 상속 불가, 클래스 내부의 어떠한 내용도 수정하지 못하도록 해야 하는 경우에 사용 |
사용례_final 변수
package j200131;
class Parent {
// final + 멤버 변수 or 지역 변수 => 상수화 되어 값이 고정됨
final int COUNT = 1;
public static void main(String[] args) {
// Parent 클래스 객체 생성
Parent p = new Parent();
// 상수 변경 시도 => 에러 발생
// p.COUNT = 5;
// The final field Parent.count cannot be assigned, 상수는 값을 새롭게 받을 수 없음
System.out.println("p.count: " + p.COUNT); // p.COUNT: 1
}
}
사용례_final 메소드
package j200131;
class Parent {
// final + 메소드 => 상속은 허용하지만 메소드 오버라이딩(재정의) 금지
final void sub() {
System.out.println("메소드 재정의 제한");
}
}
public class FinalTest extends Parent {
// final 메소드 오버라이딩 시도 => 에러 발생
/* Cannot override the final method from Parent
void sub() {
System.out.println("final 메소드는 오버라이딩 불가");
}
*/
public static void main(String[] args) {
}
}
사용례_final 클래스
package j200131;
// final + 클래스 => 상속 금지 클래스
final class Parent {
}
// Parent 클래스 상속 시도 => 에러 발생
// The type FinalTest cannot subclass the final class Parent
// public class FinalTest extends Parent {
public static void main(String[] args) {
}
}
클래스, 메소드, 변수 앞에 사용하여 더 이상 수정이나 상속을 하지 못하게 만드는 final 예약어에 대해 알아보았습니다.
고정된 값이 필요할 때, 메소드의 내용을 하위 클래스에서 오버라이딩하지 못하게 할 때,
클래스의 상속을 금지할 때 사용하는 것이라고 간단하게 알아두면 되겠습니다.