JAVA 강의(인프런)

Final을 Static과 같이 사용해야 하는 이유

indeep 2023. 12. 3. 20:56

Final을 변수 앞에 붙이면 단 한 번만 값 할당이 가능하고 이후부터는 수정이 불가능해진다.

그런데 만약에 초기화를 진행할 때 Final로 계속 생성한다면?

public class Car {
    private final int pk = 0;
    private String name;

    public Car(String name) {
        this.name = name;
    }

    public int getPk() {
        return pk;
    }

    public String getName() {
        return name;
    }
}

Car 클래스를 만들고 final pk를 가지는 인스턴스를 3개 만들어보고 출력해보자.

public class Main {
    public static void main(String[] args) {
        Car k3 = new Car("K3");
        System.out.println(k3.getPk());
        Car g80 = new Car("G80");
        System.out.println(g80.getPk());
        Car modelY = new Car("Model Y");
        System.out.println(modelY.getPk());
    }
}

 

 

pk는 final이라 0으로 전부 초기화돼서 생성된 걸 볼 수 있다.

즉 pk가 0이라는 동일한 값을 가진 상태로 인스턴스가 여러 개 생성되는 건데, 이거는 메모리 측면에서 굉장히 안 좋은 방법이다. final이라 값을 변경하지 못하는 상태인데 굳이 동일한 값을 인스턴스마다 계속 생성을 해야 하는가?

우리는 낭비를 해결하기 위한 방법으로 static을 사용할 수 있다.

즉 final + static을 사용해서 변하지 않는 변수를 하나만 생성해서 관리하는 것이다.

 

그래서 final과 static을 같이 써서 메모리 효율을 향상시키는 것이 사용 이유다.

반응형