IT/Programming / / 2023. 4. 27. 09:46

<Effective Java> RULE 15 변경 가능성을 최소화 하라

반응형

 

변경 불가능 클래스는 그 객체를 수정할 수 없는 클래스이다.

객체 내부정보는 객체가 생성될 때 주어진 것이며 객체가 살아있는 동안 그대로 보존된다.

 

 String

 BigInteger

 BigDecimal..

 

변경불가능 클래스를 만들때 5가지 규칙

1. 객체 상태를 변경하는 메서드(수정자 메서드 등)을 제공하지 않는다.

2. 계승할 수 없도록 한다.

3. 모든 필드를 final로 선언한다.

 새로 생성된 객체에 대한 참조가 동기화없이 다른 스레드로 전달되어도 안전하다.

4. 모든 필드를 private로 선언한다.

 클라이언트가 필드가 참조하는 변경 가능 객체를 직접 수정하는일을 막을 수 있다.

5. 변경 가능 컴포넌트에 대한 독점적 접근권을 보장한다.

 클래스에 포함된 변경 가능 객체에 대한 참조를 클라이언트는 획득할 수 없도록 해야 한다.

 

변경 불가능 클래스는 자주 사용되는 객체를 캐시하여 이미있는 객체가 거듭 생성되지 않게 하는 정적 팩토리를 제공할 수 있다.

 

장점

1. 객체 내부도 공유할 수 있다.

 BigInteger클래스는 값의 부호와 크기를 각각 int변수와 int배열로 표현

 negate메서드는 같은 크기의 값을 부호만 바꿔서 새로운 BigInteger객체로 반환

 배열을 복사하지 않는다.

 새로운 BigInteger객체도 원래 객체와 같은 내부 배열을 참조

2. 다른 객체의 구성요소로도 훌륭하다.

 한번 집어넣고 나면 그 값이 변경되어 맵이나 집합의 불변식이 깨질 걱정이 없다.

 

단점

1. 값마다 별도의 객체를 만들어야 한다는 점

 객체 생성비용이 클때 단점 부각

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유