오늘 TIL 3줄 요약

  • 이름을 지을 때 의도가 분명하게 지어야 한다.
  • 이름에 그릇된 정보가 들어가는 것을 피해야 한다.
  • 가독성이 높은 코드를 짜는데에 집중해라.

TIL (Today I Learned) 날짜

  • 2022. 04. 24

오늘 읽은 범위

  • 2장 의미 있는 이름

책에서 기억하고 싶은 내용들

의도가 분명한 이름

변수, 함수, 클래스의 이름을 지을 때 다음의 질문에 모두 답해야 한다.

존재의 이유는? 수행 기능은? 사용 방법은?

별도의 주석이 필요하다면 의도를 분명히 드러내지 못한 것이다.

  • int a와 int elaspedTimeInDays의 차이!

그릇된 정보를 주는 이름

그릇된 단서는 코드의 의미를 흐린다.

  • 다른 의미로 해석 될 수 있는 단어 - hp (hypotenuse 약어? 유닉스 변종을 가리키는 이름?)
  • 서로 흡사한 이름 사용 - XYZControllerForHandlingOfStrings, XYZControllerForStorageOfStrings
  • 일관성이 떨어지는 표기법

의미 있게 구분하기

서로 다른 개념에 이름을 구분하기 위해 불용어(noise word)를 붙이거나, 연속된 숫자를 덧붙이는 방식은 제대로 된 정보를 제공하지 못한다.

  • a1, a2, a3
  • Product, ProductInfo, ProductData
  • zork, theZork

읽는 사람이 차이를 알도록 이름을 지어야 한다.

발음하기 쉬운 이름

발음하기 쉬운 단어는 두뇌가 이해하기 쉽고 다른 사람들과 토론하기 쉽다.

  • genymdhms와 generationTimestamp의 차이!

검색하기 쉬운 이름

문자 하나를 사용하는 이름과 상수는 텍스트 코드에서 쉽게 눈에 띄지 않고, 버그가 있을 때 검색으로 찾아내기 어렵다.

긴 이름이 짧은 이름보다 좋다.

s += (t[j]*4)/5;
int realTaskDays = taskEstimate[j] * realDaysPerIdalDay;
int realTaskWeeks = (realTaskDays / WORK_DAYS_PER_WEEK);
sum += realTaskWeeks;

인코딩 피하기

이름에 타입을 넣지 마라. 헝가리식 표기법이나 기타 인코딩 방식이 현대의 프로그래밍에서는 방해가 될 뿐이며 나중에 이름이나 타입을 바꾸기 어려워 지고 읽기도 어렵다.

PhoneNumber phoneString; // 타입이 바뀌어도 이름은 바뀌지 않는다

멤버 변수 접두어도 또한 불필요하다.

private String m_dsc;

인터페이스 클래스와 구현 클래스를 구분하기 위한 접두어도 붙이지 않는 편이 낫다. 읽는데 주의를 흐트리고 과도한 정보를 제공한다.

  • IShapeFactory와 ShapeFactory

클래스와 메서드의 이름

클래스와 객체 이름은 명사나 명사구, 메서드의 이름은 동사나 동사구가 적합하다.

  • 클래스, 객체 - Customer, WikiPage, Account
  • 메서드 - getName, setName, FromRealNumber

그 외

  • 기발한 이름은 피하기 - 의도를 분명히 하여 읽는 사람이 이해할 수 있어야 한다.
  • 한 개념에 한 단어를 사용하기 - 똑같은 메서드를 클래스마다 다른 이름으로 사용하면 혼란스러워진다.
  • 말장난 하지 않기 - 코드를 최대한 이해하기 쉽게 짜라.
  • 의미 있는 맥락을 추가하고 불필요한 맥락을 제거하기
    FirstName → addrFirstName, GSDAccountAddress

결론

적어도 표나 자료 구조처럼 읽히는 코드, 가독성이 높은 코드를 짜는데 집중해라.


오늘 읽은 소감은?

  • 클린 코드는 이름 짓기에서부터 매우 신중해야 함을 깨달았다.
  • 좋지 않은 예시가 내가 했던 사례들과 유사함을 깨달았다...!
  • 문장처럼 읽기 쉬운 코드, 이것을 명심해야겠다.

궁금한 내용

  • 헝가리식 표기법

오늘 읽은 다른 사람의 TIL

'TIL > Clean Code' 카테고리의 다른 글

TIL #06 형식 맞추기  (0) 2022.05.01
TIL #05 주석  (0) 2022.04.29
TIL #04 함수  (0) 2022.04.27
TIL #02 깨끗한 코드  (0) 2022.04.23
TIL #01 책 구매  (0) 2022.04.22

+ Recent posts