허수아비, 몇 개?

더코알라

by 둘리

내가 코딩을 배우면서 계속 어렵다고 느끼는 부분들이 있다.


먼저 코드를 설계하는 데 있어서 가장 기초가 되는 알고리즘이다. 사실 나는 이게 가장 어렵다고 느끼고 있다. 이전 글에서 몇 번이고 언급했던 것처럼 코딩에서 알고리즘 설계는 가장 중요한 부분이다. 어떤 문제에서 내가 어떻게 코드를 짤 건지를 구상하는 단계이기 때문에 이것이 잘못되면 코드를 짜는 내내 벽에 부딪힐 수 있다. 한 마디로 기초공사같은 느낌이다.


예를 들면 이런 문제가 있을 때, 과연 우리는 무슨 생각을 먼저해야할까? 우리는 나이가 입력이 되었을 때 그 나이 값에 맞는 요금이 출력이 되도록 만들어야 한다. 예로 15살이 입력이 되면 7000이 출력이 되고 13살이 입력이 되었을 때 5000이 출력이 되어야 하는 것이다.


먼저 우리는 나이를 입력할 수 있는 변수를 만들어줘야하고 그 변수를 각각 7세이하, 8-14세, 14-19세, 20세 이상이라는 조건과 비교를 해줘야한다. 그리고 특정 구간에 부합할 경우 그에 맞는 결과를 출력하게끔 하는 코드를 짜야한다. 이것이 알고리즘 설계이다. 사실 이 문제같은 경우에는 좀 쉬운 편에 속해서 크게 어렵다고 느끼지는 않을 수 있다. 하지만 대게 보면 이런 문제들을 보고 다음과 같은 알고리즘을 도출하는 것이 실상 어렵다. 변수를 몇 개를 둘 것이며, 어떤 함수를 써서 어떤 순서로 배치를 하여 결과값을 낼 것인지 구상하는게 쉽지가 않다는 것이다. 나는 그중에서 변수를 몇 개 두어야 할 지 고르는 것이 너무 어렵게 느껴진다.


먼저 여기서 용어를 간략히 짚고 넘어갈 필요가 있다. 변수는 흔히 말해서 a,b,c 같은 느낌이라고 생각하면 된다. 우리가 누구에게 이야기를 설명을 할 때 a,b,c를 들어서 설명할 때가 많다. 'a라는 사람이 있었는데 그 친구인 b 한테 무슨 말을 했고 그 동생 c한텐 이렇게 이야기를 전달해줬다.' 이런식으로 우리는 가상의 기호를 넣어서 사람들이 쉽게 이해하도록 말하는 경우가 많다.


이처럼 변수도 똑같은 개념이다. 코드를 짤 때 내가 만든 변수라는 허수아비들에게 각각의 역할을 부여해주는 것이다. 위의 문제도 내가 'age' 라는 변수를 만들어주고 그 변수를 각 조건에서 비교한 다음 결과를 출력하게끔할 수 있다. 여기서 변수를 만들어 준 이유도, 특정 나이를 받고 조건에서 비교를 당하는 당사자가 필요하기 때문에 만든 것이다. 그럼 나는 왜 변수를 두는 것이 가장 어렵다고 느끼는 걸까?


실상 이름을 붙여주고 허수아비를 세우는 것에 그치는 것일텐 데 말이다.



이것이 내가 코딩이 어렵다고 느끼는 두 번째 이유이기도 하다. 사실 코드를 짜는 데 있어서 변수를 몇 개 두는 지는 결과를 내는 데 있어서 중요하면서도 중요하지 않을 수 있다. 이게 과연 무슨 말일까?


예를 들어 생각해보자. 우리가 누군가에게 이야기를 설명할 때 a,b,c,d 등 많은 인물들을 가상으로 나열해놓고 설명을 하다보면 본인도 그리고 상대방도 헷갈릴 때가 종종 있다. '걔가 아까 너가 말했던 b 지?' 이런 말들이 나오는 것이다. 그리고 이야기가 진행될 때 복잡하게 서사가 얽히면 누가 누군지 이해하기가 더 어려워진다. 그러다 중간에 잘못 이해하기 시작하면 이야기가 다르게 전달되어버릴 수도 있다. 이처럼 코딩도 마찬가지이다.


코딩에서 변수를 몇 개를 두든 결과가 맞기만 하면 상관이 없기 때문에 중요하지 않을 수 있다. 하지만 코딩에서 중요한 것 중 하나가 바로 "효율성" 이다. 같은 결과라 해도 과정에서 퀄리티가 나뉜다. 얼마나 단순하게 효율적으로 과정을 실행했는 지가 퀄리티를 판가름 하는 것이다. 그렇기에, 내가 변수를 두고 계속 고민을 하는 것이다. 결과를 낼 수 있는 방법은 여러 개이지만 이것이 과연 효율적인지를 자꾸만 생각하게 되기 때문이다. 내가 쓸 데 없는 변수를 넣어서 괜히 복잡하게 만들고 있지는 않은지, 혹은 이 방법이 아니더라도 결과에 도달하는 데에 좀 더 빠른 길이 있는 게 아닌지를 자꾸만 고민하게 되는 것이다.


결국 단순하게 코드를 짜면 짤수록 수정이 편해질 뿐만 아니라 오류가 생길 확률도 현저하게 줄어들기 때문에 효율성에 목을 매는 것이다. 또한 당사자가 아닌 다른 사람이 짠 코드를 읽을 때에도 어렵지 않게 이해할 수 있기 때문에 업무적 유연성도 올라갈 수 있다. 그렇기에 이 효율성이 개발 실무자들에게 정말 중요한 것이다.


이해하기 쉽도록 간략한 예로만 설명했지만 결국 변수 설정이 코드의 구조를 예상하는 것에서부터 시작하기 때문에 내가 어렵다고 느끼고 있는 것 같다. 초심자 행운이 어디까지일지는 모르지만 코딩을 시작하거나 관심이 있는 누군가에게 이러한 나의 고민이 도움이 되었으면 하는 바램이다.