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를 사용하지 마세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.