[Java] final

이병수·2024년 1월 4일
0

Java

목록 보기
12/27
post-custom-banner

final


final이란 ?

final은 이름 그대로 마지막, 끝 이라는 의미이다.

  • 변수에 final이 붙는다면 더는 값을 변경할 수 없다는 의미이다.

  • final은 class, method를 포함한 여러 곳에 붙을 수 있다.


final int a = 10;

a = 20 // 값 변경 불가

final을 지역 변수에 설정할 경우 최초 한번만 할당이 되고 그 후에 값을 변경하면 오류가 발생한다.


class A {
    final int a;
    
    public A(int a) {
        this.a = a // 딱 한번 초기화
    }
}

final을 필드(멤버 변수)에 사용할 경우 해당 필드는 생성자를 통해서 한번만 초기화 될 수 있다.

static 변수에도 final을 선언할 수 있는데, 이것은 상수이다.

  • 상수는 관례상 대문자로 표기하며, 구분은 _ 로 한다 (변수와 구분하기 위해)

상수

변하지 않고, 항상 일정한 값을 갖는 수

class FixNumber {
    public static final double PI = 3.14;
    public static final int HOUR = 24;
}
  • 자바에서는 보통 단 하나만 존재하는 변하지 않는 고정된 값을 상수라고 한다.

  • 필드는 직접 접근해서 사용한다.

    • 상수는 기능이 아니라 고정된 값 자체를 사용하는 것이 목적이므로

    • 상수는 값을 변경할 수 없기에 필드에 직접 접근해도 데이터가 변하지 않는다.

  • 보통 상수는 애플리케이션 전반에서 사용되기에 public 접근 제어자를 사용한다.

  • 상수는 런타임에 변경할 수 없다.


final 변수와 참조

final은 변수의 값을 변경하지 못하게 한다.

기본형 변수인 경우, 값 자체를 변경하지 못하게 한다.

int a = 10;
a = 20 // 가능

final int b = 20;
b = 30 // 불가능

참조형 변수인 경우, 해당 주소값 자체를 변경하지 못하게 한다.

Data data = new Data(10);
data = new Data(20); // 가능

final Data data = new Data();
data = new Data(10); // 불가능
  • 현재 여기서는 데이터 생성자의 오버로딩이 적용되어 있음

  • 참조형 변수인 경우 한번 객체의 주소값이 선언 시점에 할당되었다면 해당 주소값(참조값)을 변경하지 못한다.

  • 그렇지만 해당 주소값에 접근하여 데이터는 변경이 가능하다.
final Data data = new Data();
data.value = 10;
data.value = 20;

참고

profile
백엔드 개발자가 되고 싶어요
post-custom-banner

0개의 댓글