자료구조 학습) 1. 자료구조를 배우기 전

320x100

자료구조 학습의 시작

안녕하세요.

보통 프로그래밍 언어를 1~2개 익히시고, 조금 다뤄본 뒤에 '다음엔 뭐 공부해야 하지?'라고 하면 나오는 게 아마 대부분 자료구조 및 알고리즘일 것입니다.

자료구조 및 알고리즘은 괜찮은 기업들의 코딩 테스트를 위해서 필수적으로 익히셔야 할 내용입니다. 굳이 취업이 아니더라도, 프로그래머를 평생 직업으로 삼고자 한다면, 언젠가 반드시 알아야 할 사항이니 이번 기회에 꼭 익히시길 바랍니다.

사람에 따라 다르긴 하겠지만, 저 같은 경우에는 프로그래밍 언어를 익히고 충분히 활용해보지 않았는데 자료구조 및 알고리즘을 배울 때 조금 어렵긴 했으나, 그나마 정리된 개념들을 쉽게 다루고자 노력하려고 합니다.

참고로, 이 글에서는 자료구조의 깊은 부분은 제외하고 필수적으로 알아야 할 개념들에 대해서만 요약하는 형식으로 다루고자 합니다.

 

자료구조의 의미와 필요성

자료구조는 이미 많은 사람들이 유용하다고 여기는 '데이터를 저장하는 방법'들을 모아놓은 것이 자료구조입니다.

프로그래밍 언어를 익히시면서 모두 배열을 배우셨을 거라고 생각해요.

배열도 자료구조 중에 하나이며, 메모리 내 특정 주소에 데이터를 나란히 저장을 하는 자료구조입니다.

그리고 배열을 생성했을 때는, 힙 영역에 다음과 같이 저장이 됩니다.

이와 같이 만들어진 배열 안에 여러 가지 값들을 넣어두고, 이후 다시 사용하는 형식으로 우리는 배열을 사용하고 있었죠.

현재까지 많은 데이터를 다뤄보시지 않았다면 배열을 사용하면서 큰 불편함을 느끼시지는 못했겠지만, 실무에서 여러 데이터를 다루다 보면 배열이 적절하지 않은 경우가 많습니다.

굳이 실무까지 가지 않더라도, 아래와 같은 배열이 있다고 가정해 봅시다.

이 상황에서 하나의 문제를 드려보겠습니다.

Q. 어떤 학급에서 위와 같이 4명의 학생이 존재를 하는데, '아무개'라고 하는 친구가 전학을 간다고 합니다. 아무개는 더 이상 같은 반 친구가 아니기 때문에 해당 이름을 빼야 하는데, 어떻게 해야 할까요?

 

대답은 여러 가지 나올 수 있습니다.

크게 나올 수 있는 대답이 다음과 같다고 생각해요.

1. 아무개가 저장된 인덱스에 공백을 넣는다.

2. 이름을 한 칸씩 땡겨온 다음에 마지막 인덱스에 공백을 넣는다.

3. 배열을 아예 다시 만들어서 아무개를 제외한 나머지 세 명의 이름을 넣는다.

 

하지만, 3가지 방법 모두 문제가 존재합니다.

1. 아무개가 저장된 인덱스에 공백을 넣는다.

-> 다음에 학급 인원 전체를 조회할 때, 첫 인덱스부터 조회하지 못한다.

2. 이름을 한 칸씩 당겨온 다음에 마지막 인덱스에 공백을 넣는다.

-> 배열을 한칸씩 당겨오는 만큼 그만큼의 연산이 추가적으로 소요되며, 전체 배열의 길이와 실제로 있는 학생의 수가 다르기 때문에 실 인원의 수에 대한 변수를 따로 카운팅해야 하여 번거롭다.

3. 배열을 아예 다시 만들어서 아무개를 제외한 나머지 세 명의 이름을 넣는다.

-> 공간과 연산이 추가적으로 소요되며, 비슷한 작업이 생길 때마다 너무 많은 연산이 필요할 수 있다.

 

자료구조 중 배열 리스트라는 자료구조가 존재하는데, 이 자료구조를 사용하면, 이를 다음과 같은 작업 한 번만으로 해결할 수 있습니다.

'아무개'가 있는 인덱스를 삭제한다.

간단하죠. 추가적인 공간을 소요하지도 않고 간단하게 해결할 수 있습니다.

이 예시처럼 반 친구들이 4명밖에 안된다면 추가적인 연산 좀 할 수 있고, 추가적으로 변수나 객체들을 좀 생성할 수 있겠지만, 그 수가 많아지고 이름뿐 아니라 다른 여러 가지 것들도 관리해야 할 필요가 있다면 가능한 적게 변수나 객체를 생성하고, 연산을 줄여 그에 소요되는 시간과 코드 길이를 줄이도록 해야겠죠.

 

이처럼 용도에 따라 활용할 수 있는 자료들을 저장할 수 있는 효율적인 방법들을 공부하고 활용하기 위한 것이 바로 자료구조의 학습입니다. 또, 알고리즘을 배우기 전 자료구조의 학습이 필수인 이유는 '이 자료구조들을 활용하여 어떤 문제를 어떤 자료구조들을 적용하여 어떻게 풀 것인가'를 고민해야 하기 때문입니다.

 

정리

자료구조는 '데이터를 저장하는 방법'들을 공부하는 학문이며, 프로그래밍 언어 공부 시 배웠던 배열에서는 그 한계가 명확하기 때문에 실무에서는 여러 가지 자료구조들을 활용한다. 그리고 프로그래머가 되기 위해서는 당연히 이 자료구조들을 알고 있고, 적재적소에 어떤 자료구조를 사용하면 될지 판단하고 활용해야 하기 때문에 자료구조 공부는 필수적이다.

 

다음에는 자료구조를 공부하기 위해 필수적으로 알아야 하는 것들에 대해 알아보겠습니다.

320x100