English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

불변 객체의 모든 속성은 Java에서 final이어야 하나요?

불변 클래스/값을 변경할 수 없는 클래스/객체. 예를 들어, 문자열은 Java에서 불변입니다. 즉, Java에서 문자열 값을 생성하면 수정할 수 없습니다. 수정을 시도해도 중간 문자열을 생성하고 그 값을 원래 텍스트에 할당합니다.

불변 객체 정의

초기화 후 변경할 수 없는 객체를 생성할 필요가 있을 때마다 불변 객체를 정의할 수 있습니다. 불변 객체를 생성하는 특정 규칙은 없으며, 초기화 후 클래스 필드에 대한 접근을 제한하는 것이 그 생각입니다.

예제

다음 Java 프로그램은 불변 클래스의 생성을 보여줍니다. 여기서는 이름과 나이 두 개의 인스턴스 변수가 있으며, 이들을 값을 할당할 수 없는 생성자가 있습니다.

final public class Student {
   private final String name;
   private final int age;
   public Student(String name, int age){
      this.name = name;
      this.age = age;
   }
   public String getName() {
      return this.name;
   }
   public int getAge() {
      return this.age;
   }
   public static void main(String[] args){
      Student std = new Student("Krishna", 29);
      System.out.println(std.getName());
      System.out.println(std.getAge());
   }
}

출력 결과

Krishna
29

모든 변수를 final로 선언해야 하는가?

아니요, 모든 속성이 final 속성을 가져야 만 불변 객체를 생성할 수는 없습니다. 불변 객체에서는 사용자가 클래스의 변수를 수정할 수 있지 않도록 해야 합니다.

이를 통해 변수를 private로 설정하고 설정 메서드를 제공하지 않으면 이를 수정할 수 있습니다.

예제

public class Sample{
   String name;
   int age;
   public Sample(){
      this.name = name;
      this.age = age;
   }
   public String getName(){
      return this.name;
   }
   public int getAge(){
      return this.age;
   }
}