산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java Assertion(어설션) 실전 가이드: 버그 조기 발견과 코드 신뢰성 확보

Java 어설션

Java assert 문으로 버그 조기 포착, 가정 검증, 코드 품질 향상 방법 학습.

어설션은 실행 중 항상 참이어야 할 조건 테스트용 경량 개발자 전용 메커니즘. 명시적 활성화 필요, 프로덕션 빌드에서 제외되어 런타임 성능 영향 없음.

문법

assert condition;

여기서 condition은 true 평가 예상 불리언 표현식. 조건 false이고 어설션 활성화 시 JVM이 AssertionError 던지고 프로그램 정지.

어설션 활성화

어설션 기본 비활성화. JVM 스위치로 활성화:

java -ea:arguments java -enableassertions:arguments

활성화 시 true 조건 정상 진행, false 조건 AssertionError 트리거 후 실행 정지.

예제 1: 기본 어설션

class Main { public static void main(String args[]) { String[] weekends = {"Friday", "Saturday", "Sunday"}; assert weekends.length == 2; System.out.println("There are " + weekends.length + " weekends in a week"); } }

어설션 비활성화 시 출력:

There are 3 weekends in a week

어설션 활성화 시 출력:

Exception in thread "main" java.lang.AssertionError

확장 어설션 문법

진단 메시지 포함:

assert condition : expression;

expression은 AssertionError 생성자 전달, 조건 실패 시 표시.

예제 2: 메시지 포함 어설션

class Main { public static void main(String args[]) { String[] weekends = {"Friday", "Saturday", "Sunday"}; assert weekends.length==2 : "There are only 2 weekends in a week"; System.out.println("There are " + weekends.length + " weekends in a week"); } }

활성화 시 출력:

Exception in thread "main" java.lang.AssertionError: There are only 2 weekends in a week

대상 어설션 활성화

특정 클래스나 패키지 어설션 활성화:

시스템 클래스 -esa 또는 -enablesystemassertions로 활성화. 비활성화는 -da, -dsa로 유사 패턴.

어설션이 유용한 경우

  1. 도달 불가능 코드: 도달 불가능 표시 코드 진짜 도달 불가능 검증.
    void unreachableCodeMethod() { System.out.println("Reachable code"); return; // 도달 불가능 코드 System.out.println("Unreachable code"); assert false; }
  2. 누락된 default 분기: switch 문 철저 처리 보장.
    switch (dayOfWeek) { case "Sunday": System.out.println("It's Sunday!"); break; case "Monday": System.out.println("It's Monday!"); break; // … default: assert false : dayOfWeek + " is an invalid day"; }
  3. 가정 문서화: 깨지기 쉬운 주석 대신 assert 문으로 동기화 유지.
    if (i % 2 == 0) { // ... } else { assert i % 2 == 1 : i; // ... }

어설션 피해야 할 경우

  1. 공개 API 인수 검사: 사용자 입력은 어설션 에러 아닌 런타임 예외 트리거해야 함.
  2. 사이드 이펙트 있는 조건: 어설션 내 상태 수정 메서드 호출 피하기, 어설션 비활성화 시 코드 무음 실행 가능.
    ArrayList<String> weekdays = new ArrayList<>(Arrays.asList("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" )); ArrayList<String> weekends = new ArrayList<>(Arrays.asList("Sunday", "Saturday" )); boolean removed = weekdays.removeAll(weekends); assert removed; 

어설션 이점

  1. 빠른 개발자 중심 버그 탐지.
  2. 프로덕션 빌드서 자동 제거, 제로 런타임 비용 보장.
  3. 보일러플레이트 감소, 의도 명확화.
  4. 리팩토링과 최적화 시 자신감 증대.

java

  1. Java 연산자 마스터하기: 종류, 문법, 실전 예제
  2. Java 주석: 종류, 사용법, 모범 사례
  3. Java if…else 문 완전 정복: 제어 흐름 완벽 이해
  4. Java 향상된 for 루프(for-each) 완벽 가이드: 문법, 예제, 비교
  5. Java String 마스터하기: 생성, 메서드, 모범 사례
  6. Java 인터페이스 마스터: 개념, 구현, 모범 사례
  7. Java 익명 내부 클래스 마스터: 정의, 문법, 실전 예제
  8. Java Try-with-Resources 마스터: 자동 리소스 관리 완전 해설
  9. Java 애너테이션 완전 해설: 종류, 배치 위치, 실전 예제
  10. Java Vector 완벽 가이드: 사용법, 특징, ArrayList와의 비교