Java에서 비공개 가시성의 의미가 객체 수준이 아닌 클래스 수준 인 이유에 대한 질문에 대해 2 센트 만하겠습니다.
여기서는 편리함 이 핵심 이라고 생각 합니다 . 사실, 객체 수준의 비공개 가시성은 OP에 의해 설명 된 시나리오에서 다른 클래스 (예 : 동일한 패키지)에 메소드를 노출해야했습니다.
사실 저는 클래스-개인 수준의 가시성 (예 : Java에서 제공)이 객체-개인 수준의 가시성과 비교할 때 문제를 생성한다는 것을 보여주는 예를 만들거나 찾을 수 없었습니다.
즉,보다 세분화 된 가시성 정책 시스템을 사용하는 프로그래밍 언어는 객체 수준과 클래스 수준에서 객체 가시성을 모두 제공 할 수 있습니다.
예를 들어 Eiffel 은 선택적 내보내기를 제공합니다. {NONE} (객체-비공개)에서 {ANY} (공용과 동일하며 기본값)에서 {PERSON}까지 모든 클래스 기능을 원하는 모든 클래스로 내보낼 수 있습니다. (class-private, OP의 예 참조), 특정 클래스 그룹 {PERSON, BANK}.
Eiffel에서 속성을 비공개로 만들고 다른 클래스가 그것에 할당되는 것을 막기 위해 getter를 작성할 필요가 없다는 점에 주목하는 것도 흥미 롭습니다. Eiffel의 공용 속성은 기본적으로 읽기 전용 모드에서 액세스 할 수 있으므로 값을 반환하기 위해 getter가 필요하지 않습니다.
물론 속성을 설정하려면 setter가 필요하지만 해당 속성에 대한 "할당 자"로 정의하여 숨길 수 있습니다. 이를 통해 원하는 경우 setter 호출 대신 더 편리한 할당 연산자를 사용할 수 있습니다.