본문 바로가기

Java/문법 및 이해

[JAVA] final 키워드가 대체 무엇일까?

문법 공부를 하다보면 final이라는 키워드가 가끔 보인다. 

 

그럼 final이라는건 대체 뭘까?

 

1. Final

자바 언어에서 오직 한 번만 할당할 수 있는 키워드가 있다. 그것이 바로 final이다. 

final로 선언된 변수가 할당되면 항상 같은 값을 가진다. 즉, 한번 할당되면 객체의 상태가 바뀌어도 final 변수는 매번 동일한 내용을 참조한다.

 

그러면 final 키워드는 어디에서 사용할까?

 

final은 클래스, 메서드, 변수 각각에 다 붙을 수 있다.

 

 

2. final 클래스

public final class MyFinalClass{}	// final 클래스 선언
public class ThisIsWrong extends MyFinalClass{}	// 상속 불가 !

final이 붙어있는 클래스는 상속할 수가 없다. 

이렇듯 보안이나 효율성 측면에서 장점이 생긴다. 

 

java.lang.System이나 java.lang.String처럼 자바에서 기본적으로 제공하는 라이브러리 클래스는 final을 사용해서 상속이 불가능하게 만든다고 한다.

 

 

3. final 변수

public static final double PI = 3.14;
public static void main(String[] args) {
    PI = 3.15;
    System.out.println(PI);
}

final로 선언된 변수는 재정의할 수 없다. 즉, 초기화는 한 번만 가능하다.

 

 

4. final과 static

final은 수정할 수 없는 값이라는 것은 알겠는데, 왜 static이라는 키워드랑 같이 사용할까?

 

static은 변수나 함수에 붙는 키워드인데, 메모리에 딱 한 번만 할당되어 메모리를 효율적으로 사용할 수 있는 장점이 있다.

 

메모리에 딱 한 번만 할당한다는 것은, 곧 같은 주소값을 공유한다는 의미이다. 그렇기에 static이 선언된 변수 하나로 여기저기에서 변수를 공유하고 사용할 수 있다.

왜? 같은 주소값을 가지니까 한 번만 선언되도 다 같은 값을 가리키게 되는 것이다.

 

그렇다면 final과 static은 대체 무슨 관계일까?

 

final이 선언된 변수는 그 값을 수정없이 계속 사용하겠다는 의미이다. 그렇다면 static을 선언해서 메모리 낭비 없이 고정된 값을 사용하면 좋지 않을까?

 

그렇게 해서 final과 static을 같이 사용하는 것이다.

 

 

 

 

 

 

[참고]

https://makemethink.tistory.com/184