
package-info.java는 자바에서 패키지 단위의 문서화와 어노테이션을 관리하는 파일이다.
- @NonNullApi, @NonNullFields 같은 어노테이션을 붙여서 패키지 레벨의 null-safe 기본 정책을 정한다.
- 혹은 해당 패키지에 대한 설명을 추가할 수 있다.

1. Javadoc 주석 작성
- 클래스나 메서드에 Javadoc을 달 수 있듯이, 패키지 자체에도 설명을 붙이고 싶을 때, Javadoc 문서화를 위해 사용한다.
- 예를 들어, 패키지에 속한 모든 클래스들의 공통 목적이나 설계 철학, 사용 방법 등을 정리할 수 있다.
/**
* 이 패키지는 사용자 인증과 관련된 기능을 제공합니다.
* - User 객체 관리
* - 로그인/로그아웃 기능
* - 세션 처리
*/
package com.example.auth;
2. 패키지 수준 어노테이션
특정 패키지에 공통적으로 적용할 어노테이션을 선언할 때 쓰인다.
보통 자바에서는 특별히 제한을 두지 않으면 기본은
메서드 파라미터 (입력값)
메서드 반환값 (리턴값)
클래스 필드 (멤버 변수)
이 전부 null이 들어올 수도 있다고 허용한다.
즉, 컴파일러가 막아주지 않기 때문에 개발자가 일일이 체크해야 한다.
이 때 예를 들어 @NonnullByDefault 같은 어노테이션을 패키지 전체에 적용할 수 있다.
@ParametersAreNonnullByDefault
package com.example.service;
import javax.annotation.ParametersAreNonnullByDefault;
이렇게 하면 com.example.service 패키지 안에서는 모든 메서드 파라미터는 기본적으로 null이 될 수 없다고 가정한다.
만약 정말 null을 허용하고 싶으면 그때만 @Nullable을 따로 붙이면 된다. 예전에는 “null일 수도 있다”를 매번 @NonNull로 표시해야 했다면, 이제는 “기본은 null 아님”이라고 선언하고, 정말 null일 수 있는 경우만 따로 표시하는 것이다
스프링에서는 비슷하게 @NonNullApi, @NonNullFields를 제공한다.
@NonNullApi
@NonNullFields
package com.example.javadoc;
import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;
- @NonNullApi: 파라미터랑 반환값은 기본적으로 null 불가
- @NonNullFields: 필드는 기본적으로 null 불가