순간을 성실히, 화려함보단 꾸준함을

[번외] final 과 static 키워드 본문

백기선님과 함께 하는 자바 스터디

[번외] final 과 static 키워드

폭발토끼 2021. 8. 1. 11:14

평소 static 키워드와 final 키워드가 너무나도 헷갈려서 이참에 확실히 정리하고자 글을 씀

final 키워드

final 키워드는 단순히 상수화 시키는 키워드가 아니다. 그 이유는 final 키워드는 상수화를 시켜주는 것이 아닌 단 한번만 할당이 가능한 키워드 이기 때문이다.

public class Store {
    final int value;
    public Store(int value){
        this.value=value;
    }
    public int getValue(){
        return this.value;
    }
    public static void main(String[] args) {
        Store store = new Store(3);
        Store store1=new Store(1);

        System.out.println(store.getValue());
        System.out.println(store1.getValue());
    }
}

위의 코드를 보면 final 키워드로 선언한 변수 value는 서로 다른 객체 생성을 통해서 구분되어짐을 알 수 있다. 만약 value가 상수라면 동일한 값을 가져야 하고 상수이니 할당 조차 하지 못하는게 맞을 것이다.

또한, 이미 할당되어 있는 인스턴스에 value 값을 변경하려고하면 컴파일 에러가 발생한다.

public class Store {
    final int value;
    public Store(int value){
        this.value=value;
    }
    public int getValue(){
        return this.value;
    }
    public static void main(String[] args) {
        Store store = new Store(3);

        System.out.println(store.getValue());
        store.value=10;            //Compile Error 발생
    }
}

static 키워드

static 키워드는 전역,정적 이라는 뜻을 가지고 있다.
클래스 변수 라고도 불린다.
static은 해당 데이터의 메모리 할당을 컴파일 시간에 할 것을 의미하는 키워드이다.

중요한 개념은 static 키워드가 붙은 데이터는 프로그램이 실행되면 main 메소드가 실행 되기 전에 코드 메모리 영역에 생성된다.(static 블록 또한 마찬가지이다) 그리고 또한 프로그램 실행 직후부터 끝날 때까지 메모리 수명이 유지가 된다

런타임 중에 필요할때마다 동적으로 할당되는 동적 데이터와는 구분된다.

public class Store {
    static int value;
    static
    {
        value=7;
        System.out.println("static: " + value);
    }
    public int getValue(){
        return this.value;
    }
    public static void main(String[] args) {
        Store store = new Store();
        System.out.println("main : " + store.getValue());
    }
}
//출력
static: 7
main : 7

static final

우린 상수화를 시키고자 할때 static final 으로 선언해서 사용한다. 그럼 왜 static final을 함께 사용해야 하는 것 일까???

위에서 알아보았듯이 final 키워드를 사용하면 단 한번만 할당이 된다. 어떤 데이터를 상수화 시키고 싶다면 그 데이터의 값은 변하지 않아야 한다. 그런의미에서 final을 사용하는 것이다.

또한, 상수화를 시킨다는 건 매번 새롭게 인스턴스를 재할당할 필요성이 없다는 뜻이니 static 키워드를 사용하여 단 한번만 메모리 영역에 할당을 시키고 어디서든 사용할 수 있게끔 해주는 것이다.

따라서 static final 키워드를 사용하여 상수화를 시킨 후 같은 값을 계속 가져다 쓰기만 하면 된다.

'백기선님과 함께 하는 자바 스터디' 카테고리의 다른 글

스터디 후기  (0) 2021.08.08
15주차 과제: 람다식  (0) 2021.08.07
[리뷰] 14주차 : 제네릭  (0) 2021.07.31
14주차 과제: 제네릭  (0) 2021.07.31
[리뷰] 13주차 : I/O  (0) 2021.07.25