기능과 구현 용어의 차이
삽입연산의 기능과 구현은?
기능 : 연산이 무엇을 하는지에 대한 내용
> 삽입연산기능 : 순서 데이터에서 원하는 위치에 데이터를 저장한다.
구현 : 연산을 어떻게 하는지에 대한 내용
> 동적배열삽입 : 데이터를 삽일 할때 인덱스와 인덱스 뒤의 데이터를 한칸씩 미루고 데이터를 삽입
> 링크드리스트 삽입 : 저장 위치 전 노드에 접근해서 앞,뒤 노드를 수정하고 새로운 노드를 추가함
일상생활에서 기능과 구현의 차이를 예시로 들면
기능 : 강아지가 짖는다.
구현 : 강아지가 복부에 힘을 줘서 목청을 거져 입밖으로 소리가 난다.
머 이런게 있겠죠.
추상화란?
구현을 몰라도 기능만 알면 프로그래밍을 할 수 있게 해주는 개념입니다.
def insert(data_type, index, element):
""" 자료형 data_type 의 위치 index에 데이터 element를 삽입해주는 함수 """
Python에서의 추상자료형(Abstract Data Type)은?
자료구조를 추상화한것입니다.
데이터를 저장/사용할때 기능만 알면 사용이 가능하도록 만들어 놓은거죠.
PYTHON에서 여러가지 추상자료형이 있는데요.
대표적인 예로 리스트가 있습니다.
리스트는 다음과 같은 기능이 있어요.
1. 접근 연산 : 특정 위치에 있는 데이터를 가지고 오거나 수정한다.
2. 탐색 연산 : 특정 조건을 만족하는 데이터를 찾는다
3. 삽입 연산 : 특정 위치에 새로운 데이터를 저장한다.
4. 삭제 연산 : 특정 위치에 있는 데이터를 지운다.
* 데이터간 순서 관계를 유지 할 수 있다.
연산을 어떻게 구현하는지는 추상자료형에 포함되지 않아요.
추상자료형과 자료구조의 차이는?
자료구조인 동적배열과 추상자료형인 리스트를 비교해 볼께요.
동적배열은 데이터를 메모리에 순서대로 그리고 연속적으로 저장합니다.
1. 접근 연산 : 인덱스 주소를 한 번에 계산해서 메모리에 접근한다.
2. 탐색 연산 : 가장 앞 인덱스부터 선형적으로 모든 데이터를 확인한다.
3. 삽입 연산 : 인덱스 뒤 데이터를 한 칸씩 뒤로 밀고, 데이터를 저장한다.
4. 삭제 연산 : 데이터를 지우고 뒤 인덱스들을 하나씩 앞으로 옮겨서 저장한다.
자료구조인 동적배열은 데이터를 어떻게 저장하고 어떻게 탐색하는지 적혀있죠.
다시말해 자료구조는 데이터를 어떻게 다룰 것인지를 말하고
추상자료형은 어떤 기능이 있는지만 다루고 있어요 .
리스트(추상자료형)는 동적배열(자료구조)로 구현할 수 있다고 표현합니다.
그럼 리스트는 동적배열로만 구현가능할까요?
아니예요. 접근, 탐색, 삽입, 삭제를 할 수 있는 다른 자료구조로도 구현이 가능해요.
저게 가능한 자료구조로는 링크드리스트가 있어요.
리스트는 추상자료형을 동적배열과 링크드리스트라는 자료구조로 구현할 수 있다.
라고 표현 할 수 있어요.
추상자료형은 왜 배울까요?
프로그래밍할 때는 자료구조를 떠올리는 것보다 기능을 떠올리는게 쉽기 때문이에요.
만약 데이터를 메모리에 순서대로 저장하고 바꾸고 싶다라고 할때,
자료구조를 먼저 생각하면
" 동적배열을 사용해서 인덱스 뒤 데이터를 한칸씩 뒤로 밀고, 데이터를 저장해야겠다..."
이렇게 생각하게 되는데 그러면 코드의 큰 흐름을 놓지게 되는 경우가 많아져요.
반대로 추상자료형을 먼저 생각하면
" 순서대로 저장하고 바꿀 수 있는 리스트를 써야지.."
이렇게 쉽게 생각할 수 있고 코드의 흐름에 집중을 할 수 있어요.
무엇이 더 중요할까요?
더 중요한 건 없습니다. 서로 다른개념인거예요.
기능을 중점적으로 이야기하고 싶을때, 흐름을 생각할 때는 추상자료형을 주로 사용하고,
코드의 성능을 분석하거나 최적화 시켜야 할 때 자료구조를 중심적으로 생각하면 됩니다.
'IT > Python' 카테고리의 다른 글
Python 추상자료형 - 시간복잡도와 자료구조의 선택 (0) | 2020.09.19 |
---|---|
Python 추상자료형 - 세트 (Set) (0) | 2020.09.17 |
Python 추상자료형 - 스택 (Stack) (0) | 2020.09.16 |
python을 이용해서 파일 또는 폴더인지 확인하는 방법 (0) | 2020.09.10 |
Pandas에서 컬럼명이 없는 데이터 파일 읽어오기 (0) | 2020.09.08 |