내부 배열 참조가 유출되면 private 경계를 우회한다

private 필드라도 같은 변경 가능한 배열 참조를 반환하면 외부 코드가 내부 원소를 직접 바꿀 수 있습니다.

  1. 1

    내부

    MemberRegistry.members

  2. 2

    참조 반환

    members()

  3. 3

    외부 별명

    leaked = 같은 배열

  4. 4

    외부 변경

    leaked[0]=null

  5. 5

    내부 훼손

    members[0]도 null

핵심: 접근 제어와 함께 참조 소유권을 통제하고 복사본·읽기 전용 뷰·의도 있는 메서드를 선택합니다.