규도자 개발 블로그
좋은 변수 이름 정하기 : 좋은 변수 이름과 변수 이름의 길이 정하기 본문
좋은 변수 이름 정하기
내가 코드를 작성할 때 중요하게 생각하는 것이 있다. 정확성은 프로그램이 가져야할 필수요소이고 애초에 정확성이 없다면 프로그램으로서의 가치가 없으므로 딱히 강조하지 않겠다. 그밖에 중요하게 생각하는 건 바로 간결성과 가독성이다. 그 중에서도 특히 중요한 건 가독성이라고 생각한다. 코드는 결국 사람이 읽기 때문이다.
코드는 결국 다시 읽힌다. 그사람은 당신의 팀원일 수도, 또 당신 자신일 수도 있다. 만약 옛날에 무아지경으로 마구마구 작성해놓은 코드가 다시 필요하다고 할 때 마구잡이로 조사놓은 변수이름들과 코드를 보면 어떤 느낌일까. 예전의 당신이 원망스러워질 것이다.
나는 이러한 경험을 몇 번 겪고 나서 나만의 일정한 규칙을 정해서 변수를 작성하기 시작했다. 그 이후로는 다른 클래스나 다른 파일에서 어떠한 변수를 참조하는 데에 자동완성이 되지 않고 기억이 나지 않아도 '나라면 이렇게 작성했겠구나'하는 막연한 생각으로 코드를 작성해나가도 내가 스스로 정해놓은 규칙이 있어 중간중간에 참조를 하지 않아도 내 생각에서 크게 벗어나는 법이 없어 작업능률이 향상됐다. 이것은 부단 변수 뿐만이 아니라 html코드를 작성할 때의 클래스, 아이디, 네임을 작성할 때에도 적용되며 데이터베이스에 KEY : VALUE형태로 저장해놓은 옵션값이나 메타값 등 KEY값의 조회가 필요한 경우에 특히나 좋은 효과를 발휘한다.
이렇게 나만의 변수명명명명규칙을 만들어나갈 때 많은 도움이 됐던 글이 있다. 바로 스티브 맥코넬(Steve McConnel)의 저서 CODE COMPLETE2의 11장, 변수 이름의 기능이다. 가독성좋은 프로그래밍 작성을 원하는 사람들과, 코드작성효율의 향상을 원하는 사람을 위해 이곳에 그 내용을 정리해놓으려 한다. 물론 내가 필요할 때 읽기 위해 작성해놓는게 가장 큰 목적이긴 하다.
좋은 이름을 위한 고려 사항
변수에 있어서 좋은 이름이란 무엇일까. 사람 이름이나 애완동물의 이름을 정하는 것처럼 예쁘게 들려야할 필요는 없다. 하지만 어떤 문학작품이나 영화를 만든다고 할 때 이름 또한 그 등장인물의 아이덴티티를 표현하듯이 변수의 이름은 그 변수가 담고 있는 데이터의 아이덴티티를 표현하고 있어야 한다.
다음은 나쁜 변수명을 사용한 예제 코드이다.
x = x - xx;
xxx = fido + SalesTax(fido);
x = x + LateFree(x1, x) + xxx;
x = x + Interest(x1, x);
만약에 당신이 이 코드를 수정하거나 무엇인가 덧붙여야할 일이 필요할 때 어떻게 해야할까. 디버거를 켜서 변수에 담기는 숫자를 일일히 추적하여 해당 변수가 무슨 의미인지 인지한 상태에서 작업을 해야할 것이다.
해당 예제는 미결제 잔액과 새로 산 물건을 토대로 고객이 지불해야 하는 총금액을 계산하는 코드라고 한다. 대체 그 가격들을 어디에서부터 어떻게 추적해야할지 막막할 것이다.
다음은 개선된 형태의 코드이다.
balance = balance - lastPayment;
monthlyTotal = newPurchases + SalesTax(newPurchases);
balance = balance + LateFee(customerID, balance) + monthlyTotal;
balance = balance + Interest(customerID, balance);
이름을 지을 때 가장 중요한 고려 사항
변수 이름을 지을 때 그 이름이 변수가 나타내는 것을 완전하고 정확하게 설명하는지를 가장 중요하게 고려해야 한다. 좋은 이름을 생각해내는 효과적인 기법은 변수가 표현하는 것을 단어로 서술하는 것이다.
미국 올림픽 대표팀 선수가 몇 명인지 나타내는 변수의 이름은 numberOfPeopleOnTheUsOlympicTeam이 좋다. 운동장의 좌석 수를 표현하는 변수의 이름은 numberOfSeatsInTheStadium일 것이다. 올림픽에서 각 나라의 대표팀에서 획득한 최고 점수를 표현하는 변수의 이름은 maximumNumberOfPointsMondernOlympics일 것이다. 현재의 이자율을 표현하는 변수는 r이나 x보다 rate나 interestRate가 더 좋은 이름이다.
이러한 이름에는 두 가지 특징이 있음을 주목한다. 하나는 해석하기가 쉽다는 점이다. 실제로 이 변수 이름은 쉽게 읽을 수 있어 해석할 필요가 전혀 없다. 하지만 몇몇 이름은 너무 길어서 실용적이지 않다. 변수의 길이에 대해선 뒤에 간단히 설명할 것이다.
변수의 목적 | 좋은 이름, 좋은 설명 | 나쁜 이름, 불충분한 설명 |
---|---|---|
날짜가 적힌 유통 중인 수표의 총계 | runningTotal, checkTotal | written, ct, checks, CHKTTL, x, x1, x2 |
고속 열차의 속도 | Velocity, trainVelocity, velocityInMph | velt, v, tv, x, x1, x2, train |
현재 날짜 | currentDate, todaysDate | cd, current, c, x1, x2, date |
페이지당 행 수 | linesPerPage | lpp, lines, l, x, x1, x2 |
이름은 가능한 한 구체적이어야 한다. x, temp, i와 같이 한 가지 이상의 목적으로 사용되기 쉬운 막연한 이름은 많은 정보를 제공하지도 않고 일반적으로 나쁜 이름이다. 만들어진 변수는 한 가지 목적으로만 사용돼야한다는 사실을 명심하라.
기억하기 쉬운 이름은 일반적으로 해결책보다 문제에 대해서 말한다. 좋은 이름은 "어떻게"보다 "무엇"을 표현하는 경향이 있다. 일반적으로 이름이 문제보다 해결 과정의 어떤 측면을 가리키고 있다면 이는 무엇보다는 "어떻게"에 대한 것이다. 문제 자체를 가리키는 이름을 사용하도록 한다.
최적의 이름 길이
최적의 이름 길이는 x와 maximumNumberOfPointsInModernOlympics 사이의 어딘가가 아닐까 싶다. 너무 짧은 이름은 충분한 의미를 전달하지 못한다. x1이나 x2와 같은 이름의 문제점은 x가 무엇인지를 알아낸다고 하더라도 x1과 x2의 관계에 대해서는 아무 것도 알지 못한다는 것이다. 너무 긴 이름은 입력하기 어렵고 소스코드의 외관 구조를 모호하게 만들 수 있다.
A. C. 베난더와 B. A. 베난더, 그리고 고를라는 변수 이름의 길이가 평균적으로 문자 10자에서 16자 사이일 때 프로그램을 디버깅하기 위해서 들이는 노력을 최소화할 수 있다는 사실을 발견했다. 변수의 평균 길이가 문자 8자에서 20자 사이인 프로그램도 거의 마찬가지로 디버깅하기가 쉬웠다. 이 가이드라인은 모든 변수의 이름을 문자 9자에서 15자, 혹은 10자에서 16자 사이의 길이로 작성해야 한다는 의미는 아니다. 하지만 코드를 봤을 때 짧은 이름이 많다면 이름이 분명하게 작성되었는지 확인해 보아야 한다는 뜻이다.
너무 길거나 너무 짧거나 적당한 길이의 변수 이름
너무 길다 | numberOfPeopleOnTheUsOlympicTeam numberOfSeatsInTheStadium maximumNumberOfPointsInModernOlympics |
너 무 짧다 | n, np, ntm n, ns, nsisd m, mp, max, points |
적당하다 | numTeamMembers, teamMemberCOunt numSeatsInStadium, seatCount teamPointsMax, pointsRecord |
하지만 짧은 변수는 항상 나쁠까? 그건 또 아니다. i와 같이 짧은 이름은 이름의 길이로부터 해당 변수가 제한된 범위를 갖는 연산에서 사용되는 임시 값이라는 것을 추측할 수 있다. 우리가 수많은 for문을 작성할 때 중첩될 수록 i부터 j, k순서로 계속되는 인덱스를 사용하듯이 말이다. 이것은 누구라도 짧은 변수들이 해당 Iterable변수의 Index를 의미한다는 걸 유추할 수 있다. 하지만 이런 변수들은 이 값이 몇 줄의 코드에서만 사용된다는 것을 가정할 수 있어야 한다.
'소프트웨어 공학 > Clean Code' 카테고리의 다른 글
좋은 변수이름 정하기 : 임시 변수 이름 (0) | 2018.10.11 |
---|---|
좋은 변수이름 정하기 : 상태 변수 이름 (0) | 2018.10.10 |
좋은 변수이름 정하기 : 반복문 인덱스 이름 (0) | 2018.10.09 |
좋은 변수이름 정하기 : 변수에서 쓰기 좋은 반의어 (0) | 2018.10.07 |
좋은 변수 이름 정하기 : 전역 변수의 구분과 한정자 (0) | 2018.10.07 |