ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자료구조와 알고리즘, 왜 중요할까?
    교육 이야기/고민상담소 2022. 3. 21. 18:00

    *본 글은 이선협 개발자의 <코딩 테스트 광탈 방지 A to Z : JavaScript> 강의 중 일부를 재편집한 글입니다. 자료구조와 알고리즘을 처음 시작하거나 왜 배워야 하는지 고민인 분들에게 답이 되었으면 합니다. 사용하는 언어가 JavaScript가 아니더라도 충분히 도움이 될 거예요!

     

     

    자료구조와 알고리즘은 뭐예요?

    1️⃣ 자료구조? 알고리즘?

    자료구조는 메모리를 효율적으로 사용하면서 데이터를 빠르고 안정적으로 처리하는 것이 궁극적인 목표입니다. 자료구조는 특정 상황에 맞게 유용하게 사용될 수 있도록 만들어져 있기 때문에 어떤 상황에선 느리고 불안정할 수 있죠. 따라서 상황에 맞는 자료구조를 고를 수 있는 능력이 필요합니다. 알고리즘은 특정 문제를 메모리 효율적이고 빠른 성능으로 해결하는 것이 궁극적인 목표입니다. 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것을 말하는데요. 즉 수학적으로 표현할 수 있다는 것을 의미합니다. 알고리즘도 자료구조와 마찬가지로 특정 상황에 유용하게 사용할 수 있지만 적합하지 않은 상황도 존재합니다.

    자료구조는 메모리를 효율적으로 사용하며 빠르고 안정적으로 데이터를 처리하는 것이 궁극적인 목표로 상황에 따라 유용하게 사용될 수 있도록 특정 구조를 이루고 있다. 
    알고리즘은 특정 문제를 효율적이고 빠르게 해결하는 것이 궁극적인 목표로 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것을 말한다.

     

    2️⃣ 요리에 비유해 볼까요. 

    처음 자료구조와 알고리즘을 접한다면 위의 정의만 듣고선 이해가 잘 안 갈 수 있습니다. 요리에 대입해 생각해 볼까요?

    까르보나라를 만든다고 가정해 봅시다. 까르보나라를 만들기 위한 재료를 선택하고 재료를 삶거나 볶을 수 있는 도구가 필요합니다. 그리고 레시피에 따라서 순서대로 요리를 하면 까르보나라가 완성이 되죠. 요리의 과정을 프로그래밍에 대입해 보면 재료는 데이터, 도구는 자료구조, 레시피는 알고리즘이라고 볼 수 있습니다. 결국 개발자는 올바른 데이터와 자료구조 그리고 알고리즘을 골라 소프트웨어를 만들 수 있습니다. 

     

     

    자료구조와 알고리즘이 중요한 이유 

    이제 본론으로 들어가 봅시다. 자료구조와 알고리즘을 배운다는 것은 무엇을 의미하는 걸까요. 다양한 이유가 있지만 세 가지 정도만 꼽아보겠습니다. 

     

    1️⃣ 기초 코딩 능력이 좋아져요.

    실무에서 중요하게 생각하는 요소는 크게 세 가지가 있습니다. 기초 코딩 능력, 전문 분야 지식 마지막으로 CS 지식입니다. 회사에서 추구하는 가치는 다 다를 순 있지만 보통 이 세 가지가 밸런스 있게 잡힌 사람을 원한다고 볼 수 있죠. 여기서 기초 코딩 능력은 자료구조와 알고리즘을 공부하면서 기를 수 있습니다. 우리가 가고 싶어 하는 회사는 특정 프레임워크나 라이브러리에 정통한 사람을 찾지 않습니다. 소프트웨어 세상에서 문제는 계속해서 생기고 달라지기 때문에 회사에서는 문제 해결 능력을 갖춘 상태에서 새로운 기술을 빠르게 습득하고 활용할 수 있는 사람을 찾습니다. 그렇기 때문에 개발자의 기본기가 되어 줄 자료구조와 알고리즘을 공부하면 자연스럽게 기초 코딩 능력도 상승하게 됩니다. 

     

    2️⃣ 한 번 배우면 두고두고 쓸 수 있죠.

    자료구조와 알고리즘을 알아두면 좋은 점은 변하지 않는다는 것입니다. 지금도 최단 거리 알고리즘으로 굉장히 많이 쓰이는 다익스트라 알고리즘(Dijkstra Algorithm)은 1956년도에 만들어졌습니다. 70년이 다 되어 가는데도 현역이죠. 그만큼 자료구조와 알고리즘은 변하지 않기 때문에 한 번 배우면 두고두고 쓸 수 있습니다. 

     

    3️⃣ 실무에서도 쓰여요.

    자료구조와 알고리즘은 특히 코딩 테스트를 위해 많이 준비하는데요. 사실 실무에서도 사용됩니다. 실제 있던 사례를 살펴볼까요? 

    (상황)
    100만 개의 고객 데이터를 최신으로 업데이트하기 위한 배치 작업 필요 

    - 100만 개의 고객 데이터는 CSV로 제공
    - CSV 데이터 중 기존 DB에 없는 고객은 추가
    - CSV 데이터엔 고객 key 값이 없으므로 DB의 여러 필드를 대조해야 함

    (구현)
    100만 개 데이터를 매번 순회하여 고객을 찾은 후 업데이트, 없으면 추가
    →  5일이 넘게 소요

    100만 개의 고객 데이터를 최신으로 업데이트하기 위한 작업이 필요했습니다. 이 데이터는 정제되지 않은 CSV 파일로 제공되었고 심지어 Key가 되는 값도 없어서 일일이 여러 데이터를 대조해서 찾아야 했죠. 이 작업은 단순히 100만 개 데이터를 매번 순회하여 데이터를 찾은 후, 최신으로 업데이트를 하고 데이터가 없으면 추가하는 방식으로 구현을 했습니다. 이런 방식은 단순하고 느린 방식이라고 할 수 있어요. 결국 5일이 넘게 소요되어 다시 로직을 작성해야 했습니다. 

    기존 DB의 100만 개 데이터를 이름을 기준으로 해시 테이블에 기록하였고 동명 이인이 있을 경우 해시 테이블 Value를 링크드 리스트로 데이터를 추가했습니다. 또한, 고객을 찾을 때 이름을 key로 찾은 후 동명이인이 여럿 존재한다면 이진 탐색을 사용하여 해결했습니다. 결과적으로 알고리즘을 활용하여 5일 동안 걸릴 로직을 20분 만에 마칠 수 있도록 크게 성능을 개선했습니다.

    (개선)
    해시 테이블과 링크드 리스트를 이용하여 데이터 구조를 변경 후 이진 탐색 알고리즘 적용
    → 20분 만에 해결 

     

    이처럼 자료구조와 알고리즘이 언젠가는 중요한 순간이 옵니다. 그 언젠가를 위해서 반드시 공부를 하는 것이 필요합니다. 코딩 실력의 기반을 닦아줄 자료구조와 알고리즘을 제대로 배워보고 싶다면 지금 시작해보면 어떨까요?

     

    👉 이선협 개발자의 직강이 듣고 싶다면 바로가기 
    👉  프로그래머스의 자료구조와 알고리즘 강의가 궁금하다면 바로가기 

     

    댓글

Programmers