Clean Code that Works.

없애려고 해도 없어지지 않아

문맥 : 복수의 쓰레드가 인스턴스를 공유하고 있지만 인스턴스의 상태가 변화하는 것은 아닙니다.

문제 : Single Threaded Execution 패턴을 사용하면 스루풋이 떨어져버립니다.

해결법
  인스턴스가 만들어진 후 상태가 변화하는 것이 아니라면 Single Threaded Execution 패턴을 사용하는 것은 그만둡시다. 실수로 상태가 변화하는 코드를 쓰지 않도록 하기 위해 쓰레드가 필드를 변경하지 못하도록 합니다. 또 인스턴스의 상태를 변경하는 메소드(setter)가 있으면 소거합니다. 인스턴스의 상태를 알아보는 메소드(getter)는 있어도 상관없습니다.
  이것이 Immutable 패턴입니다. Immutable 패턴을 사용하면 스루풋은 향상됩니다. 그러나 불변성(immutability)을 계속 보유하는 것은 곤란합니다. 문서에 그 클래스가 immutable인 것을 확실히 알아둡시다.

구현
  자바에서는 필드를 은폐하기 위해 private를 사용합니다. 또한 변경할 수 없도록 하기 위해 final을 사용합니다.

관련
  복수의 쓰레드를 배타 제어할 때에는 Single Threaded Execution 패턴을 사용합니다.
  변경하는 쓰레드가 참조하는 쓰레드의 수보다 적을 때에는 Read-Write Lock 패턴을 사용 합니다.

- Java언어로 배우는 디자인 패턴 입문 -