개요
'자료구조'라는건 엄청나게 중요한 개념입니다.
프로그래밍에 조금이라도 발을 담궈보았다면 누구든 공감할 내용이죠.
프로그래밍에 소견이 없더라도 실생활에서도 여러가지 자료구조를 발견해낼 수 있습니다.
그래서 자료구조란게 뭐냐구요?
자료구조란?
결론부터 한마디로 정리하고 가자면,
자료구조란, 어떠한 데이터의 집합을 효율적으로 관리, 처리하는 방법
이라고 할 수 있습니다.
이 자료구조를 왜 사용해야 하냐 묻는다면 딱히 해줄 말이 없습니다.
애초에 제가 역으로 묻고 싶어요. 어떻게 자료구조를 사용하지 않고 코딩을 하죠?
실생활에 빗대봅시다.
여기 책이 하나 있습니다.
저희가 이 책들을 효율적이게 정리하려고 하면 어디에다가 담아야 할까요?
...네 그렇죠. 책장에 담아야겠죠?
이 책장이 코딩에서의 자료구조입니다.
...네 이게 끝이에요.
저희가 만약 책장을 사용하지 않고 책을 보관한다고 해봅시다.
그러면 어디 상자 같은 곳에 담거나 뭐 어디 쌓아놓거나 해야겠죠?
그렇게 된다면 책장에 비해서 책의 제목을 보거나 중간에 있는 책을 꺼냈다가 넣고 하기 너무 불편하겠죠?
근데 애초에 상자도 자료구조고 어디 쌓아 놓는 것도 사실상 자료구조라서 실생활에서 자료구조를 사용하지 않는건 불가능합니다.
뭔가 자료구조라니까 생소하긴 한데 말이 그렇단거에요.
아무튼 이러한 자료구조를 코딩에서 사용하지 않는다면 상당히 큰 문제가 발생합니다.
왜 씀?
만약 저희가 전자 도서관을 만들어야 한다고 칩시다.
도서관 안엔 책이 많아야겠죠?
class Book
{
public:
string title;
string author;
string publisher;
string content;
};
뭐 대충 이런 클래스를 만들어서 책들을 관리하다고 해봅시다.
만약 자료구조를 쓰지 않으면 일단 이 책들 하나하나를 모두 각각의 변수에 담아 관리해야 하고 만약 제가 어떠한 책을 제목으로 찾으려 시도 한다면 각각의 변수를 모두 하나씩 뒤져봐야 한다는 아주 아주 큰 단점이 존재합니다.
아무래도 전자 도서관이다 보니 원하는 책을 찾는 검색이 있어야겠죠?
제가 만약 제목으로 책을 찾을 수 있는 코드를 적는다고 해봅시다.
bool isMyBook(Book book, string title)
{
return book.title == title;
}
이러한 함수를 만들어 관리한다 하더라도 책이 하나 추가될때마다 제목 검색 함수의 줄은 계속해서 늘어날겁니다.
Book firstBook = Book("제목", "작가", "내용");
Book secondBook = Book("제목", "작가", "내용");
Book thirdBook = Book("제목", "작가", "내용");
Book TitleSearch(string title)
{
if(isMyBook(firstBook, title))
return firstBook;
if(isMyBook(secondBook, title))
return secondBook;
if(isMyBook(thirdBook, title))
return thirdBook;
}
만약 책이 10000권이라면 제목 검색 함수의 길이만 20000줄이 되는 SOLID 원칙따위 개나줘버린 굉장한 소스코드가 되겠죠.
근데 이게 제목 검색 함수만 그러겠습니까? 뭐 작가 검색, 이거저거 다 하면 그냥 미쳐버립니다.
그래서 저희는 자료구조를 사용하죠.
저런 쓸데없는 짓거리를 안하기 위해서요.
#define MAXIMUM_BOOK_COUNT 10000
Book* books = new Book[MAXIMUM_BOOK_COUNT];
for(int i = 0; i < MAXIMUM_BOOK_COUNT; i++)
{
if(isMyBook(books[i], 대충 내가 찾을 제목))
{
return books[i];
}
}
코드가 훨 낫죠?
물론 이런식으로 색적하진 않을겁니다. 너무 비효율적이에요.
아무튼 이런식으로 데이터를 효율적이게 관리할 수 있도록 사용합니다.
마치는 말
무려 이 글만 2주를 적었습니다.
그만큼 내용에 공을 들였냐 하면 그건 또 아닙니다.
아마 30분 정도 쓰지 않았을까요? 여러모로 참... 이상해요.
아무튼 다음 글은 Stack에 대해 적겠습니다. 감사합니다.