-
Java | FinalJAVA/JAVA 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 예약어에 대해 알아보았습니다.
고정된 값이 필요할 때, 메소드의 내용을 하위 클래스에서 오버라이딩하지 못하게 할 때,
클래스의 상속을 금지할 때 사용하는 것이라고 간단하게 알아두면 되겠습니다.
'JAVA > JAVA' 카테고리의 다른 글
Java | Call by Value & Call by Reference (0) 2020.01.31 Java | Abstract 추상 클래스 & 추상 메소드 (0) 2020.01.31 Java | Integer.to~String() (0) 2020.01.31 Java | Super & 생성자 호출 메커니즘 (0) 2020.01.30 Java | 접근 제어자 with 상속 (0) 2020.01.30