어느정도 프로그래밍을 하다보면 만나게 되는말 '자료구조'. 자료구조는 컴퓨터 공학에서 중요한 개념을 가지고 있기 때문에 다시 정리해보고 공부해 보고자 하여 카테고리를 신설하게 되었습니다.
물론 카테고리는 자료구조로 되어있긴 하지만, 자료구조를 하다보면 따라오는 부분이 알고리즘 부분이기도 해서 자료구조와 알고리즘을 함께 소개하게 되지 않을까 합니다.
1. 자료구조 소개
자료구조는 자료(데이터)를 효과적으로 효과적으로 표현하고 효율적인 저장과 처리하도록 하는 논리적 구조를 이야기 합니다. 자료구조에는 선형, 비선형, 파일, 단순구조가 존재합니다.
선형구조 | 리스트 |
스택 | |
큐 |
비선형구조 | 트리 |
그래프 |
파일구조 | 순차파일 |
색인파일 | |
직접파일 |
단순구조 | 정수 |
실수 | |
문자 | |
문자열 |
시중에 나와있는 책이나 여러 글들을 보면 선형구조인 리스트, 스택, 큐/ 비선형 구조인 트리, 그래프를 다루고 있습니다. 마찬가지로 이 카테고리에서도 이 구조들을 중점으로 써내려갈 생각입니다.
이렇게 여러개인 자료구조 중에서는 어떤것이 제일 좋고, 무엇을 써야할까요 라는 생각이 듭니다. 이 질문에 대한 정답은 '상황마다 다르다' 입니다. 이것이 우리가 자료구조를 공부해야하는 이유라고 생각합니다. 자료구조는 언급했듯이 자료의 효율적인 저장과 관리, 처리를 위해서 라는 목적을 가지고 사용하게됩니다.
2. 자료구조의 선택
그렇다면 위의 목적에 부합하게 자료구조를 선택하는 기준은 무엇일까요. 보통 다음과 같은 기준을 가지고 자료구조를 선택하게 됩니다.
- 자료의 처리 시간
- 자료의 크기
- 자료의 활용 빈도
- 자료의 갱신 정도
- 프로그램 용이성
3. 자료구조 특징
■ 효율성
계속 언급한 자료구조의 목적인 자료의 저장, 처리, 관리를 위해서라면 당연히 효율이 중요하겠죠. 그래서 상황에 맞는 구조를 이용하는 것은 효율을 높이는 방법이 됩니다. 경험담으로는 코딩테스트 사이트에서 문제를 풀다가 정답은 맞췄지만 시간초과가 뜨는 경우가 빈번했는데요. 이럴때마다 다른 자료구조로 교체해서 프로그램을 작성하니 해결된 경우가 많았습니다. 이처럼 자료구조마다 상황에 맞는 구조가 존재하기에 그 효율성을 따져보고 사용해야합니다.
■ 추상화
추상화는 어떤 개념을 구체적으로 나타내기 보단 핵심이 되는 부분만을 추려내는 것 입니다. 구현에 대해서는 사람마다 다르게 구현되기 때문에 그 부분에 대해서는 무시하고, 이 구조가 어떻게 동작하고 사용되는지에 초점을 맞춥니다. 그래서 이 구현법이 정답이다~라기보다는 이 구조가 이렇게 동작하니까 이렇게 사용하면 되겠구나~에 대해 집중하는 것이 중요합니다.
■ 재사용성
이것은 자바같은 객체지향 프로그래밍에서도 등장하는 원리인데 보통 한 코드를 작성하면 한 프로그램에서만 가동되도록 작성하지 않습니다. 그렇지 않는다면 효율이 매우 떨어지겠죠. 자료구조도 마찬가지 입니다. 모든 자료를 처리할 수 있어야 하므로 다른 프로그램에서도 동작한다는 재사용성 특징을 가지고 있습니다.
제가 전공을 해오면서 가장 많이 해멘 부분이 이 자료구조 였습니다. 알고리즘과 관련되있기도 하고, 쉬우면서도 어려운 이 부분에 대해서 다시 한 번 정리하려고 합니다.
자료구조를 JAVA 언어로 다룰 예정입니다.
참조
https://andrew0409.tistory.com/148
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0
C로 배우는 쉬운 자료구조 개정3판 - 이지영 지음/ 한빛아카데미
https://www.hanbit.co.kr/store/books/look.php?p_code=B7355732474
Do it! 자료구조와 함께 배우는 알고리즘 입문 - 보요 시바타 지음, 강민 옮김/이지스퍼블리싱
http://www.easyspub.co.kr/20_Menu/BookView/299/PUB
'Programming > 자료구조' 카테고리의 다른 글
자료구조 다시 시작하기 (0) | 2021.08.27 |
---|---|
[Data Structure] 연결 리스트 구현 (0) | 2021.06.28 |
[Data Structure] 연결 리스트(Linked List) (0) | 2021.06.25 |
[Data Structure] 선형 리스트 (Linear List) (0) | 2021.06.24 |
[Data Structure] 리스트 (List) (0) | 2021.06.24 |
댓글