[자료구조] 자료구조의 개요, 특징, 분류
자료구조의 개요, 특징, 분류
1. 자료, 정보, 자료구조
(1) 자료와 정보
자료(data)란 현실 세계로부터 수집한 사실이나 개념의 값 또는 이들의 집합을 의미한다.
흔히 가공되지 않은 형태의 데이터를 자료라고 하며 특정한 용도로 사용하기 위하여 자료를 처리/가공한 형태의 데이터를 정보(information)라고 한다.
(2) 자료구조
자료구조(data structure)란 자료의 집합을 의미하며 각 원소들 사이의 관계가 논리적으로 정의된 일정한 규칙에 의하여 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 조직적, 체계적으로 구분하여 표현한 것을 말한다.
(3) 자료구조의 선택 기준
작업의 효율성, 추상화, 재사용성을 증가시키기 위하여 상황에 따른 적절한 자료구조를 선택하여 사용해야 한다.
자료의 처리를 좀 더 효율적으로 하기 위하여 아래의 사항을 고려해야 한다.
- 자료의 처리시간
- 자료의 크기
- 자료의 활용 빈도
- 자료의 갱신 정도
- 프로그램의 용이 성
2. 자료구조의 특징
(1) 효율성(Efficiency)
상황에 맞는 알고리즘을 사용하여 자료를 구조화 시키기 때문에 효율적으로 동작한다.
예를 들어 모든 사원에 대해 사번과 이름의 쌍을 배열이라는 자료구조로 만들었을 때 사번을 가지고 이름을 찾을 경우 배열은 인덱스를 이용하여 데이터를 저장하기 때문에 찾으려는 사번이 첫번째 인덱스에 저장되어 있을 경우 한번의 검색으로 찾을 수 있지만 최악의 경우 제일 마지막 인덱스에 위치할 수 있으므로 데이터의 수만큼 검색을 해야 한다.
평균적으로 자료수/2 만큼의 검색을 해야 하므로 데이터를 찾는 작업이 빈번하고 데이터가 많을 경우 그다지 효율적이지 못하다. 이럴 때에는 해시 테이블과 같은 자료구조를 이용하여 좀 더 빠르게 검색 작업을 할 수 있다.
이처럼 상황에 맞는 적절한 자료구조를 이용하게 되면 데이터 처리의 효율을 높일 수 있다.
(2) 추상화(Abstraction)
추상화란 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려내는 것을 말한다.
자료구조를 이용하여 데이터를 처리할 경우 처리할 데이터를 어떻게 삽입하고 어떻게 추출할 것인가에 중점을 두지 않는다. 즉, 자료구조 자체를 구현하는 알고리즘에 중점을 두지 않고 어느 시점에 데이터를 삽입할 것이며 어느 시점에 데이터를 추출하고 이러한 데이터를 어떻게 사용할 것인지에 초점을 맞출 수 있기 때문에 프로그램의 비즈니스적인 요소에 좀 더 시간을 할애할 수 있다.
데이터를 처리하는 관점에서 보면 특정 자료구조 자체의 내부 구현은 그리 중요하지 않기 때문에 어떻게 구현했는지 보다 어떻게 사용하는지에 대해서 알고 있으면 된다.
예를 들어 스택(Stack)의 경우 가장 마지막에 삽입한 데이터를 가장 먼저 꺼내는 자료구조이고 push(), pop() 메소드를 통해서 데이터를 삽입하고 꺼낼 수 있다.
그리고 이러한 자료구조의 추상화는 실제 구현한 언어가 무엇인지에 따라 실제 그 코드는 다르지만 추상적인 개념에 대해서만 알고 있으면 되기 때문에 언어에 종속적이지 않다는 특징을 가진다.
(3) 재사용성(Reusability)
자료구조를 이용하여 데이터를 처리할 경우 해당 자료구조의 인터페이스만 이용하여 데이터를 처리하도록 하므로 모듈화가 가능하다. 이는 자료구조를 설계할 때 특정 프로그램에 맞추어 설계하지 않고 다양한 프로그램에서 사용될 수 있도록 범용화하여 설계함으로써 가능하다.
3. 자료구조의 분류
자료구조는 크게 선형 구조와 비선형 구조로 나눌 수 있다.
선형 구조는 자료가 일렬로 연결되어 있는 형태로 구성하는 방법이고 비선형 구조는 자료의 구성이 일렬이 아닌 특별한 형태를 띠는 구조이다.
(1) 선형 구조
- 배열
- 연결 리스트
- 스택
- 큐
- 데크
(2) 비선형 구조
- 트리
- 그래프
출처: https://hyeonstorage.tistory.com/256?category=578561 [개발이 하고 싶어요]
'기타 정보 > 자료구조' 카테고리의 다른 글
[자료구조] Java 원형 큐(Circular Queue), 우선순위 큐(Priority Queue), 데크(Deque-double ended queue) (0) | 2019.08.06 |
---|---|
[자료구조] Java 큐(Queue) 정리 (배열, 연결리스트) (0) | 2019.08.06 |
[자료구조] Java 스택(Stack) 정리 (배열, 연결 리스트) (0) | 2019.08.06 |
[자료구조] Java 이중 연결 리스트 (doubly linked list) 정리 (0) | 2019.08.06 |
[자료구조] Java 이중 말단 연결 리스트(double ended linked list) 정리 (0) | 2019.08.06 |
[자료구조] Java 단순 연결 리스트(simple linked list) 정리 (0) | 2019.08.06 |
[자료구조] Java 배열(array)과 리스트(list) 비교 (0) | 2019.08.06 |
[자료구조] JAVA 배열을 이용한 자료의 관리 (0) | 2019.08.06 |