본문 바로가기
Java

Final 키워드 알아보기

by GGShin 2022. 5. 16.

Static 키워드와 더불이 non-access modifier(비접근제어자) 중의 하나인 final 에 대해서 알아보겠습니다. 

Field, method, class에 사용할 수 있고, 이름처럼 더 이상의 변경이 일어나지 않기 원하는 멤버에 사용하면 되는 키워드 입니다. 

그렇기 때문에 final method는 override가 불가능하고, final class는 extends가 불가능합니다! 

Field의 경우는 해당 field가 static이냐 non-static이냐에 따라 조금 성격이 다릅니다. 

 

먼저 non-static final field의 경우를 살펴보겠습니다.

non-static final인 경우에는 변수 initialize를 선언과 동시에 해도 되고 constructor 안에서 initialize 해도 무방합니다.

 

public class ConstantEx {
    
    //선언과 initialize 동시에
    final int myInt = 10;
    
    //constructor에서 initialization
    final int yourInt;
    public ConstantEx() {
        yourInt = 100;
    }
    
}

 

Constructor 내부에서도 값을 할당할 수 있기 때문에 아래와 같은 방법을 사용할 수도 있습니다.

 

    static int counter = 0;
    final int yourInt;
    
    public ConstantEx() {
        counter ++;
        yourInt = counter;
    }

 

static이 아니기 때문에 class instance 별로 각각 다른 값을 가질 수 있습니다.  

 

 

다음으로 static final field를 살펴보겠습니다.

(모든 final field가 constant는 아니고 static final field를 보통 constant라고 부른다고 합니다.) 

선언과 initialize를 동시에 해주어야 합니다. 그리고 원래 class variable이나 instance variable은 default 값이 존재하는데, static final variable은 default 값이 없어 꼭 initialize 해주어야 합니다.  

 

public class ConstantEx {

    //static final
    static final int myFinalInt = 100;
    
 }

 

Constructor에서는 initailize가 불가능하지만, static 이기 때문에 static block에서는 initialize가 가능합니다. 

 

    //static final
    static final int myFinalInt;
    
    static {
        myFinalInt = 100;
    }

 

static이던 아니던 final field는 한번 값이 할당된 이후에는 변경이 불가하다는 특징이 있습니다. 

생성된 이후 변경이 일어나서는 안되는 경우에 적절하게 사용하면 될 것 같습니다.

감사합니다. ☺️ 

 

*참고자료

https://www.tutorialspoint.com/can-we-initialize-static-variables-in-a-default-constructor-in-java

 

Can we initialize static variables in a default constructor in Java?

Can we initialize static variables in a default constructor in Java? Class/static variables belong to a class, just like instance variables they are declared within a class, outside any method, but, with the static keyword. They are available to access at

www.tutorialspoint.com

 

반응형

'Java' 카테고리의 다른 글

Stream 사용하기(1) - stream 생성  (0) 2022.05.20
Generics(제네릭)의 의미와 사용법  (0) 2022.05.18
Static 키워드 알아보기  (0) 2022.05.12
Inner Class - Anonymous class(익명 클래스)  (0) 2022.05.10
Inner class - local class  (0) 2022.05.09