hayu's 개발 일지

[TIL]240706 final 본문

기술/java

[TIL]240706 final

hayu00 2024. 7. 6. 21:01

공부한 내용

final

  • final 키워드는 이름 그대로 끝이라는 뜻이다.
  • 변수에 final 키워드가 붙으면 더는 값을 변경할 수 없다.
  • final 은 class , method 를 포함한 여러 곳에 붙을 수 있다.

final 지역변수

package final1;
public class FinalLocalMain {
    public static void main(String[] args) {
        //final 지역 변수1
        final int data1;
        data1 = 10; //최초 한번만 할당 가능
        //data1 = 20; //컴파일 오류
        //final 지역 변수2
        final int data2 = 10;
        //data2 = 20; //컴파일 오류
        method(10);
    }
    //final 매개변수
    static void method(final int parameter) {
        //parameter = 20; 컴파일 오류
    }
}
  • final을 지역 변수에 설정할 경우 최초 한번만 할당할 수 있다. 이 후에 값을 변경하려면 컴파일 오류가 발생한다.
  • 매개변수에 final이 붙으면 메서드 내부에서 매개변수의 값을 변경할 수 없다. 따라서 메서드 호출 시점에 사용된 값이 끝까지 사용된다.

final 멤버변수

// field 초기화
class Data {
    public final int value1 = 10; 
    private final int value2;

    public Data(final int value2) {
    this.value2 = value2;
    }
} 
// Constructor 를 통한 변수 초기화
class DataMain1 {
    public static void main(String[] args) {
        Data data1 = new Data(2); // initiate된  value2 는 절대 변경될 수 없음
}

멤버변수는 총 2가지 방법으로 초기화 될 수 있다.

  1. Constructor를 통한 변수 초기화
  2. instance 생성 후 field 는 1번만 constructor로 초기화할 수 있다.
  3. field 를 통한 변수 초기화모든 instance 에서 같은 값인 MY_VALUE 가 존재하게 된다. 결국 중복으로 메모리만 차지하게 된다.
  4. field 에서 직접 변수를 초기화할 수도 있는데, 절대 변수가 변경되지 않는다.

static final 과 상수

  • field초기화로 인스턴스마다 변화하지 않고, 모든 인스턴스들이 같은 값을 공유하는 경우static final을 사용하는 것이 유리하다.
  • 상수란 : 변하지 않고 항상 일정한 값을 같는 수로, 존재하지 않는 고정된 값을 말한다.

→ 상수는 static final 키워드를 사용한다.

자바 상수 특징

  • static final 키워드를 사용한다.
  • 일반적인 변수와 상수를 구분하기 위해 이렇게 한다.
  • 필드를 직접 접근해서 사용한다.
  • 상수는 값을 변경할 수 없다. 따라서 필드에 직접 접근해도 데이터가 변하는 문제가 발생하지 않는다.

final 변수와 참조

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

final 참조형 변수

  • 참조값만 변경되지 않는다.
  • instance 의 멤버 변수는 변경이 가능하다.

 

 

회고

- final을 사용하면서 왜 사용하는지, 어떤 곳에 쓸 수 있는지 생각하지 못했던 것 같다. 

- final 공부를 하면서 다시한번 개념을 공부할 수 있는 시간이었다. 

 

 

'기술 > java' 카테고리의 다른 글

[TIL]240711 자바 코드 구조 이해  (0) 2024.07.11
[TIL]240710 상속  (0) 2024.07.10
[TIL]240705 static  (0) 2024.07.05
[TIL]240704 자바 메모리 구조  (0) 2024.07.04
[TIL]240702 접근 제어자(2)  (0) 2024.07.02