[java] JSR 305을 이용한 널 체크 기능 개선 방법

널 포인터 예외는 자바 프로그램 작성 시 가장 흔히 발생하는 문제 중 하나입니다. 널 포인터 예외를 방지하기 위해 사용할 수 있는 여러 가지 방법이 있지만, 그 중에서도 JSR 305을 이용한 널 체크 기능은 특히 유용합니다.

JSR 305은 널 체크를 위한 어노테이션을 제공합니다. 이 어노테이션을 사용하면 메소드나 변수의 인자가 널(null)일 경우 컴파일러가 경고를 표시해줍니다. 이를 통해 프로그래머는 널 포인터 예외를 방지할 수 있고, 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.

1. JSR 305 라이브러리 추가하기

널 체크 기능을 사용하기 위해 먼저 JSR 305 라이브러리를 프로젝트에 추가해야 합니다. 다음과 같이 Maven을 사용한다면 pom.xml 파일에 의존성을 추가해주세요.

<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>jsr305</artifactId>
    <version>3.0.2</version>
</dependency>

Gradle을 사용한다면 build.gradle 파일에 다음과 같이 의존성을 추가하세요.

implementation 'com.google.code.findbugs:jsr305:3.0.2'

라이브러리를 추가한 후 프로젝트를 다시 빌드해주세요.

2. 널 체크 어노테이션 사용하기

JSR 305에서 제공하는 널 체크 어노테이션은 javax.annotation 패키지에 있습니다. 다음은 주요 어노테이션들입니다.

다음은 예시 코드입니다.

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public class ExampleClass {
    
    public void exampleMethod(@Nullable String nullableArg, @Nonnull String nonNullArg) {
        // nullableArg가 null인 경우 경고가 표시됩니다.
        // nonNullArg가 null인 경우 호환성 검사(Runtime Check)가 수행됩니다.
        // 이를 통해 null 예외 상황을 방지할 수 있습니다.
        System.out.println("nullableArg: " + nullableArg);
        System.out.println("nonNullArg: " + nonNullArg);
    }
}

위의 코드에서 nullableArg는 널일 수 있으므로 @Nullable 어노테이션을, nonNullArg는 널일 수 없으므로 @Nonnull 어노테이션을 사용했습니다.

3. 컴파일러 경고 설정하기

JSR 305을 사용하기 위해선 컴파일러에게 널 체크 경고를 출력하도록 설정해야 합니다. 이를 위해 프로젝트의 컴파일러 옵션을 확인해야 합니다.

IDE에서는 일반적으로 컴파일러 경고 설정이 가능하며, 빌드 도구에 따라 컴파일러 옵션을 설정하는 방법이 다를 수 있습니다.

예를 들어, Maven을 사용하는 경우 pom.xml 파일에 다음과 같이 설정할 수 있습니다.

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
      <compilerArgument>-Xlint:all,-processing,-rawtypes</compilerArgument>
    </configuration>
  </plugin>
</plugins>

Gradle을 사용한다면 build.gradle 파일에 다음과 같이 설정하세요.

tasks.withType(JavaCompile) {
    options.compilerArgs << '-Xlint:all,-processing,-rawtypes'
}

이제 컴파일을 하면 널 체크와 관련된 경고를 확인할 수 있을 것입니다.

결론

JSR 305을 이용한 널 체크 기능은 자바 프로그램에서 발생할 수 있는 널 포인터 예외를 방지하는데 큰 도움을 줍니다. 이를 통해 코드의 가독성과 유지보수성을 향상시킬 수 있으며, 안정적인 프로그램을 작성할 수 있습니다.

JSR 305의 널 체크 어노테이션을 사용하기 위해서는 라이브러리를 추가하고, 어노테이션을 적절히 사용하면 됩니다. 또한 컴파일러에게 널 체크 경고를 출력하도록 설정하여 프로그래밍 단계에서 예외 상황을 사전에 방지할 수 있습니다.

더 자세한 내용은 JSR 305 Documentation을 참고하시기 바랍니다.