파일/폴더 규칙 :
- 소스 파일의 package 선언은 폴더 경로와 정확히 일치해야 한다
// src/main/java/com/example/repository/UserRepository.java
package com.example.repository;
- 기본 패키지는 package 선언을 생략해도 되지만 지양한다 → 테스트/빌드 도구가 싫어함
1. 네임스페이스 관리
// 다른 패키지의 같은 이름 클래스 구분
com.company.User
com.client.User
같은 이름의 클래스가 있어도 패키지가 다르면 충돌하지 않음
2. 접근 제어
public class MyClass {
private String secret; // 같은 클래스만
String defaultField; // 같은 패키지만
protected String inherited; // 같은 패키지 + 다른 패키지의 하위 클래스(단, 상속을 통해 접근해야 함)
public String everyone; // 모든 곳에서 접근 가능
}
- private(기본) : 패키지 내부에서만 쓰는 헬퍼, 유틸, 내부 API에 주로 사용
- protected : “상속을 허용하고 커스터마이즈 지점을 열어줄 때”만 신중히 사용. 과용하면 결합도↑
- public : 외부에 공개할 최소한의 API만.
3. 코드 조직화/모듈화
관련 있는 클래스들을 기능/도메인 단위로 묶어 유지보수성을 높임.
예) post.controller, post.service, post.repository처럼 레이어별 묶음 또는 billing.invoice, billing.payment처럼 도메인 기준
4. 빌드/배포 아티팩트의 경로
JAR 안에서도 패키지 경로가 그대로 디렉터리로 들어가고, 클래스 로더가 이 경로를 기준으로 클래스를 찾음
5. 문서/메타데이터 부착
package-info.java에 패키지 설명 Javadoc이나 패키지 레벨 애너테이션을 달 수 있음
💁🏻♂️ package-info.java 란?
패키지에 주석, 설명, 메타데이터(어노테이션)를 붙이고 싶을 때 쓰는 특수한 파일 (= 패키지 레벨의 특수 파일, 패키지 당 1개만 생성 가능)
1. 패키지 Javadoc 설명API 문서 생성 시 패키지 전체에 대한 설명을 남길 수 있음
예)/** * 이 패키지는 사용자 인증과 관련된 클래스들을 포함합니다. * * 주요 기능: * - 로그인 처리 * - 비밀번호 암호화 * - 세션 관리 */ package com.example.auth;
2. 패키지 레벨 어노테이션패키지 전체에 적용되는 어노테이션 선언 가능
예)// 해당 패키지의 모든 메서드/변수 기본값을 @Nonnull로 처리하고 싶은 경우 @NonnullByDefault package com.example.repository; import org.eclipse.jdt.annotation.NonnullByDefault;
'백엔드 > JAVA' 카테고리의 다른 글
| [JAVA] 자바 OOP의 특징 3 - 추상화 (추상 클래스와 인터페이스) (2) | 2025.08.13 |
|---|---|
| [JAVA] 자바 OOP의 특징 1, 2 - 상속과 다형성 (+캐스팅, 오버라이딩, final의 개념) (3) | 2025.08.11 |