본문 바로가기

자바

[JAVA] 불변 객체 & 불변 클래스

728x90

  • 커스텀 불변 클래스를 어떻게 만드나요? 자바에서 불변 클래스의 예는 무엇인가요?

/* 불변 객체란? */

불변 객체란 객체 생성 이후 내부의 상태가 변하지 않는 객체이다. Java의 대표적인 불변 객체로는 String이 있다.

String a = "aa" 에서 a  = "bb" 로 한다면, 여기서는 a의 String 객체 자체는 불변이지만 참조하는 객체의 변수를 변경할 수는 있다.

변수에 'final'을 적용하면 그 변수는 한 번 초기화되면 그 값을 변경할 수 없다. 따라서 객체가 생성되고 초기화되면 그 객체는 불변 객체가 된다. 그 외 불변객체로는 LocalDateTime, Integer, Long 드잉 있다.

/* 불변 객체 및 final */

1. 멀티 쓰레드 환경에서는 동기화를 고려하지 않아도 된다. (항상 동일 값 반환)

2. 변경 가능성이 적기 때문에 오염이 되지 않는다.

3. 가비지 컬렉션의 성능을 높인다. (캐싱에 이상적 - 동일한 값을 가진 객체가 필요할 때마다 새로 생성하는 대신 객체를 재사용, 상태를 변경하기 위한 추가 메모리 공간이 필요 없기 때문에 메모리 사용량이 감소)

/* 커스텀 불변 클래스 만들기*/

  • 클래스를 final로 선언 (클래스 상속을 제한해 값이 바뀌지 않도록 함)
  • 클래스 필드를 private과 final로 선언
  • 방어적 복사를 사용하라 (생성자, getter 이용)

/* 예시 */

public class ImmutablePerson {
    private final String name;
    private final int age;

    public ImmutablePerson(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

 

 

 

728x90