반원 블로그

01a. 자료구조와 자료형 본문

2018~/파이썬 자료구조 알고리즘

01a. 자료구조와 자료형

반원_SemiCircle 2019. 4. 18. 03:21

객체 구현

현실에 있는 물체, 또는 가상한 존재. 이를 객체(Object)라 정의하고 Class를 이용하여 프로그래밍에 옮겨 구현합니다. 수치나 값에 대한 것은 클래스의 속성(Attribute)으로, 행동과 연산에 대한 것은 클래스의 메소드(Method)로 작성합니다.

추상 과정

위에서 언급한 프로그래밍에 옮겨 구현 과정에서 이를 어떻게 코드로 옮길지 고민하게됩니다. 자동차를 직접 코드에 넣을 수 없으니, 자동차에 대한 값들과 기능 및 수행작업들을 머리 속에서 대강 "이렇게 문자열로 표기하면 될 것이다. 이 정보는 정수형으로 하면 될 것 같은데?"하며 코드에 어떻게 옮길지 구상하죠.

이 과정에서 우리에게 필요없는 정보는 코드에 안 옮길 수도 있고요. 그러면 필요하거나 특정 정보만 코드로 옮기게 되는데 이 것을 추상화(Abstract)라고 볼 수 있습니다. 사물의 특정부위만 골라내거나 부각시켜서 그렸던 피카소의 추상화처럼요. 또한 추상(抽象. 뽑아낼 추, 코끼리 상)의 어원을 생각하면 위에서 언급한 "대강 이럴 것이다라 추측한다는"점에서도 얼추 맞춰볼 수 있겠습니다.

객체 구현 = 새로운 자료형 정의 ≠ 자료구조

앞서 말한 자동차(실체) 또는 게임 캐릭터(허구) 모두 객체로 정의하여 클래스로 구현가능합니다. 그러나 우리가 자료구조에서 구현할 클래스와는 조금 다릅니다.

자료구조에서 클래스를 이용하여 구현할 객체는 목적이 있습니다. 위처럼 단순하게 무언가를 표현하기 위한 자료형으로의 객체가 아닌, 데이터를 저장 및 관리 및 정돈(정렬)을 효율적으로 하기 위한 구성체를 만듭니다. 이를 위해 기본적으로 데이터에 대한 탐색, 삽입, 삭제등의 연산이 들어갑니다. 역으로 얘기하면 이 3개 연산을 고려하지않다면 자료구조(Data Structure)로 볼 수 없습니다.

이 기본 3연산은 메소드로 구현되있어야 됩니다. 그리고 이 연산을 위한 속성(변수)들이 추가될 수 있습니다.

자료구조에 따라 그리고 목적에 따라 기본 3연산 외에 추가적인 연산이 작성될 수 있습니다. 또한 기본 3연산을 세분화시킬 수도 있습니다. 따라서 필요 연산 ≤ 구현할 메소드의 관계를 가집니다.

대표적인 자료구조는 파이썬 기본 자료형인 리스트입니다. 리스트는 기본 3연산인 삽입(함수 append, insert, extend), 조회(index접근, 함수 index), 삭제(명령어 del, 함수 remove, clear)와 추가적인 연산(함수 count, copy, pop, sort, reverse)가 구현되있습니다.

"이미 존재하는 자료형을 쓰는 법만 알고 잘 사용하면 되지않나?"라는 생각은 저도 했었습니다. 그러나 "자료구조를 공부한다"는 것은 우리가 현재 사용하는 기본 자료형들이 어떻게 만들어졌는지 과정을 알아보고, 효율적으로 소프트웨어를 만드는데 활용(알고리즘, 구조설계 등)함에 목적이 있습니다. 해당 지식 습득 유무에 따라 한계가 존재하기 때문에 컴퓨터 관련 전공이라면 빠지지않고 교과과정에 넣고 있습니다.

자료구조과 알고리즘

자판기 알고리즘같이 단순하게 if과 while로 작성하는 알고리즘이 아닌, 전공으로서 배우는 곳에서 다루는 알고리즘(정렬 및 탐색 알고리즘)은 자료구조를 통해 나옵니다. 알고리즘을 구현하려면 그 알고리즘이 수행될 수 있도록 부합하는 환경, 즉 자료구조(Data Structre)를 구현할 수 있어야 하니까요. (마치 알고--자료구조--리즘)

 

위키독스 연재 : https://wikidocs.net/book/2868

Comments