Data Abstraction

ADT Specifications


명세(specification)는 연산마다 호출 전 상태, 입력, 적용 조건, 반환값, 호출 뒤 상태를 정확히 적는다.

호출 전 상태와 적용 조건연산을 시작할 수 있는 상태를 정한다.
반환값호출자가 받는 값을 정한다.
호출 뒤 상태연산이 끝난 뒤의 상태를 정한다.

호출 전후를 하나의 명세로 묶는다

사례마다 호출 전 상태, 적용 조건, 반환값과 호출 뒤 상태가 하나의 명세로 이어진다. 적용 조건을 만족하지 않으면 연산은 시작되지 않는다.

화살표는 호출 전 상태에서 결과로 가는 순서이고, 강조한 적용 조건 카드는 그 호출이 결과까지 이어지는지 가르는 자리다.

연산 열을 따라 상태와 반환값을 계산한다

빈 스택에서 네 연산을 차례로 호출한다. 각 행의 호출 뒤 상태가 다음 행의 호출 전 상태가 된다.

호출 전 상태연산반환값호출 뒤 상태
초록 행은 방금 호출한 연산이고, 흐린 행은 아직 호출하지 않은 연산이다.

같은 반환값도 호출 뒤 상태가 다르면 다른 연산이다

peek()과 pop()은 같은 맨 위 값을 돌려주지만 한쪽만 상태를 바꾼다.

peek()

[4, "dog"] → 반환 "dog"
[4, "dog"]

상태를 읽고 그대로 둔다.

pop()

[4, "dog"] → 반환 "dog"
[4]

맨 위 값을 읽고 상태에서 삭제한다.

반환값과 상태 변화를 함께 보아야 연산의 의미를 구분할 수 있다.