공개 계약과 내부 결정
배열로 리스트를 구현한 설명에 다음 문장이 있다. 각 문장을 ‘인터페이스·명세가 정하는 내용’과 ‘구현이 정하는 내용’으로 나누고 이유를 적는다.
- get(i)는 위치 i의 값을 반환하고 리스트를 바꾸지 않는다.
- 원소는 연속된 배열 칸에 저장한다.
- remove(i) 호출 뒤 기존 위치 i보다 뒤에 있던 원소의 인덱스가 하나씩 작아진다.
- 삭제할 때 배열 원소를 앞에서부터 왼쪽으로 당긴다.
해설 펼치기
1과 3은 인터페이스·명세가 정한다. 반환값과 상태 변화, 원소의 논리적 위치는 클라이언트가 호출 결과로 관찰한다.
2와 4는 구현이 정한다. 연속 배열을 쓸지, 칸을 어떤 순서로 옮길지는 같은 연산 의미를 실현하기 위한 내부 표현과 작업이다. 인터페이스는 결과를 정하지만 그 결과를 만드는 저장 방식까지 고정하지 않는다.