탐비의 개발 낙서장

[자료구조] 자료구조를 배우기 위한 준비 본문

프로그래밍/자료구조

[자료구조] 자료구조를 배우기 위한 준비

탐비_ 2020. 3. 27. 14:24

자료구조를 배우기 위한 준비

 

 시스템을 코딩하기 전 설계 단계에서 어떻게 추상화된 형태로 필요한 DATA를 생각해 낼 것인가와 DATA를 어떻게 클래스화 시킬 것인가에 대한 생각이 필요합니다. 여기서 추상적 자료형(ADT)이 등장합니다.

 

 

추상적 자료형(ADT)?

 

 1. 알고리즘에 필요한 데이터와 그 데이터에 대한 추상적인 연산들로 구성

 2. 말 그대로 '추상적'이기에 세부 명세를 포함하지 않음

 3. 자료구조는 추상적 자료형을 구체적(실제 프로그램)으로 구현한 것

 

 

자료구조

 

 

  프로그래머는 프로그램에서 저장하는 데이터에 대해 탐색/삽입/삭제 등의 연산을 효율적으로 수행하기 위해 데이터를 정돈합니다. 자료구조는 위의 목적을 달성하기 위해 일련의 동일한 타입의 데이터를 정돈하여 저장한 구성체라고 할 수 있습니다.

 

 

좋은 프로그램이란?

 

 좋은 프로그램의 기준은 크게 2가지 틀로 나눠 볼 수 있습니다.

 

1. 정성적 평가 기준(Qualitative Criteria)

 - 프로그램이 사용자의 요구에 부합하는가?

 - 프로그램이 정확하게 작동하는가?

 - 프로그램 내부에 문서화가 잘 되어 있는가?

 - 프로그램의 논리적인 단위를 생성하기 위해서 함수를 효과적으로 사용하고 있는가?

 - 프로그램의 코드가 읽기 쉬운가?

 

 위와 같은 정성적 평가기준은 소프트웨어 공학 측면 프로그램을 평가한다고 볼 수 있습니다.

 

2. 정량적 평가 기준(Quantitative Criteria)

 - 프로그램이 주기억장치와 보조기억장치를 효율적으로 사용하는가?

 - 프로그램의 실행시간은 적절한가?

 

 위와 같은 정량적 평가 기준은 말 그대로 양, 실행속도를 의미합니다. 실행속도를 결정하는 것은 대체로 메모리이며, 자료구조를 배우는 이유가 바로 메모리의 효율적인 사용이라고 할 수 있습니다.

 

 

어떻게 성능을 평가하나요?

 

 실제 실행 시간을 측정할 수도 있지만, 프로그래머의 숙련도, 언어의 종류 및 컴퓨터의 성능에 따라서 수행시간이 얼마든지 달라질 수 있기 때문에 '성능 분석'이라는 사전 예측 방법을 통해 평가합니다. 이는 복잡도 이론에 기초한 방법이기 때문에 공간 및 시간 복잡도로 나눠 볼 수 있습니다.

 

1. 공간복잡도

 프로그램을 실행시켜 완료하는데 필요한 메모리 공간의 크기

 

2. 시간복잡도

 프로그램을 실행시켜 완료하는데 필요한 CPU 시간

 

 위와 같이 메모리 공간의 크기와 프로그램의 실행 시간의 두 개 기준으로 볼 수 있지만, 최근에 메모리 가격의 하락 등의 사유로 자료구조에서 주로 다루는 부분은 시간복잡도입니다.

 

 

마무리

 

 이번 글에서 자료구조의 토대가 되는 추상적 자료형과 좋은 프로그램을 위한 성능 분석에 대해서 간단히 정리해보았습니다.