[Java] final의 기능

지인·2023년 6월 21일
0

Java

목록 보기
3/7

🐰 final

클래스나 변수에 final을 붙이면 시간이 지나도 처음 정의된 상태가 변하지 않는 것을 보장한다는 의미


final 변수

  • final 키워드가 붙은 변수는 초기화 후 변경할 수 없다.
  • 아래와 같이 변경하려면 컴파일 에러가 발생한다.
final String hello = "Hello world";

hello = "Bye" // compile error

final 인자

  • final로 선언된 인자는 메소드 내에서 변경이 불가능하다.
  • final int로 선언한 number는 읽을 수 있지만 number = 10처럼 값을 변경하려고 하면 컴파일 에러가 발생한다.
public void func(final int number) {
    System.out.println(number);

    // number = 10;  compile error!
}

final 클래스

  • 클래스에 final을 붙이면 다른 클래스가 상속할 수 없는 클래스가 된다.
  • 아래와 같이 상속하려고 하면 컴파일 에러가 발생한다.
final class AAA {
    final String hello;
    AAA() {
        hello = "hello world";
    }
}

class BBB extends AAA() { // compile error!
}

final 메소드

  • final 메소드는 Override가 안되도록 만든다.
  • AAA 클래스를 상속받는 BBB 클래스에서는 getHello()를 재정의할 수 없다.
class AAA {
    final String hello = "hello world";

    final String getHello() {
        return hello;
    }
}
  • 아래와 같이 Override하려고 하면 컴파일 에러가 발생한다.
class BBB extends AAA {

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

정리

  • final variables, arguments : 값이 변경되지 않도록 만든다.
  • final class : 클래스를 상속하지 못하도록 만든다.
  • final method : 메소드가 오버라이드되지 못하도록 만든다.

주의할 점

  • List에 final을 선언하여 list 변수의 변경은 불가능 하지만 list 내부에 있는 변수들은 변경이 가능하여 문자열을 계속 추가할 수 있다.
  • final 변수의 변경을 막아주지만 final 변수 내부에 갖고 있는 변수들은 변경이 가능하다.
final List<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");

참고

profile
열쩡

0개의 댓글