클린 코드 2장 의미 있는 이름

inhalin·2022년 2월 20일
0

노개북 클린 코드

목록 보기
3/12

노개북 2기 3일차

  • 2장 의미 있는 이름(pp.22~38)

조언 목록과 내용을 내맘대로 요약 발췌하고 감상평을 짧게 정리함

요약 및 느낀 점

의도를 분명히 밝혀라

p.22
좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다.

  • 변수/함수/클래스의 존재 이유, 수행 기능, 사용 방법 등이 명확히 드러나도록 한다.

실제도 배열 변수 이름을 그냥 큰 고민 없이 지은 적이 있었다. 크롤링 시에 for문 안에서 해당 배열에 요소를 추가하고, 이후 다른 배열에 머지하기 위해 잠깐 사용하는 배열이었다.

크게 중요하지 않을 것 같아 의미 없이 $arr = [];로 썼다가 코드 리뷰 때 용도에 맞는 이름으로 변경해달라는 피드백을 받고 $urls = []; 로 바꿔주었다. 사소하지만 보다 의미와 용도가 명확해졌다.

그릇된 정보를 피하라

  • 피해야 할 것들
    • 이미 개발 업계에서 다른 의미로 널리 쓰이는 단어
    • 컨테이너 유형을 이름에 넣기
    • 흡사한 이름 사용
    • 소문자 L, 대문자 O를 변수로 사용(끔직..)

의미있게 구분하라

  • 피해야 할 것들
    • 철자만 다르게 한 동일 이름 사용(class, klass)
    • 연속된 숫자 또는 불용어 추가

발음하기 쉬운 이름을 사용하라

p.27
발음하기 어려운 이름은 ... 바보처럼 들리기 십상이다. ... 프로그래밍은 사회 활동이기 때문이다.

검색하기 쉬운 이름을 사용하라

  • 상수를 의미 있는 이름으로 지으면 여러 곳에서 사용할 때 검색하기 용이함
  • 이렇게 하면 함수가 길어질 수 있지만 유지보수에 좋음

자신의 기억력을 자랑하지 마라

p.31
문자 하나만 사용하는 변수 이름은 ... 대부분 적절하지 못하다. 독자가 실제 개념으로 변환해야 하니까.

p.31-32
똑똑한 프로그래머와 전문가 프로그래머 사이에서 나타나는 차이점 하나만 들자면 전문가 프로그래머는 명료함이 최고라는 사실을 이해한다. 전문가 프로그래머는 자신의 능력을 좋은 방향으로 사용해 남들이 이해하는 코드를 내놓는다.

똑똑하다고 전문가는 아니다. 나의 똑똑함을 과시하는 이해하기 난해한 코드보다, 다른 개발자들이 읽고 이해하기 쉬운 코드가 더 좋은 코드라는 생각이 든다. 내가 다른 사람들에게 같이 일하고 싶어하는 동료가 된다면 더 멀리, 더 즐겁게 앞으로 나아갈 수 있다. 어디에 있던지 그런 사람이 될 수 있게 전문가의 마음가짐을 갖고 코드를 작성하려고 노력하자.

클래스, 메서드

  • 클래스는 명사, 명사구 사용
  • 메서드는 동사, 동사구 사용

기발한 이름은 피하라

  • 구어체, 속어 사용 금지
  • 특정 문화에서만 사용하는 농담도 지양할 것

한 개념에 한 단어를 사용하라

  • 추상 개념 하나에 한 단어를 사용하도록 통일
  • 예를 들어, 똑같은 기능을 하는 메서드를 클래스마다 fetch, retrieve, get 등등 다르게 쓰면 혼란스러움
  • 메서드 이름은 독자적이고 일관적이게 사용

다른 개념에는 다른 단어를 사용하라

  • 위의 연장선으로, 한 단어를 두 가지 목적으로 사용하지 말 것
  • 예를 들어, add가 두 값을 더해서 반환하는 개념으로 쓰이고 있다면,
    • 집합에 값을 추가하는 메서드에 add를 쓰면 안됨
    • insertappend로 쓰는 것이 적당

