본문 바로가기
Web development/Books

Refactoring - Introduce Assertion

by 자몬다 2019. 12. 31.
Martin Fowler - Refactoring을 읽고 정리한 글입니다.(302~304p)
// Before
if (this.discountRate)
	base = base - (this.discountRate * base);

// After
assert(this.discountRate >= 0); // assert 추가
if (this.discountRate)
	base = base - (this.discountRate * base);

예제는 할인하는 코드. 만약에 discountRate가 0이면 할인이 안됨.

 

Motivation

특정 조건을 만족시켜야 동작하는 코드가 있을 때 추론하기보다는 어썰션이 있으면 좋다. 어썰션은 항상 참일 것을로 추정되는 컨디셔널 스테이트먼트다. 실패하면 에러를 일으킨다. 어썰션이 없어도 프로글램은 똑같이 동작해야한다. 실제로 어떤 언어들은 컴파일타임 스위치로 비활성화할수 있는 기능을 제공함. 에러를 찾는데 좋지만 그럴때만 사용하는건 아님. 코드 읽는 사람에게 그 시점에서 어떤 상태여야 하는지 알려주는 커뮤니케이션 측면의 용도도 있음. 디버깅할때도 문제를 찾기 쉬움. 하지만 값을 리턴하는데 사이드이펙트를 관찰할 수 없는 경우 사용해라.

 

Mechanics

트루로 추정되는 조건을 보면 어썰션을 추가해라

 

댓글