Backend/Java

java final 의미, 사용법

개발하는루루 2022. 12. 27. 23:53

Java에서 final은 "불변성"을 확보하기 위해 존재한다.

즉, 클래스나 변수 앞에 final을 붙이면 처음 정의된 상태가 변하지 않는 것을 보장한다.

 

4가지 경우에 대해 final을 사용할 수 있다.

 

1. final 변수

final String hello = "Hello world";

final 키워드가 붙은 변수는 초기화 후 변경할 수 없다. 다음과 같이 변경하려고 하면 컴파일 에러가 발생한다.

final String hello = "Hello world";

hello = "See you around" // compile error!

2. final arguments (인자) 

final로 선언된 인자는 메소드 내에서 변경이 불가능하다. 따라서 다음과 같이 final int로 선언한 number는 읽을 수 있지만, number = 2처럼 값을 변경하려고 하면 컴파일 에러가 발생한다.

public void func(final int number) {
    System.out.println(number);

    // number = 2;  compile error!
}

3. final 클래스

final class MJ {
    final String hello;
    MJ() {
        hello = "hello world";
    }
}

클래스에 final을 붙이면 다른 클래스가 상속할 수 없는 클래스가 된다. 다음과 같이 final 클래스를 상속하려고 하면 컴파일 에러 발생.

final class MJ {
    final String hello;
    MJ() {
        hello = "hello world";
    }
}

class MMJ extends MJ() { // compile error!
}

 

4. final 메소드

class MJ {
    final String hello = "hello world";

    final String getHello() {
        return hello;
    }
}

final 메소드는 Override가 안되도록 한다. 예를 들어 다음과 같이 MJ 클래스를 상속하는 MMJ 클래스에서는 getHello()를 재정의할 수 없다. Override하려고 하면 컴파일 에러가 발생한다.

class MJ extends MMJ {

    @Override
    String getHello() { // compile error !
        return "See you MJ";
    }
}

 

요약


종류 불변
변수, 인자 값 변경
클래스 클래스 상속 X
메소드 메소드 오버라이드 X

참고 : https://sudo-minz.tistory.com/135