컴퓨터로 하는 작업은 대부분이 데이터를 다루는 일임


즉 자료를 받아서 저장하고 처리하고 보내고 삭제하고 하는 작업들이 대다수임


자료구조라는 건 이 자료를 저장할 때 어떻게 저장할까 하는 부분을 다루는 거임


그래서 자료구조의 원리는 당연히 이해해야 하고 컴공 전공생들은 전필로 배우게 됨



예를 들어봄


DB 인덱싱의 원리는 이진탐색임 (해쉬를 사용하는 경우도 있긴 한데 일반적이진 않음)


이진탐색을 통해 원하는 데이터를 빠르게 찾아내자는 게 인덱싱의 핵심 아이디어임


여기서 이진탐색에 가장 적합한 자료구조는 뭘까? 바로 이진트리 구조임


근데 이진트리를 생으로 쓰면 비효율적이니 그걸 개조해서 사용했고 그 결과물이 B+트리임


만약 자료구조를 잘 이해했다면, "N개의 데이터 중 x값이 6 이상인 데이터를 x값 기준으로 정렬해서 가져오고 싶은데, M 번째 자료부터 M+30 번째 자료까지를 끄집어내고 싶다" 같은 쿼리문을 날리면 x값에 인덱싱이 걸려있다고 해도 데이터를 끄집어내는 데 걸리는 시간이 대략 (logN) + M + 30 임을 직관적으로 알 수 있음


왜 그럴까? 왜냐면 B+트리에서는 그 M 번째 데이터가 무슨 데이터인 지 빠르게 알 수 있는 방법이 없거든


이진트리는 기본적으로 비선형 자료구조이니 말 할 필요조차 없고, B+트리는 리프노드에 링크드 리스트 형태로 데이터가 깔려있기는 하지만 결국 링크드 리스트 자체가 M번째 데이터를 가져오려면 O(M)이 걸리는 자료구조이기 때문임


만약 자료구조를 잘 이해하고 있다면 이런 점을 곧바로 파악할 수 있음


하지만 그저 "인덱싱은 데이터를 알아서 잘 끄집어와주는 무언가" 라고만 이해하고 있었다면 이 부분에서 빵꾸가 뚫리는 거임


나중에 M 값에 뭔가 큰 값이 들어갈 일이 있다면 "흠 얘는 M개의 데이터를 스캔하게 될텐데? 이거 괜찮나?" 라는 생각을 할 줄 아는 사람과 그냥 아무것도 모르고 문제의 소지가 될 수 있다는 발상 자체를 못 하는 사람은 결국 응용력에서 차이가 나게 됨