해당되는 영역에서 가져온 이름을 사용하라

  • 알고리즘, 패턴 등 기술 개념에는 기술 이름이 적합
  • 문제 영역 개념과 관련 있는 경우 문제 영역 이름이 적합

의미 있는 맥락을 추가하라

  • 스스로 의미가 불분명한 경우 이름에 의미를 넣어 맥락 부여
  • 예를 들어, 주소에서 사용하는 변수들의 경우에,
    • state 변수를 사용하면 혼자 있을때 의미가 불분명해짐
    • 주소라는 의미를 넣어 addrState라고 써주는 것이 좋음
    • Address 클래스를 생성하면 더 좋음
  • 함수가 너무 길어서 그 안에서 사용하는 변수들이 어떤 의미로 사용되는지 한번에 파악하기 힘든 경우에는, 클래스를 만들고 함수를 작게 쪼개 그 안에서 변수를 사용해줌

불필요한 맥락을 없애라

  • 그렇지만, 의미가 분명한 경우 짧은 이름이 긴 이름보다 좋음
  • ABC 학습센터 어플리케이션에서 클래스 이름이 ABCAccountAdress인 것보다 그냥 AccountAdress라고 써주는 것이 더 적절함

실사례

2022-02-22: 업무 중에 마침 2장의 내용에서 말하는 것과 딱 들어맞는 코드를 찾아서 첨부한다.

밑에 코드를 보고 각 변수가 어떤것을 의미하는지 유추해보자.

$one_day_posting = 0;	// 하루 포스팅 가능 갯수..?
$today_remain = 0;	// 오늘 남은 갯수
$today_posting1 = 0;	// 오늘 포스팅 1...??
$today_posting = 0;		// 오늘 포스팅....???

주석 없이는 도대체 뭘 의미하는지 모르겠다. 이제 실제로 변수가 어떤 목적으로 사용되는지 주석을 같이 보자.

$one_day_posting = 0;	// 1일 이내 권장 등록 수.
$today_remain = 0;		// 오늘 등록 가능한 수.
$today_posting1 = 0;	// 1일 이내에 등록한 수.
$today_posting = 0;		// 3일 이내에 등록한 수.

주석을 같이 보니 $today_remain 정도를 제외하고는 왜 이름을 저렇게 지어놨는지 이해가 안된다. 아니, 주석을 보니까 더 모르겠다. 이쯤 되면 그냥 이해하고 싶지 않다.

마침 위의 변수들이 사용되는 부분을 고칠 수 있는 기회가 왔으니, 뒤엎어 버릴테다. 어떻게 바꿀지 잠깐 생각해보았다.

  • 1일 이내, 3일 이내에 붙은 today_는 지워준다.
  • 회원에 따라 일수가 상이하므로 몇일 이내 보다는 최대 일수 이내를 의미하도록 바꿔준다.
  • 권장 등록수와 실제 등록한 수를 구분해준다.
  • PSR에 맞추어 변수는 카멜 케이스를 적용한다.

이 정도를 생각하면서 다시 변수명을 지어보았다. 변수명만 보고도 어떤 값을 가지고 있는지 알 수 있게 하려고 해보았다.

$recommendedCountPerDay = 0;	// 하루 권장 등록 수.
$remainingCountToday = 0;	// 오늘 등록 가능한 수.
$postedCountInOneDay = 0;	// 1일 이내에 등록한 수.
$postedCountInMaxDays = 0;	// 최대 일수 이내에 등록한 수.

더 좋은 이름이 있을 수 있겠지만 최소한 위에서 사용한 의미 불명의 변수명들보다는 좋아졌다고 생각한다.

더 공부할 내용

불용어

인터넷 검색 시 검색 용어로 사용하지 않는 단어. 관사, 전치사, 조사, 접속사 등 검색 색인 단어로 의미가 없는 단어이다. 다만 각 검색 엔진마다 동일하지 않기 때문에 다를 수도 있다. 네이버 IT용어사전

0개의 댓글