Assertion은 프로그래머의 의도를 확실히 밝히면서도 실행 시 조건이 반드시 성립함을 보장한다.
만약 프로그램의 특정 부분에서 int value가 10이어야만 다음 코드가 실행되어야 한다고 로직을 구성했을 시에 value가 10이 아닌데도 실행되면 이는 프로그래머의 의도와는 다른 것이다. 하여 우리는 아래와 같이 value가 10임을 표명한다는 것을 아래와 같이 작성할 수 있다.
assert value == 10;
만약 value가 10이 아니면 java.lang.AssertionError를 던진다.
어서션을 사용하면 아래와 같은 장점이 있다.
1. 해당 부분에서 성립해야 할 조건이 명확해지고 소스 코드 읽기가 좋아짐
2. 버그를 빨리 발견할 수 있음
3. 어서션을 활성화하면 어서션이 성립하는지 자동으로 확인이 가능함.
4. 어서션을 비활성화 하면 어서션이 무시되어 성능이 개선됨
주의할 점은 어서션 안에 부수효과를 일으키도록 작성해야 되서는 안된다는 것이다.
코드로 보자. 아래의 클래스는 정수 배열을 정렬하는 간단한 코드이다.
우리는 저렇게 설명을 주렁주렁 달지 말고, Assert를 사용할 것이다.
첫번째 주석에서 data[m]이 data[i]~data[data.length-1]에서 최솟값이어야한다 라고 했으므로 isMin메소드를 만들고,
두번째 주석에서는 data[0]~data[i+1]은 정렬되야 한다고 했으므로 isSorted메소드를 만든다.
각 메소드들은 boolean을 반환해야 하고, Assertions에러는 assert이하가 false이면 던져진다.
이를 실행시켜보자.
실행결과:
물론 지금은 잘못된 코드가 없어서 Assertions에러가 발생하지 않는다.
'자바로 배우는 리팩토링' 카테고리의 다른 글
메소드 추출 (0) | 2021.12.31 |
---|---|
널(null)객체 도입 (0) | 2021.12.28 |
MagicNumber를 치환하기 (0) | 2021.12.22 |
리팩토링이란? (0) | 2021.12.22 |
UML - 클래스 다이어그램 (0) | 2021.12.21 |