Java Assertions

이진호·2022년 9월 12일
0

JAVA

목록 보기
10/10
post-thumbnail
assert expression;

assert expression1 : expression2;

Assertions은 JDK 1.4부터 추가된 프로그램에 대한 가정을 테스트하는 기능입니다. 위와 같이 assert 키워드를 통해 사용할 수 있으며. assert 키워드의 문장은 해당 문장이 참임을 단언하는 것으로, 만약 단언이 실패할 경우, JVM에서 AssertionError를 반환합니다. 주로 개발 중 테스트 목적으로 사용됩니다.

// Java program to demonstrate syntax of assertion
import java.util.Scanner;
 
class Test {
    public static void main(String args[])
    {
        int value = 15;
        assert value >= 20 : " Underweight";
        System.out.println("value is " + value);
    }
}

assertions 비활성화시 결과

value is 15

assertions 활성화시 결과

Exception in thread "main" java.lang.AssertionError: Underweight

Assertions 활성화 방법

기본적으로 assertions은 비활성화 되어있습니다. 아래와 같이 Java 실행시 옵션을 줌으로서 assertions를 활성화 시킬 수 있습니다.

java -ea $classfile

java -enableassertions $classfile

반대로 아래와 같이 assertions를 비활성화 시킬수도 있습니다.

java –da $classfile

java –disableassertions $classfile

Assertions와 예외 처리의 차이점

  • Assertions는 주로 논리적으로 불가능한 상황을 확인하는 데 사용됩니다.
  • 또한 일반적인 예외 처리와는 달리 Assertions는 일반적으로 런타임에 비활성화 됩니다.

Assertions 사용이 적절한 경우

  • private 메서드의 사전 조건(pre-conditions) 체크
  • private 메서드의 사후 조건(post-conditions) 체크
  • 클래스 불변성(class invariants) 체크
  • 도달 불가능한 코드 영역(else, switch default case 등) 체크
private void changeCount(int val) {
    // 사전 조건(pre-conditions) 체크
    assert val == 1 || val == -1 
    int preCount = this.count;
    
    if((this.count + val) < 0) {
        this.count = 0;
    } else {
        this.count += val;
    }
    
    // 사후 조건(post-conditions) 체크
    assert (val == 1 && (this.count > preCount)) || (val == -1 && (this.count <= preCount));
    // 클래스 불변성(class invariants) 체크
    assert this.count >= 0 : this.count;
}

Assertions 사용이 적절하지 않은 경우

  • public 메서드의 사전 조건(pre-conditions) 체크, 이 경우 assertions이 아닌 예외 처리를 사용하는것이 적절합니다.
  • command line에서 전달된 매개 변수.

출처

0개의 댓글