-
추상 자료형(No 자료구조)Algorithm & Data Structure 2021. 4. 12. 18:33728x90
추상 자료형 (Abstract Data Type)
자료 구조를 "추상화" 한 개념으로
데이터를 어떻게 저장하고 어떻게 사용할 것인지 보다는 오로지 기능만을 생각하여 사용할 수 있게 해주는 자료형? 이라고 보면 될 것 같다.
즉, 어떻게에 대한 생각은 하지 않고 어떤 기능을 하는지만 알고 있으면 해당 기능이 필요한 상황에서 이를 활용할 수 있다. 대표적으로 파이썬의 리스트, 딕셔너리와 같은 자료형을 추상 자료형이라 부른다.
우리가 흔히 알고있는 자료구조는 추상 자료형의 기능 + 구현을 함께 다루는 더 큰 개념으로 이해하자.
사실상 자료구조와 추상 자료형은 다른 의미이다.
(자바스크립트에서의 배열은 자료구조의 배열이 아니라는 의미와 같다.)
기능은
연산이 "무엇"을 하는지가 핵심이며
구현은
연산의 기능을 "어떻게" 하는지가 핵심이다.
추상 자료형에서는 구현 방법을 명시하고 있지 않다는 점에서 자료구조와 다르다.
파이썬의 리스트 자료형을 예로 들어보자.
리스트
데이터간 순서 관계를 유지할 수 있다.
아래와 같이 연산에 대한 기능을 가지고 있으며 아래 연산을 어떻게 구현할지는 추상 자료형에 포함되지 않는다.
동적 배열
데이터를 메모리에 순서대로 그리고 연속적으로 저장한다.
기능 + 구현
리스트는 동적 배열로 구현 할 수 있다
리스트는 링크드 리스트로 구현 할 수 있다고 표현한다.
즉, 리스트 라는 추상 자료형을 동적 배열이 또는 링크드 리스트라는 자료구조로 구현을 할 수 있다고 말한다.
어떤 문제를 해결하고자 할때 구현을 떠오르는 것 보다 기능을 떠오르는 편이 코드의 흐름에 더 집중할 수 있다고 한다.
생각해보면
어떤 문제에서 데이터를 순서대로 저장하고 바꾸면 해결 할 수 있겠다라는 생각에서
추상 자료형 리스트를 바로 떠올리면 더 간단하고 빠르게 문제를 해결 할 수 있다.
자료구조를 떠올린다고 가정하면 데이터를 어떻게 저장하고 어떻게 가져오는지 동적 배열이 적합한지 링크드 리스트가 적합한지와 같은 생각을 쉽게 떠올리기는 어렵기에 상대적으로 추상 자료형으로 문제에 접근하는게 더 효율적이지 않나 라고 생각된다.
그래서 리스트가 어떻게 데이터를 저장하는지 어떻게 데이터를 가져오는지에 대해 자료구조에 대한 이해가 뒷받침되었을때 추상 자료형을 훨씬 유연하게 사용할 수 있지 않을까 싶다.
파이썬 내장 함수들의 내부구조를 파해칠때 이러한 자료구조에 대한 이해가 있어야 어떻게 데이터를 저장하고 어떻게 데이터를 가져오는지에 왜? 에 대한 답을 찾을 수 있지 않을까 한다.
출처 : 코드잇(자료구조)
728x90'Algorithm & Data Structure' 카테고리의 다른 글
추상 자료형_2(Python) (0) 2021.04.14 추상 자료형_1(Python) (0) 2021.04.13 해시 테이블 (0) 2021.04.10 링크드 리스트 (0) 2021.04.08 배열 (0) 2021.04.06