Safe construction techniques
의도치 않은 get 메서드 등으로 의해 private 변수가 공개되는 경우가 있다. 캡슐화가 물거품 되거나 내부 참조가 외부에 공개되어 내부 데이터의 안정성이 깨질 수 있다.
public class UnsafePrivate {
// private final 로 선언되어 있지만
private final String[] internalData = new String[] { "A", "B", "C" };
// 여기서 private 가 공개된다.
public String[] getData() {
return internalData;
}
}
public class UnsafePrivateTest {
public static void main(String[] args) {
UnsafePrivate unsafePrivate = new UnsafePrivate();
// 그리고 여기서 오염이 된다 = 스레드 안정성이 깨질 수 있다
unsafePrivate.getData()[0] = "Z";
System.out.println(unsafePrivate.getData()[0]);
}
}
내부 참조형 자료를 공개해야할 경우에는 내부상태가 공유되지 않도록 유의한다