개발자 99% 커뮤니티에서 수다 떨어요!
💡 연습문제 14.
부엌용 믹서의 인터페이스를 설계하라. 이 믹서는 나중에 웹으로 쓸 수 있도 록 사물 인터넷IoT으로 연결될 예정이지만, 지금으로서는 믹서를 제어할 수 있는 인터페이스만 있으면 된다. 속도를 열 단계로 설정할 수 있는데 0은 중 지를 의미한다. 비어 있는 상태에서는 작동할 수 없고, 한 번에 한 칸씩만 속 도를 바꿀 수 있다. 즉 0에서 1, 1에서 2는 되지만, 0에서 2는 안 된다. 다음과 같은 메서드가 있을 때, 적절한 선행, 후행 조건과 불변식을 추가하라.
int getSpeed() void setSpeed(int x) boolean isFull() void fill() void empty()
우선 인터페이스를 자바 코드로 적어 봤다. 계약 내용은 주석에 적는다. 먼저 이 클래스의 불변식이다.
<인터페이스>
/* @invariant getSpeed() > 0
implies isFull() // 빈 상태로는 돌리지 못한다.
@invariant getSpeed() >= 0 &&
getSpeed() < 10 // 범위 검사
*/
</인터페이스>
다음은 선행 조건과 후행 조건이다.
/* @pre Math.abs(getSpeed() - x) <= 1 // 한 단계씩만 바꿀 수 있다.
@pre x >= 0 && x < 10 // 범위 검사
@post getSpeed() == x // 요청한 속도가 되었다.
*/ public void setSpeed(final int x)
/* @pre !isFull() // 차 있는데 또 채우지 않는다.
@post isFull() // 수행되었는지 확인한다.
* / void fill()
/* @pre isFull() // 비어 있는데 또 비우지 않는다.
@post !isFull() // 수행되었는지 확인한다.
*/ void empty()
느낀점 : 간단해보였지만 헷갈렸다. 문제를 풀어보고 안 풀어보고는 확실히 차이가 있는 것 같다.