자료구조 학습) 3. 자료구조의 종류와 특징

320x100

개요

안녕하세요, Readder입니다.

 

이전에 말씀드렸듯이, 자료구조는 간단히 말해서 데이터를 저장하는 공간이에요. 현실 세계로 예로 들자면 책을 보관하는 도서관, 옷들을 보관하는 옷장처럼 프로그래밍에서 어떤 데이터를 저장하기 위한 공간으로 자료구조라고 하는 거죠.

 

다만, 우리는 프로그래머로서 데이터들을 대충대충 저장하는 것이 아니라, 올바른 용도에 좋은 효율로 저장해야죠. 그리고 이미 똑똑한 선배 프로그래머, 관련 학자 분들이 정립한 자료구조가 있고, 일반적으로 이 목록들을 자료구조라고 합니다. 그러니까, 자료구조는 정의상으로는 데이터를 저장하는 공간이지만, 실제 사람들이 자료구조를 아느냐고 물을 때는 학자와 프로그래머들이 대표적으로 정의한 자료구조들에 대해 아느냐고 묻는 거죠.

 

자료구조의 종류와 특징

우리는 일반적으로 자료구조를 크게 2가지로 나뉩니다. 선형과 비선형 자료구조로요. 선형/비선형으로 나누는 기준은 데이터가 저장되는 방식입니다. 배열로 예를 들어 볼게요. int[] arr = {1, 2, 3, 4, 5};위의 배열을 선언했을 때, 메모리에 다음과 같은 형태로 배열이 저장됩니다.

왼쪽부터 오른쪽으로 순서대로 하나의 선처럼 저장되고 있는 게 보이실 겁니다. 이렇게 하나의 선으로 쭉 저장되는 자료구조를 선형 자료구조라고 합니다.

 

다음은 비선형 자료구조입니다.

비선형 자료구조를 대표하는 트리라는 자료구조가 있는데요, 트리는 다음의 형태로 저장이 됩니다.

선은 선이지만, 하나의 선이 아니라 굉장히 많은 선들이 밑으로 나아가고 있죠. 이렇게 하나의 선이 아니라, 여러 가지 선으로 나아가는 형태의 자료구조를 비선형 자료구조라고 합니다.

 

선형 자료구조의 종류로는 대표적으로 배열, 리스트, 스택, 큐 등이 있고요,

비선형 자료구조의 종류로는 대표적으로 트리, 그래프 등이 있습니다.

 

일반적으로 선형 자료구조가 비선형 자료구조보다 배우기 수월하고, 쉽다고 여기고 있고, 선형 자료구조까지는 잘 따라오시다가 비선형 자료구조를 배우기 시작할 때 하차하시는 분들이 많습니다.

 

가능한 그런 분들이 적게끔 최대한 쉽게 설명드리고자 노력해볼게요.

 

각 자료구조별로 반드시 익혀야 할 것

다음 포스팅부터는 대표적인 선형 자료구조들을 설명드릴 예정입니다. 선형 자료구조들을 마친 뒤에는 비선형 자료구조를 설명드릴 거고요.

자료구조들을 익히실 때, 반드시 익히셔야 하는 부분들이 몇 개 있습니다. 단순히 흘러가는 대로 학습하는 것보다, 이 부분들에 대해서 반드시 익히겠다는 마음을 갖고 익히시는 것이 훨씬 도움이 될 거예요. 실제로 면접이나 실무에서 자료구조 관련해서 이 부분이 중요하기 때문에.

 

자료구조 학습의 핵심

1. 각 자료구조별 저장 방법

2. 각 자료구조별 활용도

3. 각 자료구조별 시간 복잡도

 

위 3가지가 자료구조의 핵심입니다. 이 3가지는 자료구조 학습의 핵심이고, 자료구조를 실제 사용함에 있어 가장 중요한 것은 실무에서 어떤 데이터를 저장하고자 하는데, 이 데이터들을 가장 효율적으로 저장하는 방법은 무엇인가입니다. 이를 위해 학습 시 반드시 구분하셔야 하는 것이 위 3가지인 거죠.

 

예를 들어 볼까요. 한 음식점에서 식자재를 관리한다고 해봅시다. 그리고 식자재는 기본적으로 선입선출. 무언가 필요해서 자재를 꺼내려고 할 때 먼저 들어온 자재가 먼저 사용되어야 합니다.

이때 사용될만한 자료구조로 큐(Queue)라는 자료구조가 존재해요. 사용 방법도 굉장히 간단합니다.

Queue<String> que = new LinkedList<>();
que.offer("양배추 2022-03-04 16:34:17");
que.offer("양배추 2022-03-05 19:01:12");
que.offer("양배추 2022-03-06 09:11:58");

System.out.println(que.poll() + "사용");
System.out.println(que.poll() + "사용");
System.out.println(que.poll() + "사용");

간단한 예제입니다. 참고로 저희가 배울 자료구조의 대부분은 자바의 util 클래스 안에 라이브러리로 존재합니다.

클래스 사용 방법이나 메소드 목록은 나중에 천천히 알아보기로 하고, 대략적으로 위 코드를 보았을 때 다음의 동작을 하는 코드라는 것을 아실 겁니다.

1. 큐 자료구조 생성

2. 큐 자료구조에 식자재가 들어온 순서대로 삽입

3. 큐 자료구조에 있는 식자재 데이터를 하나씩 꺼내기

위 코드를 실행하면, 다음과 같은 결과가 출력됩니다.

 

이와 같이, 여러 가지 자료구조들 중에서 현재 자기가 관리하려는 데이터에 맞는 자료구조를 골라 사용할 수 있는 것이 자료구조 학습에서 가장 중요한 부분이며, 면접에서도 데이터의 특징에 따라 어떤 자료구조를 사용할 수 있는 사람인가를 묻는게 면접 질문의 핵심입니다. 그리고 이를 위해서는 위에서 말씀드린 자료구조 학습의 핵심 3가지를 반드시 구분할 수 있어야 하는 거고요.

 

정리

자료구조는 크게 종류가 2가지 있다고 말씀드렸습니다. 선형 자료구조와 비선형 자료구조.

이 구분은 데이터가 저장되는 방식이 하나의 선처럼 연결되어 있느냐, 여러가지 선으로 연결되어 있는 형태인가에 따라 나뉜다고 말씀드렸고, 자세한 자료구조의 종류는 다음 챕터에서 설명드린다고 했습니다.

또한, 자료구조 학습의 최종적인 핵심은 특정 데이터를 저장할 때 어떤 자료구조를 사용해야 하는지 판단할 수 있는 능력을 기르는 것이 가장 중요하다고 말씀드렸습니다. 그리고 이를 판단할 수 있게 되기 위해서는 각 자료구조별 저장 방법, 시간 복잡도, 활용도를 아셔야 한다고 말씀드렸고요.

 

여기까지만 이해해 주시고, 다음 챕터에서 뵙겠습니다.

320x100