7 분 소요

개발을 하다보면 변수, 클래스, 메서드의 이름을 깊게 고민하지 않을 때가 많다. 왜냐하면 일단 동작하도록 하는 데에 급급하기 때문이다. 하지만 결국 대충 지은 변수, 클래스, 메서드의 명칭은 나의 발목을 잡는다.
좋은 이름에 정답은 없다. 하지만 대부분의 프로그래머들이 경험적으로 좋은 이름이 어떤 것인지를 알고 있을 것이다. 내가 읽었을 때 별로인 코드를 다른 사람에게 남기지 말자!


📆TIL(Today I Learned) 날짜

2022.03.08


📑오늘 읽은 범위

2.의미 있는 이름


✍🏻책에서 기억하고 싶은 내용

👉🏻 의도를 분명히 밝혀라
변수나 함수 그리고 클래스 이름은 다음과 같은 굵직한 질문에 모두 답해야 한다. 변수(혹은 함수나 클래스)의 존재 이유는? 수행 기능은? 사용 방법은? 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다.

👉🏻 그릇된 정보를 피하라
프로그래머는 코드에 그릇된 단서를 남기면 안 된다. 그릇된 단서는 코드 의미를 흐린다. (…) 서로 흡사한 이름을 사용하지 않도록 주의한다. (…) 유사한 개념은 유사한 표기법을 사용한다. 이것도 정보다. 일관성이 떨어지는 표기법은 그릇된 정보다.

👉🏻 의미있게 구분하라
연속적인 숫자를 덧붙인 이름(a1, a2, …, aN)은 의도적인 이름과 정반대다. 이런 이름은 그릇된 정보를 제공하는 이름도 아니며, 아무런 정보를 제공하지 못하는 이름일 뿐이다. 저자 의도가 전혀 드러나지 않는다.

👉🏻 발음하기 쉬운 이름을 사용하라
사람들은 단어에 능숙하다. 우리 두뇌에서 상당 부분은 단어라는 개념만 전적으로 처리한다. 그리고 정의상으로 단어는 발음이 가능하다. 말을 처리하려고 발달한 두뇌를 활용하지 않는다면 안타까운 손해다. 그러므로 발음하기 쉬운 이름을 선택한다.

👉🏻 자신의 기억력을 자랑하지 마라
클래스 이름과 객체 이름은 명사나 명사구가 적합하다. 메서드 이름은 동사나 동사구가 적합하다.

👉🏻 한 개념에 한 단어를 사용하라
추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다. 예를 들어, 똑같은 메서드를 클래스마다 fetch, retrieve, get으로 제각각 부르면 혼란스럽다. (…) 일관성 있는 어휘는 코드를 사용할 프로그래머가 반갑게 여길 선물이다.

👉🏻 말장난을 하지 마라
프로그래머는 코드를 최대한 이해하기 쉽게 짜야 한다. 집중적인 탐구가 필요한 코드가 아니라 대충 훑어봐도 이해할 코드 작성이 목표다.

👉🏻 의미 있는 맥락을 추가하라
스스로 의미가 분명한 이름이 없지 않다. 하지만 대다수 이름은 그렇지 못하다. 그래서 클래스, 함수, 이름 공간에 넣어 맥락을 부여한다. 모든 방법이 실패하면 마지막 수단으로 접두어를 붙인다.

👉🏻 불필요한 맥락을 없애라
일반적으로는 짧은 이름이 긴 이름보다 좋다. 단, 의미가 분명한 겨우에 한해서다. 이름에 불필요한 맥락을 추가하지 않도록 주의한다.


❓궁금한 내용, 잘 이해되지 않는 내용

‘발음하기 쉬운 이름을 사용하라’는 내용에서 안 좋은 예로 genymdhms(generate date, year, month, day, hour, minute, second)라는 이름의 변수를 들었다. 이렇게 변수명을 짓는 사람이 있다고?라는 생각이 들다가 get_ohlcv() 메서드가 떠올랐다.

get_ohlcv()는 주식, 암호화폐 등의 영역에서 가격을 구하는 함수다. 시가(open), 고가(high), 저가(low), 종가(close), 거래량(volume)을 구한다는 뜻이다. 분명 읽기에는 매우 힘든 함수명이지만, 뜻을 알고 나면 해당 함수가 어떤 기능을 수행하는지 명확하게 알 수 있다. 이런 네이밍은 좋은 네이밍일까?

댓글남기기