java

final 키워드(변수, 상수)

주다애 2023. 12. 14. 23:21

⛏ final

final 키워드는 특정 변수 및 클래스, 메소드 등에 값을 최초 할당 후 변경되지 않게 하는 제약이다.

기본형 변수, 참조형 변수에 모두 사용할 수 있다.

 

특징

 

1. final이 붙은 변수는 값 변경이 불가하다.

지역 변수, 매개 변수

public class FinalBasic {
    public static void main(String[] args) {
        final int data = 10;
//         값 할당 후 변경 불가
//        data = 20;

        changeFinal(10);
        System.out.println("data : " + data);
    }
    static public void changeFinal(final int data) {
//         final 이 붙은 매개변수도 변경 불가능
//        data = 20;
    }
}

 

맴버 변수

public class FinalClass {
    final int value;

    // 생성자를 통한 초기화
    public FinalClass(int value) {
        this.value = value;
    }
}

public class FinalClassMain {
    public static void main(String[] args) {
        FinalClass finalClass = new FinalClass(10);
        System.out.println(finalClass);
//         값 변경 불가
//        finalClass.value = 20;
    }
}

 

2. final이 붙은 참조는 값 변경이 불가하다. 하지만 참조 대상의 객체 값 변경은 가능하다.

public class FinalRef {
    int value;

    public static void main(String[] args) {
        final FinalRef finalRef = new FinalRef();
        finalRef.value = 10;
        // 참조 값 변경 불가
        // finalRef = new FinalRef();

        // 참조된 객체의 멤버 변수 값 변경은 가능하다.
        finalRef.value = 20;
        System.out.println(finalRef.value);
    }
}

 

⛏ static final와 상수

 

상수는 변하지 않고 + 항상 일정한 값을 가지는 수이다. 즉, 고정된 값이다.

자바에서는 static final 키워드를 통해 상수를 만든다.

만들어진 상수는 필드로 바로 접근이 가능하며 여러 곳에서 공유하며 사용하게 된다.(그래서 주로 public 접근 제어자를 사용)

🔔 상수는 static 영역에서 관리된다.

public class StaticFinalBasic {
    public static final double PI = 3.14;
    public static final String NAME_INFO = "이름 관련 정보입니다.";

    public static void main(String[] args) {
        System.out.println("pi의 값 : " + StaticFinalBasic.PI);
    }
}

 

상수는 매직 넘버를 없애서 클린 코드에 가깝게 도와준다.

 

 

본 게시물은 인프런 김영한님의 김영한의 실전 자바 - 기본편을 듣고 작성된 게시물입니다.

'java' 카테고리의 다른 글

자바 main 메소드는 왜 static일까?  (0) 2023.12.19
자바 메모리 구조  (0) 2023.12.16
생성자  (0) 2023.12.12
error-Your build is currently configured to use Java 17.0.7 and Gradle 6.8.  (1) 2023.12.05
해시(Hash)  (0) 2023.11.26