객체(object)와 이 객체간의 연산(operation)의 집합.
자료형이 결정되면 해당 데이터 간에 가능한 연산도 고려해야 한다. 이 때 실행 가능한 연산이 되도록 신경 써야 한다.
복잡한 자료형을 구현할 경우에는 연산이 연산자만으로 끝나지 않기 때문에 함수로 작성된다.
ex. 스택에서 새로운 값을 추가하는 연산은 add()가 이용된다.
: 실제적인 구현으로부터 분리되어 정의된 자료형.
소프트웨어 시스템의 복잡성을 관리하기 위한 방법 중 하나.
어떤 시스템의 간략화된 기술 또는 명세로서 시스템의 정말 핵심적인 구조나 동작에만 집중하는 것.
*명세 : 기술적, 공학적 기술
데이터나 연산이 무엇인지는 정의되지만 데이터나 연산을 어떻게 구현할 것인지는 정의되지 않음.
👉 연산이름, 매개 변수, 반환형은 정의되지만 구체적인 코드는 X
자연수를 나타내는 추상 자료형.
*자연수 (Natural Number)
객체 : 0 ~ INT_MAX (순서화된 정수의 부분범위)
함수 :
Nat_Number zero() ::= 0
// 단순히 0을 반환
Nat_Number successor(x) ::= if(x == INT_MAX) return x
else return x + 1
// x가 INT_MAX이면 x를, 아니면 그 다음 수를 반환
Boolean is_zero(x) ::= if(x) return fALSE
else return TRUE
//??
Boolean equal(x, y) ::= if(x == y) return TRUE
else return FALSE
Boolean add(x, y) ::= if((x + y) < = INT_MAX) return x + y
else return INT_MAX
Boolean sub(x, y) ::= if(x < y) return 0
else return x - y;
"::="기호는 "~으로 정의된다"는 의미
ADT의 이름부터 시작되고, 그 안에는 객체와 함수들이 정의된다.
구현될 때 구현세부사항을 외부에 알리지 않고 외부와의 인터페이스만을 공개하여 이용된다.
= 구현 방법을 언제든 안전하게 변경할 수 있다. (정보은닉의 기본)
👉 전체 프로그램을 변경 가능성이 있는 구현의 세부사항으로부터 보호가능.
객체지향언어에서는 "클래스"로 구현된다.