Goal
자료 구조란 무엇인가
자료 구조를 왜 알아야 하는가
어떠한 자료 구조가 있는가
자료 구조 선택 시 고려할 점
자료 구조(Data Structure)란?
1) 자료 구조의 개념
자료 구조(Data Structure)란, 실세계에 존재하는 다양한 자료들을 프로그램이 효율적으로 처리될 수 있도록 컴퓨터상의 자료로 저장하거나 표현하는 기계적인 형태 또는 논리적인 구조를 말한다. 또한, 자료 구조는 자료의 형식만을 설정하는 것이 아니고 자료에 접근하거나 처리하는 규칙을 포함한다.
예를 들면, 그래프, 집합, 조합 등, 이론적인 모형(model)으로 모형화시킨 추상체도 자료 구조라 할 수 있고,
문자열, 리스트, 트리 등 컴퓨터의 기억 공간상에 표현하는 실제적인 방법도 자료 구조라 할 수 있다.
자료 구조와 알고리즘은 밀접한 관계가 있다.
알고리즘에 따라 필요한 자료 구조가 다르고, 효율 또한 다를 수 있다.
반대로, 자료 구조에 따라 필요한 알고리즘이 다르고, 효율 또한 다를 수 있다.
프로그래밍이란 어떠한 문제에 대해, 프로그래밍 언어로, 문제를 해결할 수 있는 적절한 알고리즘, 자료 구조 등을 사용하여 문제를 해결하기 위한 프로그램을 구현하는 것을 말한다.
데이터베이스에 효율적인 B-트리 자료 구조와 네트워크에 일반적인 라우팅 테이블 자료 구조 등,
문제에 따라, 어떤 알고리즘으로는 풀 수 없고, 특정한 알고리즘만을 요구하는 경우도 있고, 자료 구조도 마찬가지로 특정한 문제에 따라 꼭 필요한 자료 구조, 더 효율적인 자료 구조가 있다.
따라서 알고리즘과 자료 구조에 대한 지식은 좋은 개발자가 되기 위한 필수 지식이다.
이러한 자료 구조는 프로그래밍, 데이터베이스, 운영체제,
그 외의 전산 과학 분야의 논제에서도 골격을 이루는 개념이다.
2) 자료 구조의 형태에 따른 분류
자료 구조를 형태상으로 구분하면,
자료를 일련의 순서를 갖고 나열하는 선형 구조,
자료의 계층적 구조나 망(network) 구조 등을 표현하게 되는 비선형 구조,
레코드를 표현하는 파일(file) 구조로 크게 나뉜다.
표에는 없지만 정수, 실수, 문자, 문자열 등의 컴퓨터가 기본적으로 제공하는 자료형인 단순 구조도 있다.
위에서 보여준 자료 구조 말고도 다양한 자료 구조가 존재하는데,
앞으로 위의 자료 구조들, 위에서 다루지 않은 자료 구조 또한 중요한 자료 구조에 대해서는 포스팅할 예정이다.
3) 자료 구조 선택 시 고려 사항
프로그래머가 자료를 표현하기 위해 어떠한 구조를 선택하느냐에 따라 프로그램의 간결성, 명확성, 처리 속도, 필요한 기억 공간의 크기 등의 프로그램 성능이 달라진다.
프로그램의 성능을 평가하는 기준은 다음과 같다.
- 주관적인 평가 : 모듈화되어 이해하기 쉽고 수정이 용이한가
- 객관적인 평가 : 의도한 대로 주어진 문제를 해결하는 데 걸리는 시간의 비교와 수행하는데 필요한 기억 공간의
크기를 비교
우리는 기억 공간을 많이 차지하더라도 처리 결과가 빨리 나오는 프로그램을 작성할 것인지, 아니면 처리 결과는 조금 늦더라도 기억 공간을 적게 차지하는 프로그램을 작성할 것인지 선택해야 하는 문제를 마주하게 된다.
따라서 프로그램 수행 시간, 기억 공간의 소요량이라는 두 가지 항목을 절충하는 방안을 항상 생각해야 한다.
적절한 자료 구조를 선택하기 위해서 고려해야 하는 사항은 다음과 같다.
- 자료의 총량(현재 발생량뿐만 아니라 장래의 확장성까지 고려)
- 자료를 사용하는 빈도와 그 사용 방법
- 자료의 성향(정적인가, 동적인가)
- 자료 구조 구현에 필요한 기억 공간의 양
- 하나의 자료를 찾아내는 데 걸리는 시간
- 프로그래밍의 난이도
마무리
자료 구조에 대해선, 학부생 때 배운 지식이 있기에 아는 내용이라고 가볍게 넘어가기 일쑤였다.
하지만 복잡한 자료 구조에 대해 공부하면서 이전 자료 구조에 대한 기본 지식이 기억이 나질 않았고,
복습의 필요성을 느껴, 다시 기본부터 천천히 짚고 넘어가기로 했다.
이 과정에서 그냥 기본 지식이라 생각하고 넘어갔던 부분도 어떠한 복잡한 자료 구조나 알고리즘에 대해 공부할 때, 어떠한 문제를 해결할 때 생각보다 크리티컬하게 작용함을 깨달았다.
공부한 내용을 포스팅함으로써 개념을 확실히 다잡을 생각으로,
가능한 한 정확한 내용과 필요한 내용을 적으려고 노력하자!
또한, 이전에 그래프 자료 구조를 포스팅한 적이 있는데, 웬만하면 상대적으로 기본이라 생각되는 자료 구조부터 순차적으로 업로드하길..
오개념이 있다면 댓글로 알려주시면 감사하겠습니다 :)
References
자료구조(정일)-이경훈,최명세,이윤수 공저
'자료구조' 카테고리의 다른 글
[자료구조] Array(배열) vs List(리스트) (2) | 2021.12.24 |
---|---|
[자료구조] 그래프(Graph)란? (2) | 2021.07.29 |
댓글