Java Assertions 사용

1. 소개

Java assert 키워드를 사용하면 개발자가 프로그램의 특정 가정이나 상태를 빠르게 확인할 수 있습니다.

이 기사에서는 Java assert 키워드 를 사용하는 방법을 살펴 보겠습니다 .

2. Java Assertion의 역사

Java assert 키워드는 Java 1.4에서 도입되었으므로 꽤 오랫동안 사용되어 왔습니다. 그러나 상용구를 대폭 줄이고 코드를 더 읽기 쉽게 만들 수있는 잘 알려지지 않은 키워드로 남아 있습니다.

예를 들어, 종종 코드에서 애플리케이션이 제대로 작동하지 못하게하는 특정 조건을 확인해야합니다. 일반적으로 다음과 같이 작성합니다.

Connection conn = getConnection(); if(conn == null) { throw new RuntimeException("Connection is null"); }

assertion을 사용 하여 단일 assert 문으로 ifthrow 문을 제거 할 수 있습니다 .

3. 자바 어설 션 활성화

Java 어설 션은 assert 키워드를 사용하므로 가져올 라이브러리 나 패키지가 없습니다.

Java 1.4 이전에는 변수, 메소드 등의 이름을 지정하는 데 "assert"라는 단어를 사용하는 것이 완벽하게 합법적이었습니다. 이로 인해 최신 JVM 버전에서 이전 코드를 사용할 때 잠재적으로 이름 충돌이 발생할 수 있습니다.

따라서 이전 버전과의 호환성을 위해 JVM은 기본적으로 어설 션 유효성 검사를 비활성화합니다 . -enableassertions 명령 줄 인수 또는 단축 -ea를 사용하여 명시 적으로 활성화해야합니다 .

java -ea com.baeldung.assertion.Assertion

이 예에서는 모든 클래스에 대해 어설 션을 활성화했습니다.

특정 패키지 및 클래스에 대한 어설 션을 활성화 할 수도 있습니다.

java -ea:com.baeldung.assertion... com.baeldung.assertion.Assertion

여기에서 com.baeldung.assertion 패키지 의 모든 클래스에 대해 어설 션을 활성화했습니다 .

마찬가지로, -disableassertions 명령 줄 인수 또는 단축형 -da를 사용하여 특정 패키지 및 클래스에 대해 비활성화 할 수 있습니다 . 이 네 가지 인수를 모두 함께 사용할 수도 있습니다.

4. 자바 어설 션 사용

어설 션을 추가하려면 assert 키워드 를 사용하고 부울 조건을 지정하면 됩니다 .

public void setup() { Connection conn = getConnection(); assert conn != null; }

Java는 또한 문자열을 사용하는 어설 션에 대한 두 번째 구문을 제공합니다.이 구문은 AssertionError 가 발생하는 경우 생성하는 데 사용됩니다 .

public void setup() { Connection conn = getConnection(); assert conn != null : "Connection is null"; }

두 경우 모두 코드는 외부 리소스에 대한 연결이 null이 아닌 값을 반환하는지 확인합니다. 해당 값이 null이면 JVM이 자동으로 AssertionError를 발생 시킵니다.

두 번째 경우 예외에는 스택 추적에 표시되고 문제 디버깅에 도움이 될 수있는 추가 세부 정보가 포함됩니다.

어설 션이 활성화 된 상태에서 클래스를 실행 한 결과를 살펴 보겠습니다.

Exception in thread "main" java.lang.AssertionError: Connection is null at com.baeldung.assertion.Assertion.setup(Assertion.java:15) at com.baeldung.assertion.Assertion.main(Assertion.java:10)

5. AssertionError 처리

AssertionError 클래스 는 자체적으로 Throwable을 확장하는 Error 를 확장 합니다. 이는 AssertionError 가 확인되지 않은 예외 임을 의미합니다 .

따라서 어설 션을 사용하는 메서드는 선언하는 데 필요하지 않으며 추가 호출 코드는이를 시도하고 잡아서는 안됩니다.

AssertionErrors 응용 프로그램에서 복구 할 수없는 조건을 나타 내기위한 것이므로이를 처리하거나 복구를 시도하지 마십시오.

6. 모범 사례

어설 션에 대해 기억해야 할 가장 중요한 점은 비활성화 할 수 있으므로 실행될 것이라고 가정하지 마십시오 .

따라서 어설 션을 사용할 때 다음 사항을 염두에 두십시오.

  • 적절한 경우 항상 null 값과 빈 옵션을 확인하십시오.
  • 어설 션을 사용하여 공용 메서드에 대한 입력을 확인하지 말고 대신 IllegalArgumentException 또는 NullPointerException 과 같은 확인되지 않은 예외를 사용하십시오.
  • 어설 션 조건에서 메서드를 호출하지 말고 메서드의 결과를 로컬 변수에 할당하고 해당 변수를 assert 와 함께 사용하십시오.
  • 어설 션은 switch 문의 기본 케이스 또는 완료되지 않는 루프 이후 와 같이 실행되지 않을 코드의 위치에 적합합니다.

7. 결론

Java assert 키워드는 수년 동안 사용 가능했지만 아직 잘 알려지지 않은 언어 기능입니다. 많은 상용구 코드를 제거하고 코드를 더 읽기 쉽게 만들고 프로그램 개발 초기에 버그를 식별하는 데 도움이 될 수 있습니다.

단언은 기본적으로 활성화되어 있지 않으므로 코드에서 사용될 때 실행될 것이라고 가정하지 마십시오.

항상 그렇듯이 전체 소스 코드는 GitHub에서 사용할 수 있습니다.