* 본포스팅은 <쉽게 설명한 자바스크립트 알고리즘>에서 발췌한 내용으로 작성되었습니다.
아마도 현 시대에서 알고리즘(Algorithm)이라는 단어를 가장 많이 접하고, 들을 수 있는 곳은 다름 아닌 ‘유튜브’일 겁니다. ‘유튜브 알고리즘 신이 택하면 조회수가 떡상한다.’라는 말도 있고, ‘알 수 없는 알고리즘 때문에 갑자기 내 조회수가 떨어졌다.’라고 하면서
유튜브 알고리즘을 탓하는 유튜버들도 있습니다.
이처럼 알고리즘은 주변에서 쉽게 들을 수 있는 단어가 됐지만 동시에 ‘알고리즘이 정확히 무엇을 말하는가?’ ‘알고리즘의 정의는 무엇인가?’와 같은 질문을 하면 답하기 쉽진않습니다. 알고리즘의 사전적인 정의로 ‘주어진 문제를 논리적으로 해결하기 위해 필요
한 절차, 방법, 명령어들을 모아놓은 것’이라는 것을 알 수 있습니다. 그러나 프로그래밍 관점에서 개념을 확장해본다면 프로그래밍 자체가 곧 알고리즘과 같습니다.
아마도 이 책을 보시는 분들은 Hello world!와 같은 프로젝트를 적어도 한 번은 해보셨을겁니다. 자바스크립트에서 Hello world!를 만드는 방법을 적어볼까요?
코드 1-1을 실행시키면 콘솔에 Hello world! 문자열이 나타납니다. 굉장히 단순한 프로그래밍이지만 사실 이렇게 단순해 보이는 코드 1-1의 한 줄도 알고리즘이라 할 수 있습니다. 여기서 프로그래밍을 하기 위해 주어진 문제와 해결 방법은 다음과 같습니다.
해결하고자 하는 문제: “Hello world!” 문자열을 출력
해결하는 방법: 전역 메서드 console.log를 사용하여 문자열 반환
만약 위의 문제를 해결하는데 자바스크립트 언어에서 console.log 메서드가 존재하지 않는다면 어떻게 해야할까요? 아마도 우리는 자바스크립트의 다른 기본 기능들과 문서를 찾아가면서 여러 코드를 작성해 동일한 기능을 구현할 것입니다. 즉, 개발자가 쓰는 코
드 한 줄 한 줄은 사실상 알고리즘(특정 문제를 해결하기 위한 명령어의 집합)과 같습니다.
여러분은 이제 그동안 썼던 모든 코드가 알고리즘이라는 걸 아셨습니다. 동시에 앞으로 써야 할 모든 코드 역시 알고리즘이라는 것을 아시게 된 셈입니다. 앞선 예시를 조금 바꿔보겠습니다. 여러분은 “Hello” 다음에 여러분의 모든 친구 이름을 넣어 반환해야 한다면 어떨까요? 가장 단순한 방법은 다음과 같습니다.
위와 같이 친구의 이름을 하나하나 적으면 문제는 해결할 수 있습니다만 필자와 다르게 친구가 수백 명이 있다면 어떻게 해결할 수 있을까요? 수백 줄의 텍스트를 일일이 작성하는 건 그 누구도 원하지 않을 겁니다. 친구 목록을 배열로 받아 자바스크립트의 for 반
복문을 써보면 다음과 같이 해결할 수 있습니다.
코드 1-3과 같이 사용하면 친구의 이름만 배열로 담아 반복문을 통해 수백, 수천, 수만명도 코드 4줄로 해결할 수 있습니다. 그렇지만 이 반복문을 더 개선해 볼 수 있을까요?
자바스크립트 배열의 프로토타입 메서드인 forEach를 사용하면 배열을 순회하며 반복 명령을 실행할 수 있습니다. 이렇게 하면 불필요하게 for 반복문에 사용될 i와 같은 변수 선언도 할 필요가 없어집니다. 또한 가독성도 개선됩니다.
코드 1-4는 성능보다는 개발자의 편의성과 가독성을 위해서 개선한 코드지만 넓은 범주에서는 더 나은 형태로 문제를 해결하는 알고리즘이라 할 수 있습니다. 특히 자바스크립트 언어에서 알고리즘 문제를 해결할 때는 많은 경우 자바스크립트에서 기본적으로 제
공하는 자료형의 메서드를 사용해 문제를 해결합니다. for, while과 같은 반복문을 사용해 문제를 해결하는 경우도 있지만 Array의 프로토타입 메서드를 사용하거나 Object, Set과 같은 자료형의 메서드를 사용해서 해결하는 경우가 대부분입니다.
바꿔 말하면 과거에는 수십 줄에 걸쳐 코드를 작성해야 구현할 수 있는 코드가 자바스크립트 언어에서 제공하는 하나의 메서드로 해결할 수 있습니다. 그러므로 자바스크립트를 사용하여 알고리즘을 공부한다는 것은 알고리즘에 대한 이해뿐만 아니라 자바스크립트가 가진 여러 강력한 메서드들을 알고, 이해하고, 실제 코드 작성 시에 적재적소에 사용할 수 있는 능력을 키워야 합니다.
앞의 코드 forEach와 다르게 신규 배열을 만들어야 하는 경우를 생각해 보면 더욱 선명하게 차이가 나타납니다. 이번에는 필자가 만든 친구 배열에 모두 ‘김’이라는 성씨를 붙인 배열을 만들고 싶습니다. 반복문과 메서드의 차이점은 무엇이 있을까요?
반복문을 사용하는 경우 newFriends라는 신규 배열을 만들고 해당 배열에 푸시하는 과정을 반복합니다. 그러나 실제 개발자들의 대부분은 앞의 코드처럼 개발하기보단 Array.prototype.map( ) 메서드를 사용합니다.
이처럼 자바스크립트 메서드는 그 자체로 알고리즘을 담고 있는 함수입니다. 복잡한 명령을 간결하게 만들어주고, 간결해진 명령만큼 개발자는 알아보기 쉽고, 맥락을 이해하기 쉽고, 어떤 동작을 할지 예상하기 쉽게 만듭니다.
《쉽게 설명한 자바스크립트 알고리즘》
'IT 정보' 카테고리의 다른 글
[자바스크립트 알고리즘] 빅오 표현법과 시간 복잡도 (0) | 2024.08.29 |
---|---|
[테라폼 쿡북] 테라폼 프로바이더 업그레이드하기 (1) | 2024.08.20 |
[테라폼 쿡북] 테라폼 내장 함수 호출하기 (0) | 2024.08.14 |