2024. 2. 13. 00:52ㆍ좋은 코드 (Good Code)/좋은 이름 (Good Name)
Compromise
솔직해지자.
오늘 만든 변수 이름 몇 개는 사실 못 생겼다.
보지 않아도 안다. 그러니 설명할 필요 없다.
당연히 나도 포함해서, 대부분의 개발자들은 작명가가 아니다.
주변을 둘러보면 못생긴 이름은 너무나 많고 다양하다.
가끔 다른 사람이 작성한 코드를 보면 이렇게 짓나 싶을 정도로 재밌는 이름들도 많다.
만약 본인이 살면서 이름을 못 지은 걸로 딴지 걸면서 피드백을 받았던 경험이 없었다면,
첫 번째로 1인 개발자이거나
두 번째로 그럴만한 실력자를 멘토로 두지 않았거나
세 번째로 본인이 조금 멍청해서 알려줘도 어차피 모르기 때문에 포기되었거나
마지막으로 이름 짓느라 한 평생 걸리는 데 겨우 이것 때문에 발목 잡히면 본인의 생산성에 문제가 생기기 때문이다.
이제 희소식이다.
우리는 드디어 이름에 대한 제대로 된 피드백을 받을 것이다.
가장 중요한 한 가지만 말하면
이해 가능하게는 만들어달라.
Readable Name
역시 문제는 타협조차 하지 않는 사람들이다.
def sumAll(list):
t = 0
for a in list:
t += a
return t
기가 막힐 노릇이다.
이름 없는 존재는, 아무 의미도 없다.
학교에 가서 출석을 부를 때, 선생님이 예쁜 이름들을 불러주다가 본인만 t 라고 부른다고 생각해보자.
얼마나 서운하겠나.
아니 다 떠나서, 왜 이름을 안 지어주는 지 모르겠다.
코드에 대한 애정이 없다기보단, 이건 그냥 이걸 읽는 누군가를 먹이려는 의도가 강해보인다.
t와 a라는 이름을 왜 만들었는 지는 본인만 안다.
이건 정말 맞다. t가 total이고 a는 그냥 아무 의미 없이 새끼손가락을 눌렀다는 것은 나만 안다.
그리고 내일되면 까먹을 것이다.
저렇게 개발하는 팀은, 채용할 때 탐정 경력이 커리어에 있어야 할 것이다.
그러니까 제발 적어도 이름은 주자
def sumAll(list):
total = 0
for amount in list:
total += amount
return total
이름이라도 주면, 어색하지만 문장은 완성된다. 쉽게 말해 읽을 수는 있다.
Meaningful Name
읽을 수 있는 이름을 만들었다면, 의미 있는 이름으로 바꾸자.
만일 달러를 원화 가치로 바꾸는 함수를 만든다고 가정해보자.
def dollarToWon(
value: int,
rate: float
) -> float:
...
value와 rate가 가지는 의미를 알기 위해서는 어떻게 해야할까?
개발자에게 설명을 듣거나, 함수 안을 봐야 될 것 같다.
이건 그냥 의미를 모르는 이름이다.
이제 조금 더 이름에 의미를 부여해보자.
def changeDollarToWon(
dollar: int,
exchange_rate: float
) -> float:
...
일단 이 함수가 달러를 원으로 바꾸는 것이라는 게 이해가 된다.
이제 함수를 쓸 때 어디 자리에 뭘 넣어야 할 지 감이 온다.
그러나 아직도 의미가 불분명하다고 생각될 수 있다.
더 자세하게 써보자.
def changeCurrencyOfDollarToWon(
dollar_amount: int,
dollar_to_won_exchange_rate: float
) -> float:
...
이제 여전히 이 함수가 뭘 하는 지 모른다면, 독해 능력을 의심해볼 수준까지 왔다고 생각한다.
농담이고, 사실 더 자세하게 써도 된다.
시중에 있는 책을 보면, 이름은 의미가 분명하고 간결해야 좋다고 한다.
난 이게 반은 맞고 반은 틀리다고 본다.
먼저 당연히 이름이라는 건 의미가 분명해야 된다.
그러나 간결할 필요는 없다.
간결하다고 생각하는 이름을 아무도 알아보지 못한다면, 그건 이름이 아니다.
그럴바엔 그냥 편하게 늘릴 수 있을 만큼 늘려서 본인의 생각을 충분히 표현하는 것이 훨씬 좋다.
다시 한 번 말하지만, 우리는 작명가가 아니다.
시적 표현을 만들 수도 없을 뿐더러, 머리 싸매고 도전할 필요가 전혀 없다.
그냥 누구나 읽을 수 있고, 또 잘 이해되는 이름이 좋다.
만일 dollarToWon 과 changeCurrencyOfDollarToWon 두 개 함수가 있고,
내가 화폐 가치를 바꿀 일이 있다면 후자를 사용할 것이다.
그래, 극단적으로 이름을 100자로 만들었다고 해보자.
def changeCurrencyOfDollarToWonBaseOn2024YearAnd01MonthAnd01DayForOimBookCompanyTargetToGoodCodeProject...
미안한데, 이건 문제가 아니다.
100자로 만들었다 한들, 그게 100자로 표현될 때 모든 의미를 담을 수 있다면 - 그게 옳다.
처음부터 우리가 짧은 이름으로 모든 의미를 표현할 수 있었다면, 애초에 잘 표현했을 것이다.
결국 이해하지 못할 이름으로 짧게 만들고 끝내는 건 다람쥐 쳇바퀴 도는 것과 다를게 없다.
100자를 10자로 고민해서 만드는 것이 더욱 값지다는 이야기이다.
나는 이걸 생각할 때마다 어떤 기업의 일화가 생각나는데
어느날 사장이 비서에게 어제자 뉴스 내용을 적어서 오라고 요청했었다.
비서는 a4 2장 분량을 모두 채워서 사장에게 전달했는데,
사장을 다시 이걸 요약해서 달라고 했다.
비서는 요약해서 a4 1장 분량으로 요약해서 전달했는데,
사장이 여전히 많다면서 더 요약해서 달라고 했다.
비서는 난감해 하면서도 정말 줄이고 줄여 한 문단으로 만들어서 전달했는데,
사장이 한 문장으로 요약해서 달라고 했다.
비서는 사장이 미쳤구나 생각해서 정말 이곳 저곳 다 뒤져가며 혼신으로 줄이고 줄여 만들어서 전달했더니
사장은 그제야 글이 읽힌다고 했다는 것.
a4 2장이 한 문장으로 요약된다는 건 - 결국 a4 2장 분량을 먼저 만들어야 가능한 이야기일 듯 싶다.
그리고 잘 풀어쓴 이름은 피드백을 주기도 용이하다.
즉, 만약 아래처럼 썼는데 테스트 코드를 모두 통과했다면
...
return value - rate
내 입장에서는 value, rate가 어떤 건지 의미를 모르기에 이 수식이 맞다 틀리다를 알려줄 수 없다.
개발자가 주어진 테스트 코드를 모두 통과했다고 한다면 께름칙하지만 이 수식은 맞긴하다고 할 것이다.
반대로 이렇게 풀어서 써준다면
...
return dollar_amount - dollar_to_won_exchange_rate
응당 곱하기를 써야 맞다고 해주거나, 이 수식이 나온 배경부터 설명을 구할 것이다.
뭐가 되었든 코드나 개발자나 모두 좋은 방향으로 흘러간다.
How to Make a Meaningful Name?
경험상으로 적어도 이해 가능한 이름을 짓는 방법은 2개가 있다.
첫 번째로 일단 내용을 가려놓고, 이름만 보고 의미가 무엇인 지 고민해보는 것이다.
이는 위에서 보여준 것처럼 함수 내용을 가리는 식이다.
특히 구현하기 전에 머리 속으로 이런 이름은 이렇게 쓰이길 바라면서 고민을 먼저 해보길 권한다.
두 번째로 그 이름으로 문장을 만들어보는 것이다.
달러를 원으로, 값과 백분율이 필요해요
달러를 원으로 바꿀꺼에요. 이때 달러 크기와 달러 - 원 환율이 필요해요.
뭐가 더 자연스럽고 완전해보이는 지 생각해보면, 답은 금방 나온다.
Summary
- 읽을 수 있는 이름을 만들자
- 이해할 수 있는 이름을 만들자
'좋은 코드 (Good Code) > 좋은 이름 (Good Name)' 카테고리의 다른 글
6. 쓰다가 마는 건 용납하지 못한다 (0) | 2024.03.03 |
---|---|
5. 이름을 만들어주자 (0) | 2024.02.25 |
4. 단수와 복수를 구분하자 (1) | 2024.02.25 |
3. 명사와 동사를 구분할 때가 왔다 (0) | 2024.02.15 |
2. 애매모호함을 버리자 (1) | 2024.02.14 |