스레드 안전성을 확보한 개별 컴포넌트를 가져다가 안전한 방법을 동원해 서로 연결해 사용한다면 규모 있는 컴포넌트가 프로그램을 더 쉽게 작성할 수 있다.
캡슐화 없이 만들어 낸 결과물을 여러 스레드에서 사용해도 안전한지 확인하기 어렵고, 변경해야할 필요가 있을 때에도 스레드 동기화 문제 없이 변경하기는 더 어렵다.
→ 객체가 갖고 있는 정보를 객체 내부에 숨겨두면 객체 단위로 스레드 안전성이 확보되었는지 확인할 수 있다.
클래스가 스레드 안정성을 확보하도록 설계하고자 할 때에는 다음 3가지를 고려해야 한다.
- 객체의 상태를 보관하는 변수가 어떤 것인가?
객체의 상태는 항상 객체 내부의 변수를 기반으로 한다.
n
개의 기본형 변수를 갖는 객체의 상태는 n
개 변수가 가질 수 있는 값의 전체 조합이다.
여러 스레드가 동시에 클래스를 사용하려는 상황에서 클래스 내부의 값을 안정적인 상태로 유지할 수 있다면 스레드 안정성을 확보했다고 할 수 있다.
final
로 선언하면 상태 범위를 줄여 논리적인 상태를 파악하기 쉽다.