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 |