final이란
final은 Java에 불변성을 확보하기 위해서 사용한다.
클래스나 변수에 사용하면 처음 정의된 상태 변하지 않게 보장된다.
final은 변수, 메소드, 클래스에 부여할 수 있는데, 어느 위치에 선언되는지에 따라 기능이 달라진다.
final이 사용되는 3가지 경우
변수
final 변수는 한번 값을 할당하면 수정할 수 없다. 즉, 첫 초기화 이후, 재할당이 불가능해진다.
final String name = "개발견";
// 컴파일 에러
name = "견발자";
사용 이유
값을 수정할 필요가 없는 동일한 데이터를 가져야 하는 경우 사용되며, static과 함께 써서 상수를 선언하기 위해서도
사용된다.
메소드
자식 클래스에서 final 키워드가 사용된 부모의 메소드는 오버라이딩이 불가능하다.
// 부모 클래스
public class Person {
// 메소드
final void hello(){
System.out.println("안녕하세요");
}
}
// 자식 클래스
class Kim extends Person {
// 오버라이딩
// 컴파일 에러
@Override
void hello(){
System.out.println("안녕하세요 김철수입니다:)");
}
}
사용 이유
부모 클래스에서 정의한 메소드 기능을 자식 클래스가 그대로 쓰도록 하기 위해서 사용된다.
클래스
클래스에 final 키워드를 사용하면, 상속할 수 없는 클래스가 된다. 즉, 부모 클래스가 될 수 없다.
// 부모 클래스
final class Person {
}
// 컴파일 에러
// 자식 클래스
class Kim extends Person {
}
사용 이유
주로 보안상의 이유로 사용되는데 중요한 클래스의 자식 클래스를 생성해서 해당 클래스를 통해 시스템을
파괴할 수 있기 때문에 방지하고자 사용된다.
'개발 지식 > Java' 카테고리의 다른 글
[자바/JAVA] 정적 바인딩 VS 동적 바인딩 (의의, 장/단점) (0) | 2023.09.05 |
---|---|
[자바/JAVA] 추상 클래스 VS 인터페이스 (특징, 사용하는 이유, 차이점) (0) | 2023.09.01 |
[자바/JAVA] 변수의 선언 위치 (클래스 변수, 인스턴스 변수, 지역 변수) (0) | 2023.08.30 |
[자바/JAVA] 오버로딩(Overloading) VS 오버라이딩(Overriding) (0) | 2023.08.29 |
[자바/JAVA] 클래스 VS 객체 VS 인스턴스 (0) | 2023.08.28 |