본문 바로가기
Java관련/Java

Java static, static final, final 차이

by devstep 2022. 9. 15.

Java static, static final, final 차이

자바의 static, static final, final은 종종 헷갈릴 수 있는 제어자로 코드를 통해 어떻게 다른지 확인해보겠습니다.

예시 코드

public class Account {

    static double rate = 1.5;
    static final int odLimit = 1000;

    final int accountId;

    public Account(int id) {
        accountId = id;
    }

    public static void main(String[] args) {
        Account first = new Account(123);
        Account second = new Account(456);

        // The following prints 123
        System.out.println(first.accountId);
        // The following prints 456
        System.out.println(second.accountId);

        // Next line triggers a compile error
        // first.accountId = 789;

        //static 변수 변경. Account.rate 1.5 -> 3.5로 변경
        Account.rate = 3.5;
        System.out.println("Account.rate:" + Account.rate);

        //Next line triggers a compile error
        //Account.odLimit = 2000;
    }
}

static

static 키워드를 가진 멤버는 값이 클래스의 모든 인스턴스에 대해 동일합니다.
클래스의 모든 인스턴스가 액세스할 수 있는 전역 변수라고 볼 수 있습니다. 그러나 static 변수는 상수가 아니므로 언제나 변경될 수 있습니다.

  • 때때로 static 을 설명할 때 단 한 번 초기화 된다는 문구를 볼 수 있는데요. 해당 부분을 확인해봐야겠습니다.
  • static 변수가 생성되는 메모리 위치와 실행순서 확인하기.
    • 클래스로더에 의해서 initialize 단계에서 생성되는 것으로 알고 있다.

static final

변경할 수 없고 클래스의 모든 인스턴스에 대해 동일한 값을 설정할 때는 static final을 사용해야 합니다.
static 키워드는 값이 클래스의 모든 인스턴스에 대해 동일함을 의미합니다. final 키워드는 변수에 값이 할당되면 절대 변경할 수 없음을 의미합니다. Java에서 static final의 조합은 클래스 변수의 상수 값을 만드는 방법입니다.

final

final이 붙은 변수는 상수이므로 일반적으로 선언과 초기화를 동시에 합니다. 하지만 인스턴스 변수의 경우 생성자에서 초기화할 수 있습니다.

그 이유는 인스턴스가 new 키워드로 힙에 생성될 때 처음엔 변수 타입의 기본값으로 할당된 후 각 인스턴스에서 설정한 값으로 초기화 되기 때문입니다.

그러므로 accountId가 final이더라도 각 개별 Account 인스턴스는 고유한 값을 가질 수 있습니다.

 


 

추가로 자바 메모리 할당 과정JVM에 대해 작성한 글도 확인해보세요.

 

 

자바 상속의 메모리 할당 과정

자바 상속의 메모리 할당 과정 최근 자바의 정석 상속 부분을 다시 읽으며 이해되지 않은 문장들이 있었고 이에 자바 상속의 메모리 할당 과정에 대해 조사하게 되었습니다. 이해한 내용을 바탕

devstep.tistory.com

 

 

 

JVM과 자바 실행 과정 알아보기

자바 소스 파일(.java)을 실행하는 과정을 살펴보면서 JVM의 각 항목에 대해서 알아보았습니다. JVM에 대해 조사할 때 소제목으로 알아보는 것보다는 자바 실행 과정이라는 키워드로 접근하는 것이

devstep.tistory.com

 

 

 


참고자료

'Java관련 > Java' 카테고리의 다른 글

Java 클래스  (0) 2022.09.30
Java 예외 처리  (0) 2022.09.29
자바 상속의 메모리 할당 과정  (0) 2022.09.05
Java 상속, 오버라이딩, 다이나믹 메소드 디스패치  (0) 2022.08.29
JVM과 자바 실행 과정 알아보기  (2) 2022.08.07

댓글