Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
TIL-2 (2022.02.20[일])
by leeq
#clean_code
2년 전
3,871
1


TIL (Today I Learned)

2022.02.20

오늘 읽은 범위

2장. 의미 있는 이름

책에서 기억하고 싶은 내용을 써보세요.

  • 일관성이 떨어지는 표기법은 그릇된 정보다. (p.25)

  • 이름으로 그릇된 정보를 제공하는 진짜 끔찍한 예가 l이나 O 변수다. (p.25)

  • 이름 길이는 범위 크기에 비례해야 한다. (p.28)

  • 자신의 기억력을 자랑하지 마라. (p.31)

  • 한 개념에 한 단어를 사용하라. (p.33)

  • 의미 있는 맥락을 추가하라. (p.35)

  • 불필요한 맥락을 없애라. (p.37)

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

내가 그의 이름을 불러주기 전에는

그는 다만

하나의 몸짓에 지나지 않았다.

내가 그의 이름을 불러주었을 때,

그는 나에게로 와서

꽃이 되었다.

- 김춘수, 꽃 중 발췌

이름! 사람은 이름대로 산다는 말이 있다. 한치 앞도 모르고 살아가는 사람 또한 그러한데, 뚜렷한 목적을 가지고 태어나는 변수와 함수, 클래스에게 이름의 중요성은 몇 번을 강조해도 부족하지 않다. 그런 의미에서, 이 책의 첫 장에서 의미 있는 이름에 대해 기술하는 것은 당연하다. 잘 지은 이름으로 가득 찬 코드는 읽는 이로 하여금 무엇을 위한 코드인지, 어떻게 작동하는지 직관적으로 알 수 있게 해준다.

변수명하니, 협업을 했던 동료 한 명이 또다시 떠오른다. 그 친구는 굉장히 특이한 명명법을 지니고 있었는데, 모든 코드에서 첫 변수는 temp였다. 두 번째 변수는 temptemp였고, 세 번째 변수는 temptemptemp였다. 그의 코드를 처음 보았을 때는 내가 아는 언어가 아닌, esoteric language 중 하나인 줄 알았다. 굉장한 일관성을 가진 표기법이다. 의미 있는 맥락은 없고, 불필요한 맥락이 가득한 것은 아쉽지만. 심지어 카멜 표기법이나 파스칼 표기법은 물론이고, 특정 언어들에서 통용되는 스네이크 표기법이나 dot (.) 또한 사용하지 않았다! 그럼에도 불구하고 코딩을 해나갔던 동료의 엄청난 기억력에 순수한 찬사를 보낸다. 이 책에서는 자신의 기억력을 자랑하지 말라고 하지만.

의미 있는 이름은 독자의 입장에서만 중요한 것은 아니다. 깨끗한 코드는 깨끗한 이름에서 시작한다. 물이나 연기를 담을 용기 없이 정돈할 수 있는가? 변수에게 있어서, 잘못 지어진 이름은 비정형의 물과 같다. 코딩을 하다 보면 코드 조각들이 이리저리 널브러지게 된다. 물론 그러지 않기 위해 노력해야겠지만. 새로운 기능을 추가하고, 누락된 케이스를 추가하고, 버그를 수정하다 보면 불가피한 상황이다. 더 이상 이 더티 코드로 고통 받을 수 없다는 생각에 코드를 정돈하기로 결심한다. 프로그래머는 컴파일러도 이해할 수 있을 정도로 상세하게 명령서를 작성하는 사람이지만, 불행하게도 컴파일러만큼 기억력이 좋지 못하다. 각 변수나 함수가 무슨 목적으로 생성되었는지, 어디에서 어떻게 작용하는지 다시 분석하기 위해 많은 시간을 소모한다. 때때로는 이 과정이 너무 번거로워서 코드 정돈을 포기하기도 한다. 정리정돈만을 위해 이름이 중요하다는 것이 아니다. 변수를 사용하기 위해 지금까지 얼마나 많은 스크롤을 하였는가!

그렇다면 어떤 이름이 좋은 이름인가? 이 장의 제목이 그를 정리해주고 있다. 의미 있는 이름. 좋은 이름은 그 대상의 의미, 또는 목적을 담고 있어야 한다. 나도 변수명을 정할 때 안 좋은 습관들이 있다. 헝가리안 표기법처럼 타입을 포함한다던지, 과도하게 함축적인 이름을 짓는다는 것이다. 전자는 처음 배운 언어의 (R) 특성으로 인한 것이라 하더라도, 후자는 변명의 여지가 없다. 예를 들어, createContractStatistics라는 함수명 대신 makeStat을 사용하곤 했다. 짧은 변수명은 더 빨리 타이핑할 수 있으니까. 물론 변수를 사용할 때마다 의미를 알아내기 위해 더 많은 시간을 필요로 하는 것은 당연하다. 작은 프로젝트라면 저런 식으로 이름을 지어도 아무 문제 없을 것이다. 하지만 큰 프로젝트일 수록 좋은 이름은 더 큰 도움이 된다.

말 그대로, "의미 있는 이름"이 의미 있는 이름이다. 조금 거창할 지 몰라도, 좋은 이름을 짓는 과정은 마치 시를 짓는 과정과 같다. 꼭 전해야 할 표현을 넣고, 과도한 수식을 빼는 과정의 반복이다. 적당히라는 말이 가장 어렵다. 모자라지도 않게, 과하지도 않게 "정보"를 담아야 한다. 코드는 시와 달리 명확해야 한다. 이만 진행하고 있는 프로젝트의 변수명들을 다시 살펴보러 가야겠다.

1 comment