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
'자바' 카테고리의 다른 글
[JAVA] 깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy) (0) | 2024.03.19 |
---|---|
[Java] equals 와 hashCode - 객체 일 경우 (0) | 2024.03.17 |
[JAVA] 컬렉션 - LinkedList (0) | 2024.02.07 |
[JAVA] 벡터 Vector (0) | 2024.02.06 |
[JAVA] 컬렉션 - ArrayList (0) | 2024.02.05 |