소프트웨어의 개발과 유지보수에 있어서 가장 중요한 문제는 "어떻게 소프트웨어 시스템의 복잡성을 관리할 것인가"이다. 이러한 복잡성에 대처하기 위하 새로운 아이디어들이 등장하였고 이들을 구체화한 프로그래밍 방법론과 언어들이 개발되었다. 이러한 방법론이나 언어의 핵심이 추상화(abstruction)이다. 추상화란 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념이나 기능을 간추려 내는 것을 말한다. 즉, 어떤 시스템의 간략화 된 기술 또는 명세로서 시스템의 정말 핵심적인 구조나 동작에만 집중하는 것이다. 추상 자료형(Abstruct Data Type: ADT)은 추상화한 자료형, 즉 추상적으로 정의한 자료형을 의미한다. 구체적으로는 자료의 집합과 자료에 가해지는 연산들의 집합에 대한 수학적 명세이다. 이..