1 minute read

추상 자료형(Abstract data type, ADT)이란?

추상 자료형이란 구체적인 기능의 완성과정을 언급하지 않고, 순수하게 기능이 무엇인지를 나열한 것이다. 즉, 컴퓨터 과학에서 자료들과 그 자료들에 대한 연산들을 명기한 것이다. 추상 자료형구현 방법을 명시하고 있지 않다는 점에서 자료 구조와 다르다.

추상 자료형 정의해보기

자판기를 예시로 추상 자료형 정의

  • 자판기는 사용자가 음료를 선택하고, 돈을 넣고, 음료를 받는 기능을 가진 시스템이다. 이를 추상 자료형으로 정의하면 다음과 같다.

1. 데이터

  • 상품 목록 : 음료의 이름, 가격, 재고량
  • 현재 투입된 금액
  • 사용자의 선택 상태(선택한 음료)
  • 자판기의 총 금액(수익)

2. 연산

  • 상품 추가/삭제 : 자판기에 음료를 추가하거나 삭제
  • 상품 조회 : 자판기에 있는 음료 목록과 가격, 재고량을 조회
  • 금액 투입 : 사용자가 돈을 투입
  • 상품 선택 : 사용자가 음료를 선택
  • 구매 처리 : 선택한 상품을 구매하고, 잔돈을 반환
  • 잔돈 반환 : 투입된 금액 중 남은 금액 반환
  • 수익 조회 : 자판기의 누적 수익 조회
  • 재고 관리 : 재고를 추가하거나 수정

자판기 ADT 정의

    VendingMachineADT = {Data, Operations}

    Data:
    - products: 상품 목록 {name, price, stock}
    - currentBalance: 현재 투입된 금액 (integer)
    - totalEarnings: 자판기의  금액 (integer)

    Operations:
    - addProduct(name, price, stock): 상품 추가
    - removeProduct(name): 상품 삭제
    - viewProducts(): 상품 목록  상태 조회
    - insertMoney(amount): 금액 투입
    - selectProduct(name): 상품 선택
    - purchase(): 상품 구매  잔돈 반환
    - returnChange(): 투입된 금액 반환
    - checkEarnings(): 수익 확인
    - restockProduct(name, stock): 재고 추가

정리

  1. 데이터와 연산의 추상화
    • ADT는 데이터와 그 데이터를 다루는 연산을 논리적으로 묶어 놓은 것이다. 예를 들어, 자판기에서 상품 목록, 투입 금액, 총 수익은 데이터이고, 상품 조회, 금액 투입, 구매 처리는 연산이다.
  2. 구현과 독립적인 설계
    • ADT는 실제 구현 방법과 무관하게, 사용자가 데이터와 연산을 어떤 방식으로 사용할지에만 초점을 맞춘다.
    • 자판기의 경우, 내부적으로 데이터가 배열, 리스트, 해시맵 중 어떤 구조로 저장되는지는 중요하지 않고, viewProducts()로 상품을 조회하고, purchase()로 구매하는 논리적 동작이 중요하다.
  3. 논리적 사용과 명확한 인터페이스 제공
    • ADT는 사용자에게 명확한 사용 방법(인터페이스)를 제공하여 시스템의 복잡성을 감춘다.
    • 자판기를 사용하는 사람은 insertMoney로 돈을 넣고 selectProduct로 상품을 선택하는 방법만 알면 된다. 내부의 구현은 전혀 몰라도 된다.
  • 즉, ADT는 사용자가 데이터를 다루는 방법을 명확히 정의하고, 내부 구현과 독립적으로 논리적 사용만을 기능하게 하는 추상적인 자료 구조의 설계 방식이다. ADT를 활용하면 데이터와 연산의 관계를 체계적으로 설계하고, 사용과 구현을 분리하여 유연하고 확장 가능한 프로그램을 작성할 수 있다.

Reference

  • 윤성우의 열혈 자료구조
  • wikipedia - 추상 자료형
  • 나무 위키 - ADT