⛏ 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 |