본문 바로가기

Java

[Java] final 필드, 메소드, 클래스

final 키워드

final은 최종적, 마지막이라는 뜻을 갖고 있다. 이 final 키워드는 자바에서 변수, 메소드, 클래스에 선언되어 특별한 의미를 부여해준다.

final 변수

변수에 final 키워드가 선언되면 해당 변수가 생성될때 초기값이 정해지고 다시는 수정될 수 없음을 의미한다. final 변수는 다음과 같이 선언된다.

final 타입 필드 [= 초기값];

초기값은 변수 선언 시에 주는 방법과 생성자에서 주는 방법이 있다. 단순한 값이라면 변수 선언 시에 주면 되지만 복잡한 초기화 코드가 필요하거나 객체 생성 시 외부 데이터, 즉 파라미터에 의해 정해지는 경우에는 생성자에서 초기값을 지정해주어야 한다. 만약 final 변수를 선언만하고 생성자에서 값을 초기화 해주지 않는다면 컴파일 에러가 발생한다.

final 변수 선언과 초기화

public class Person {
    public final String nation = "KOREA";
    public final String rrn;
    public String name;
    
    public Person(String rrn, String name) {
    	this.rrn = rrn;
        this.name = name;
    }
}

final 메소드

메소드에 final 키워드가 선언되면 선언된 메소드는 더 이상 오버라이딩을 할 수 없다. 즉 부모 클래스에 final 메소드가 선언되어 있다면 자식클래스가 해당 부모 클래스를 상속했더라도 final 메소드를 재정의 할 수 없다는 의미이다. final 메소드는 다음과 같이 선언된다.

public final 리턴타입 메소드명( [매개변수, ...] ) { ... }

자식 클래스에서 final 메소드를 오버라이딩 해도 컴파일 에러가 발생한다.

final 클래스

클래스에 final 키워드가 선언되면 최종적인 클래스이으로 더 이상 상속할 수 없는 클래스가 된다. 즉 final 클래스는 부모 클래스가 될 수 없기 때문에 자식 클래스를 만들 수 없다. final 클래스는 다음과 같이 선언된다.

public final class 클래스명 { ... }

자바에서 final 클래스의 대표적인 예는 자바 표준 API에서 제공하는 String 클래스로 String 클래스를 들어가서 확인해 보면 아래와 같이 final 키워드가 선언되어 있는 것을 확인할 수 있다.