[java] JSR 305을 활용한 자바 코드 컨벤션 검사 방법

자바 개발을 진행하다 보면 코드의 일관성과 품질을 유지하기 위해 코드 컨벤션을 준수해야 합니다. 이를 위해 JSR 305라는 자바 스펙을 활용하여 코드의 컨벤션을 검사할 수 있습니다.

JSR 305이란?

JSR 305는 “애너테이션에 대한 메타 데이터”를 다루는 자바 스펙입니다. 이 스펙은 코드 컨벤션 검사와 같은 정적 분석 도구에서 사용할 수 있는 정보를 제공합니다. JSR 305을 활용하면 코드 컨벤션을 강제할 수 있고, 이를 통해 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다.

주요 애너테이션

JSR 305은 다양한 애너테이션을 제공합니다. 그 중에서도 주요한 애너테이션 몇 가지를 살펴보겠습니다.

@Nonnull

@Nonnull 애너테이션은 해당 필드나 메소드의 반환 값이 null이 아니어야 함을 나타냅니다. 이를 사용하여 null 체크를 제대로 하지 않은 경우를 찾을 수 있습니다.

public void printName(@Nonnull String name) {
    System.out.println("Name: "  + name);
}

@Nullable

@Nullable 애너테이션은 해당 필드나 메소드의 반환 값이 null 일 수 있음을 나타냅니다. 이를 사용하여 null 처리를 강제하고, null이 반환될 수 있는 경우를 명시적으로 알릴 수 있습니다.

public @Nullable String getName() {
    return name;
}

@CheckReturnValue

@CheckReturnValue 애너테이션은 해당 메소드의 반환 값이 사용되어야 함을 나타냅니다. 이를 사용하여 반환 값이 무시되는 경우를 찾을 수 있습니다.

@CheckReturnValue
public int calculateSum(int a, int b) {
    return a + b;
}

@VisibleForTesting

@VisibleForTesting 애너테이션은 해당 필드나 메소드가 테스트를 위해 외부에서 접근되어야 함을 나타냅니다. 이를 사용하여 테스트 코드에서만 사용되어야 하는 메소드나 필드를 체크할 수 있습니다.

@VisibleForTesting
public void setCounter(int counter) {
    this.counter = counter;
}

정적 분석 도구와의 연동

JSR 305은 정적 분석 도구와 함께 사용되어야 최대한의 효과를 발휘합니다. 정적 분석 도구인 FindBugs나 IntelliJ의 Inspections와 같은 도구를 활용하여 컨벤션 검사를 수행할 수 있습니다.

FindBugs를 사용하는 경우, findbugs-annotations 라이브러리를 추가하고 아래와 같이 애너테이션을 사용할 수 있습니다.

import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;

public void printName(@NonNull String name) {
    System.out.println("Name: " + name);
}

public @Nullable String getName() {
    return name;
}

IntelliJ의 경우, 프로젝트 설정에서 JSR 305를 활성화하고, 애너테이션 검사 기능을 사용할 수 있습니다.

결론

JSR 305은 코드 컨벤션을 검사하는 데 유용한 자바 스펙입니다. 주요 애너테이션을 적절히 활용하여 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다. 정적 분석 도구와의 연동을 통해 코드 컨벤션을 자동으로 검사하도록 설정하면 더욱 효율적으로 코드를 관리할 수 있습니다.