프로그래밍백엔드 개발자

Java에서 package-private 접근 수준이란 무엇이며, 어떻게 작동하며, 어떤 경우에 사용해야 합니까?

Hintsage AI 어시스턴트로 면접 통과

답변

Java에서 package-private는 "기본" 접근 수준입니다 (공개, 보호, 비공개 수정자를 명시하지 않음). 이 클래스의 구성원(메서드, 필드 또는 클래스 자체)은 동일 패키지의 클래스에서만 액세스할 수 있습니다.

  • 예:
    class MyClass { /* ... */ } void doSomething() { /* ... */ }
  • 패키지 외부에서는 접근할 수 없으며, protected로 상속되지도 않습니다.
  • 패키지의 내부 로직을 위해 사용되며, 외부 접근으로부터 구현을 보호하면서 패키지 내부 코드에는 접근 허용합니다.

예제:

// 파일: com/example/internal/Helper.java class Helper { static void help() { System.out.println("도움이 되었음"); } }

항상 클래스나 메서드가 구현의 내부 세부 사항일 경우 package-private를 사용하세요.

함정 질문

질문: package-private 클래스가 다른 패키지에서 상속 또는 import를 통해 보일 수 있습니까?

답변: 아니요, package-private 구성원은 다른 패키지에서 상속 또는 import를 통해 접근할 수 없습니다 — 그들은 자신의 패키지 내부에서만 접근 가능합니다.

주제의 미세한 차이를 알지 못해 발생한 실제 오류 사례


이야기

큰 프로젝트에서 다양한 팀이 유틸리티 논리를 위해 package-private 클래스를 사용하기 시작했습니다. 다른 패키지에서 코드를 재사용하려 할 때, 접근할 수 없어 문제가 발생했습니다. 결과적으로 클래스의 접근 수준을 public으로 변경해야 했고, 이로 인해 내부 구현이 노출되었습니다.


이야기

다중 모듈 프로젝트에서 package-private 클래스가 단위 테스트 작성 시 문제를 일으켰습니다: 다른 패키지의 테스트는 package-private 메서드를 볼 수 없었고, 테스트를 원래 패키지 안으로 이동시키거나 접근 수준을 약화시켜야 했습니다.


이야기

코드를 새로운 패키지로 마이그레이션하는 동안 예기치 않은 컴파일 시간 오류가 발생했습니다 — 많은 메서드와 클래스가 갑자기 "사라졌습니다", 왜냐하면 그들은 package-private였고 패키지 변경 후에는 접근할 수 없게 되었기 때문입니다.