프로그래밍 언어/JAVA

Java의 "final" 의 작동 원리

Rateye 2021. 9. 15. 10:43
728x90
반응형
질문 : Java의 "final"키워드는 어떻게 작동합니까? (나는 여전히 개체를 수정할 수 있습니다.)

Java에서는 final 키워드를 사용하여 값이 변경되지 않도록 지정합니다. 하지만 클래스의 생성자 / 메서드에서 값을 변경할 수 있음을 알았습니다. 다시 말하지만 변수가 static 이면 컴파일 오류입니다.

다음은 코드입니다.

import java.util.ArrayList;
import java.util.List;

class Test {
  private final List foo;

  public Test()
  {
      foo = new ArrayList();
      foo.add("foo"); // Modification-1
  }
  public static void main(String[] args) 
  {
      Test t = new Test();
      t.foo.add("bar"); // Modification-2
      System.out.println("print - " + t.foo);
  }
}

위의 코드는 잘 작동하며 오류는 없습니다.

이제 변수를 static 변경하십시오.

private static final List foo;
                                            

이제 컴파일 오류입니다. 이 final 실제로 어떻게 작동합니까?

답변

final 변수 를 초기화 할 수 있습니다. 컴파일러는 한 번만 수행 할 수 있는지 확인합니다.

final 변수에 저장된 객체에 대한 메서드 호출 final 의 의미와 관련이 없습니다. 즉, final 은 참조 된 객체의 내용이 아니라 참조 자체에 관한 것입니다.

Java에는 객체 불변성 개념이 없습니다. 이것은 신중하게 대상을 설계함으로써 달성되며 사소한 노력과는 거리가 멀다.

출처 : https://stackoverflow.com/questions/15655012/how-does-the-final-keyword-in-java-work-i-can-still-modify-an-object
728x90
반응형