코드의 가독성이 중요한 이유
코드의 가독성이 중요한 이유와 방법들
dukjjang •
2024년 2월 25일
dev
누군가가 나한테 “좋은 코드가 뭐라고 생각하세요?” 라고 묻는다면 나는 “가독성이 좋은 코드”라고 자신 있게 말하고 싶다. 물론 좋은 코드에는 여러 가지 조건이 있지만, 나는 가독성이야말로 가장 중요하다고 생각한다. 왜냐하면 가독성을 높이려고 노력하다 보면 자연스럽게 좋은 코드의 다른 조건들도 충족하게 되는 경험을 직접 해봤기 때문이다..
가독성이란?
코드에서 말하는 ‘가독성’은 단순히 글자가 잘 보이고 들여쓰기가 깨끗하게 되어있는 정도만을 뜻하진 않는다. 이 코드가 어떤 역할을 하는지, 그리고 무엇을 의도하는지 쉽게 이해하고 유추할 수 있는 정도를 의미한다. 즉 “누가 봐도 이 코드가 무슨 일을 하는지” 빠르게 파악할 수 있어야 한다.
왜 가독성이 중요한가?
첫째, 혼자서 개발하는 일이 사실상 점점 드물어지고 있다. 팀 프로젝트를 하다 보면 다른 동료들이 내 코드를 보고, 수정하고, 함께 유지보수해야 한다. 가독성이 떨어지면 협업 효율이 급격히 떨어지고, 결국 “왜 이렇게 썼느냐”며 시간을 많이 낭비하게 된다. 혼자서 개발하는 상황이라 하더라도, 시간이 지나면 자기 자신조차도 코드를 처음처럼 완벽히 기억하기 어렵기 때문에 가독성은 필수다.
둘째, 코드는 누구나 읽고 쓸 수 있어야 한다고 생각한다. 지금은 AI 시대다. 무림의 고수처럼 혼자서 현란하게 코드를 짜는 시대는 이미 지났다. 코드 작성이란 건 조금만 공부하면 누구나 할 수 있는 일이고, 또 그래야 한다고 본다. 그렇다면 당연히 코드를 읽고 수정하기 편한 방식, 즉 가독성을 최우선으로 고려하는 게 중요하다.
셋째, 다른 요소(예: 최적화, 실행속도, 코드 길이 등)들이 아무리 중요해도, 팀 단위로 제품을 만들어내는 입장에서는 가독성이 더 우선일 수밖에 없다. 설령 속도가 약간 떨어지거나 코드가 좀 길어지더라도, 읽기 편하고 명확한 로직이라면, 이후에 다른 사람이 쉽게 개선할 수 있는 기반이 된다. 속도가 아무리 빨라도, 어떤 로직인지 알 수 없는 코드라면 나중에 유지보수 비용이 훨씬 커진다.
가독성이 좋은 코드가 가져다주는 효과
1) 재사용성
가독성이 좋은 코드는 재사용하기에도 좋다. 가독성이 떨어진다면 “이 코드가 정확히 무슨 일을 하는지” 헷갈려서 결국 새로 짜는 일이 생기기 마련이다. 반면 코드를 한눈에 이해할 수 있다면, 필요할 때 가져다 간단히 재활용하면 된다.
예시 1) 함수명 짓기
// 잘못된 예시 function getUserLoggdInDataAndCheckIsLoginWithInSeventDays() { // ... } // 좋은 예시 function isRecentLoggdIn() { // ... }
잘못된 예시: 함수의 동작(내부에서 뭘 하는지)을 모조리 나열해버리면, 막상 재사용하기가 어렵다. 함수 이름에 AND나 OR 같은 단어가 들어가면 읽기도 부담스럽고, 책임이 여러 가지로 나뉘어 헷갈리기 쉽다.좋은 예시: 이 함수가 궁극적으로 무슨 역할을 하는지 간결하게 나타냈다. “최근에 로그인 했는지 여부를 판단”한다는 본질적인 역할만 함수명으로 표현해주는 것이 좋다.
- 이처럼 함수에 하나의 책임만 부여하면 자연스럽게 단일 책임 원칙을 지키게 되고, 이는 곧 좋은 코드의 조건을 만족하게 된다.
2) 유지보수성
가독성이 떨어지는 코드는 수정할 때마다 위험부담이 커진다. 예를 들어 롤링배너(캐러셀) 컴포넌트를 구현했다고 생각해보자.
// 예시 - 나쁜 코드 const height = 163; // 매직넘버 const moveDist = 236; // 또 다른 매직넘버 function startRolling() { // ... }
위처럼 매직넘버(코드 안에 직접 쓰인 숫자)가 군데군데 박혀 있으면, 이 값이 어디에서 어떻게 쓰이는지, 또 왜 이 값으로 설정했는지 알 수 없다. 결국 다른 사람이 보거나, 심지어 본인조차 시간이 지나면 헷갈려서 유지보수가 힘들다.
// 예시 - 좋은 코드 const BANNER_ITEM_HEIGHT = 160; const BANNER_GAP = 20; const INITIAL_BANNER_OFFSET = 3; function startRolling() { // ... }
이렇게 상수에 명확한 이름을 붙여주면, 코드를 읽는 즉시 “아, 배너 아이템 하나의 높이가 160이구나” 하고 이해할 수 있다. 그리고 왜 160인지, 그리고 offset은 또 무엇인지, 주석으로 충분히 설명을 보강해두면 유지보수가 훨씬 쉬워진다.
정리하며
나는 “속도가 조금 느려지더라도, 코드 길이가 조금 늘어나더라도, 가독성이 중요하다”고 생각한다. 왜냐하면 혼자서 위대한 것을 만들어내기는 어렵기 때문이다. 결국 동료들과 함께 좋은 제품을 만들어내야 하는 상황이 대부분이므로, 다른 사람이 내 코드를 빠르게 이해할 수 있도록 하는 게 1순위다. 그리고 심지어 혼자서 개발한다 해도, 한 달 뒤 혹은 일주일 뒤의 내가 이 코드를 다시 봤을 때 곧바로 이해할 수 있어야 한다.
결국 내가 하고 싶은 말은, 코드는 대단한 비밀 병기 같은 게 아니라, 누구나 자연스럽게 읽고 쓸 수 있는 ‘일반적인 글’이 되어야 한다고 생각한다. 그러니까 굳이 최적화나 실행 속도를 과하게 신경 쓰기보다는(물론 중요하지만), 조금 더 직관적으로 의도가 드러나고 협업하기 쉽도록 코드를 짜는 것이 더 옳다고 본다. 이건 거창한 무공이 필요한 일이 아니라, 누구나 조금만 공부하면 따라 할 수 있는 일이기도 하다.
그래서 결국 가독성이 좋은 코드 = 좋은 코드라고 확신할 수 있다.