티스토리 뷰

이펙티브 자바 Effective Java 2/E
국내도서
저자 : 조슈아 블로크(Joshua Bloch) / 이병준역
출판 : 인사이트 2014.09.01
상세보기

변경 불가능(immutable) 클래스는 그 객체를 수정할 수 없는 클래스다.
immutable class example = String, 기본자료형 클래스, BigInteger, BigDecimal

//모든 필드는 private, final 로 선언되어 있다. public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0 /** use serialVersionUID from JDK 1.0.2 for interoperability */ private static final long serialVersionUID = -6849794470754667710L; /** * Class String is special cased within the Serialization Stream Protocol. * * A String instance is written into an ObjectOutputStream according to * <a href="{@docRoot}/../platform/serialization/spec/output.html"> * Object Serialization Specification, Section 6.2, "Stream Elements"</a> */ private static final ObjectStreamField[] serialPersistentFields = new ObjectStreamField[0]; ...


변경 불가능 클래스의 장점
1. 설계하기 쉽다
2. 구현하기 쉽다.
3. 사용하기 쉽다.
4. 오류 가능성이 적다.
5. 안전하다.

변경 불가능 클래스는 아래 다섯규칙을 따르면 된다.
1. 객체 상태를 변경하는 케서드를 제공하지 않는다.
2. 상속할 수 없도록 한다.
 => 상속을 허용하 경우 악의적인 하위 클래스나 잘못 작성된 하위 클래스가 상태가 변경된 것 처럼 동작해서 변경 불가능성을 깨뜨릴 수 있다.
3. 모든 필드를 final로 선언한다.
4. 모든 필드를 private로 선언한다.
5. 변경 가능 컴포넌트에 대한 독점적 접근권을 보장한다.

변경 불가능 객체의 장점
1. 변경 불가능 객체는 스레드에 안전할 수 밖에 없다. 어떤 동기화도 필요 없으며 여러 스레드가 사용해도 상태가 훼손될 일이 없다.
2. 변경 불가능 객체는 그 내부도 공유할 수 있다.
3. 변경 불가능 객체는 다른 객체의 구성요소로도 훌륭하다.

변경 불가능 객체의 단점
1. 값마다 새로운 객체를 생성해야 한다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함