AiPE

Java에서 "final" 키워드의 역할 본문

[XiBBaL] Study/Java

Java에서 "final" 키워드의 역할

Oshimaker XiBBaL 2024. 4. 3. 16:44
반응형

Java에서의 final 키워드는 클래스, 메서드, 변수 앞에서 사용될 수 있다.

공통적으로 "~~가 불가하다"는 의미를 나타내지만, 어디 앞에 쓰이느냐에 따라 약간의 의미 차이를 보인다.

 

 

1. 클래스 앞에서 사용되는 경우

해당 클래스가 상속될 수 없다는 것을 의미한다.

 

이는 클래스가 확장될 필요가 없거나, 확장될 경우 원치 않는 동작을 방지하려는 경우에 유용하다.

Ex. 협업을 하거나 대규모 프로젝트를 개발할 때 ..

개발자 A는 임의의 클래스가 다른 클래스에 의해 확장되거나 상속되지 않기를 바랄 수 있다.
클래스 A를 상속하는 클래스가 많아지면 예기치 않은 오작동이 발생할 수도 있기 때문이다.


혹은, 개발자 A 이외의 다른 개발자들이 이 클래스를 상속하는 것을 원치 않을 수 있다.

이러한 경우에도 final 메소드를 사용해 상속을 원초적으로 제한한다.

 

 

final class는 아래와 같은 문법을 통해 정의된다.

final class ImmutableClass {
    // 클래스 내용
}

 

 

 

 

2. 메서드 앞에서 사용되는 경우

해당 메서드가 하위 클래스에서 오버라이딩(overriding, 재정의)될 수 없음을 의미한다.

즉, 한번 정의된 메서드의 경우 나중에 해당 메서드의 동작을 변경할 수 없게 된다.

 

 

오버라이딩이 무엇인지에 대해서는 아래의 포스팅을 참고하자.

https://xibbal-lab.tistory.com/73

 

객체지향에서의 상속(Inheritance)과 오버라이딩(Overriding)

객체지향의 핵심 개념 중의 하나인 상속(Inheritance)에 대해 알아보자. 1. 상속(Inheritance)이란? Java에서는 하나의 클래스가 존재할 때, 이 클래스의 속성(변수와 메서드)를 다른 클래스에서 그대로

xibbal-lab.tistory.com

 


이는 메서드가 부모 클래스에서 이미 원하는 동작을 수행하며, 하위 클래스에서 변경되지 않도록 보장하려는 경우에 유용하다.

 

예를 들어, 보안이 밀접하게 관련되어 있는 메서드에를 보호하는 데에 유용하다. 또한, 메서드의 최초 초기화 단계를 보호하고자 하는 데에도 사용될 수 있다.

final method는 다음과 같은 문법을 통해 정의된다.

class Parent {
    // final 메서드
    final void finalMethod() {
        // 메서드 내용
    }
}

class Child extends Parent {
    // final 메서드를 오버라이드할 수 없음
    // 컴파일 에러 발생
    // void finalMethod() { }
}

 

*위 코드에서 알 수 있듯이, final method를 오버라이딩하려고 하면 컴파일 에러가 발생한다.

 

 

 

 

3. 변수 앞에서 사용되는 경우

해당 변수가 상수임을 의미한다.

 

상수에 대해서는 아래 포스팅을 참고하자.

https://xibbal-lab.tistory.com/68

 

상수(Constant)와 리터럴(Literal)의 정의와 관계 (cf. 프로그래밍에서의 상수와 수학에서의 상수)

다른 포스팅을 보고 상수와 리터럴이 대충 뭔지는 알겠으나, 1. 상수가 메모리의 주소라는게 무슨 말인가? 2. 그래서 프로그래밍에서 "상수"라는 것과 리터럴, 변수는 어떻게 구분하는가? 집합관

xibbal-lab.tistory.com

 

상수는 아래와 같은 문법을 통해 정의된다.

final int Sangsoo = 1;

 

반응형