추상 자료형
타입의 속을 감추면 무엇이 좋아질까?
추상 자료형
조건은 둘입니다
추상 자료형(abstract data type, ADT)은 두 조건을 채운 사용자 정의 타입입니다. 하나, 표현을 밖에서 볼 수 없게 감추고 타입이 내놓은 연산으로만 쓰게 합니다. 둘, 타입의 선언과 연산들을 하나의 구문 단위에 함께 담습니다.
사용자 정의 타입은 프로그래머가 새로 만든 타입이고, 구문 단위는 문법으로 묶은 코드 한 덩어리입니다. 3과 7은 예시 값입니다.
조건 ① 표현 감추기
연산으로만 드나듭니다
타입을 가져다 쓰는 코드를 클라이언트(client)라고 합니다. 클라이언트가 push를 부르면 벽을 통과하지만, 속의 topPtr을 직접 바꾸려 하면 막힙니다. 표현을 이렇게 감추는 것이 정보 은닉(information hiding)입니다.
stk는 Stack 타입의 변수이고, topPtr은 맨 위 칸의 번호입니다. 5와 9는 예시 값입니다.
감추면 좋은 점
속을 바꿔도 사용 코드는 그대로
클라이언트는 표현을 볼 수 없으니 표현에 기대는 코드를 쓸 수도 없습니다. 그래서 표현을 배열에서 연결 리스트로 바꿔도 사용 코드는 고칠 필요가 없습니다.
연결 리스트는 값을 화살표로 줄줄이 이은 구조입니다. 이 바꿔치기는 설명을 위한 예시입니다.
조건 ①의 이점
표현을 감춰서 얻는 것 셋
첫째는 신뢰성입니다. 신뢰성은 프로그램이 정해진 대로 정확히 동작하는 정도입니다. 여기에 더해 프로그래머가 살펴야 할 코드와 변수의 범위가 줄고, 같은 이름이 서로 부딪힐 일도 줄어듭니다.
조건 ② 한 단위에 담기
흩어진 것을 한곳에 모읍니다
타입 선언과 그 연산들이 하나의 구문 단위에 모여 있으면 프로그램을 조직하는 단위가 생깁니다. 고칠 때 볼 곳이 한곳이고, 그 단위만 따로 컴파일할 수도 있습니다.
컴파일은 소스(내가 쓴 코드)를 기계어로 번역하는 일입니다. 따로 컴파일하는 이야기는 8편에서 다시 봅니다.
언어의 요건
언어가 갖출 세 가지
언어에는 타입 정의를 담을 구문 단위가 있어야 합니다. 그 안에서 타입 이름과 서브프로그램 헤더는 클라이언트에게 내놓고, 실제 정의는 감출 방법도 필요합니다. 그리고 기본 연산 몇 가지는 언어에 들어 있어야 합니다.
헤더는 서브프로그램의 이름과 넘겨받을 값을 적은 첫 줄입니다. 기본 연산은 정수 덧셈처럼 언어가 원래 주는 연산입니다.
설계 이슈
언어를 만드는 쪽이 정할 것
추상 자료형을 언어에 넣을 때 정할 것이 셋입니다. 타입을 매개변수로 받게 할 것인가, 어떤 접근 제어를 둘 것인가, 타입의 명세와 구현을 물리적으로 나눌 것인가. 다음 편부터 언어마다 어떻게 답했는지 봅니다.
명세는 무엇을 할 수 있는지 적은 부분이고, 구현은 그것을 실제로 해내는 코드입니다.
다음 편