PHpullh
학습 라이브러리/Java/어설션(assert)과 계약 프로그래밍

JAVA · 예외처리

어설션(assert)과 계약 프로그래밍

assert 키워드와 불변조건 검사로 프로그래밍 오류를 조기에 발견합니다.

예외처리중급assert어설션requireNonNull계약

핵심 설명

assert 키워드와 불변조건 검사로 프로그래밍 오류를 조기에 발견합니다.

Java code

public class AssertionDemo {
    // 사전 조건 (Precondition)
    static double sqrt(double x) {
        assert x >= 0 : "음수의 제곱근: " + x;
        return Math.sqrt(x);
    }

    // 사후 조건 (Postcondition)
    static int[] sort(int[] arr) {
        int[] result = arr.clone();
        java.util.Arrays.sort(result);

        // 정렬 검증
        assert isSorted(result) : "정렬 실패!";
        assert result.length == arr.length : "크기 불일치!";
        return result;
    }

    static boolean isSorted(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] < arr[i - 1]) return false;
        }
        return true;
    }

    // 프로덕션에서는 Objects.requireNonNull 사용
    static void process(String input) {
        java.util.Objects.requireNonNull(input, "input은 null 불가");
        if (input.length() < 3) {
            throw new IllegalArgumentException("최소 3자 이상");
        }
        System.out.println("처리: " + input);
    }

    public static void main(String[] args) {
        // assert는 -ea 옵션으로 활성화
        // java -ea AssertionDemo
        System.out.println(sqrt(16));

        // 프로덕션용 검증
        process("Hello");
        // process(null); // NullPointerException
    }
}

학습 팁

assert는 개발/테스트용입니다. 프로덕션에서는 Objects.requireNonNull()이나 IllegalArgumentException을 사용하세요.

주의할 점

assert는 기본적으로 비활성입니다. -ea 플래그 없이 실행하면 검사가 생략됩니다. 비즈니스 로직에 assert를 사용하지 마세요.

자주 묻는 질문

어설션(assert)과 계약 프로그래밍란 무엇인가요?

assert 키워드와 불변조건 검사로 프로그래밍 오류를 조기에 발견합니다.

어설션(assert)과 계약 프로그래밍 학습 시 주의할 점은 무엇인가요?

assert 는 기본적으로 비활성입니다. -ea 플래그 없이 실행하면 검사가 생략됩니다. 비즈니스 로직에 assert를 사용하지 마세요.