본문 바로가기

IT/Python

Python 추상자료형이란?

기능과 구현 용어의 차이 

삽입연산의 기능과 구현은?

기능 : 연산이 무엇을 하는지에 대한 내용

> 삽입연산기능 : 순서 데이터에서 원하는 위치에 데이터를 저장한다.

 

구현 : 연산을 어떻게 하는지에 대한 내용 

> 동적배열삽입 : 데이터를 삽일 할때 인덱스와 인덱스 뒤의 데이터를 한칸씩 미루고 데이터를 삽입

> 링크드리스트 삽입 : 저장 위치 전 노드에 접근해서 앞,뒤 노드를 수정하고 새로운 노드를 추가함

 

일상생활에서 기능과 구현의 차이를 예시로 들면 

기능 : 강아지가 짖는다. 

구현 : 강아지가 복부에 힘을 줘서 목청을 거져 입밖으로 소리가 난다. 

머 이런게 있겠죠. 

 

 

추상화란? 

구현을 몰라도 기능만 알면 프로그래밍을 할 수 있게 해주는 개념입니다.

 

def insert(data_type, index, element):
	""" 자료형 data_type 의 위치 index에 데이터 element를 삽입해주는 함수 """

 

Python에서의 추상자료형(Abstract Data Type)은?

자료구조를 추상화한것입니다.

데이터를 저장/사용할때 기능만 알면 사용이 가능하도록 만들어 놓은거죠. 

 

PYTHON에서 여러가지 추상자료형이 있는데요. 

대표적인 예로 리스트가 있습니다. 

 

리스트는 다음과 같은 기능이 있어요.

 

1. 접근 연산 : 특정 위치에 있는 데이터를 가지고 오거나 수정한다.

2. 탐색 연산 : 특정 조건을 만족하는 데이터를 찾는다

3. 삽입 연산 : 특정 위치에 새로운 데이터를 저장한다. 

4. 삭제 연산 : 특정 위치에 있는 데이터를 지운다. 

* 데이터간 순서 관계를 유지 할 수 있다.

 

연산을 어떻게 구현하는지는 추상자료형에 포함되지 않아요.

 

 

추상자료형과 자료구조의 차이는?

자료구조인 동적배열과 추상자료형인 리스트를 비교해 볼께요. 

 

동적배열은 데이터를 메모리에 순서대로 그리고 연속적으로 저장합니다.

1. 접근 연산 : 인덱스 주소를 한 번에 계산해서 메모리에 접근한다.

2. 탐색 연산 : 가장 앞 인덱스부터 선형적으로 모든 데이터를 확인한다.

3. 삽입 연산 : 인덱스 뒤 데이터를 한 칸씩 뒤로 밀고, 데이터를 저장한다.

4. 삭제 연산 : 데이터를 지우고 뒤 인덱스들을 하나씩 앞으로 옮겨서 저장한다. 

 

자료구조인 동적배열은 데이터를 어떻게 저장하고 어떻게 탐색하는지 적혀있죠.

다시말해 자료구조는 데이터를 어떻게 다룰 것인지를 말하고 

추상자료형은 어떤 기능이 있는지만 다루고 있어요 .

 

 

리스트(추상자료형)는 동적배열(자료구조)로 구현할 수 있다고 표현합니다.

그럼 리스트는 동적배열로만 구현가능할까요?

아니예요. 접근, 탐색, 삽입, 삭제를 할 수 있는 다른 자료구조로도 구현이 가능해요.

저게 가능한 자료구조로는 링크드리스트가 있어요.

 

리스트는 추상자료형을 동적배열과 링크드리스트라는 자료구조로 구현할 수 있다. 

라고 표현 할 수 있어요. 

 

추상자료형은 왜 배울까요?

프로그래밍할 때는 자료구조를 떠올리는 것보다 기능을 떠올리는게 쉽기 때문이에요.

 

만약 데이터를 메모리에 순서대로 저장하고 바꾸고 싶다라고 할때,

자료구조를 먼저 생각하면

" 동적배열을 사용해서 인덱스 뒤 데이터를 한칸씩 뒤로 밀고, 데이터를 저장해야겠다..."

이렇게 생각하게 되는데 그러면 코드의 큰 흐름을 놓지게 되는 경우가 많아져요. 

 

반대로 추상자료형을 먼저 생각하면

" 순서대로 저장하고 바꿀 수 있는 리스트를 써야지.."

이렇게 쉽게 생각할 수 있고 코드의 흐름에 집중을 할 수 있어요. 

 

 

무엇이 더 중요할까요?

더 중요한 건 없습니다. 서로 다른개념인거예요. 

 

기능을 중점적으로 이야기하고 싶을때, 흐름을 생각할 때는 추상자료형을 주로 사용하고,

코드의 성능을 분석하거나 최적화 시켜야 할 때 자료구조를 중심적으로 생각하면 됩니다. 

 

 

 

반응형