Clean Code - 02. 의미 있는 이름

의도를 분명히 밝혀라

변수(혹은 함수나 클래스)의 존재 이유, 수행 기능, 사용 방법을 드러낼 수 있도록 한다
좋은 이름 -> 만드는데 시간이 걸린다 (1인) -> 코드를 읽는 사람이 행복해진다 (다수)

// 의미 없는 이름
int d; // 경과 시간 (단위 : 날짜)

// 의도가 드러나는 이름
int elapsedTimeInDays;
int daysSinceCreation;
int daySinceModification;
int fileAgeInDays;

그릇된 정보를 피하라

널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하면 안된다
cnt ?
내가 생각한 것 : count
실제 의미하는 것 : content
aes ?
내가 생각한 것 : 암호화 방식
실제 의미하는 것 : autoever system

서로 흡사한 이름을 사용하지 않도록 주의한다.

// 회사에서 사용하는 호출 주소
/selectretrieve.action
/selecttocretrieve.action
/selecttoctreeretrieve.action
/selecttoctreeinnerretrieve.action

의미 있게 구분하라

public static void copyChars(char a1[], char a2[]) // 의미를 찾기 어렵다
public static void copyChars(char source[], char destination[]) // 의미 있다

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

프로그래밍은 사회활동이기 때문에 발음하기 쉬운 이름은 중요하다.
genymdhms (generate date, year, month, day, hour, minute, second)
-> 젠 와이 엠 디 에이취 엠 에스
-> 젠 야 무다 힘즈
=> generationTimestamp
-> 그대로 읽을 수 있음!!

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

MAX_CLASSES_PER_STUDENT는 찾기 쉽지만 7은 찾기 쉽지 않다
변수나 상수를 코드 여러 곳에서 사용한다면 검색하기 쉬운 이름이 바람직하다
-> 이름 길이는 범위 크기에 비례해야 한다

인코딩을 피하라

유형이나 범위 정보까지 넣으면 그만큼 이름을 해독하기 어려워진다

헝가리식 표기법

변수 이름으로 그 변수의 종류를 -상수/클래스/typedef/포인터 및 그외- 알 수 있도록 만든 표기법
당시는 컴파일러가 타입을 점검하지 않았으므로 프로그래머에게 타입을 기억할 단서가 필요했다

멤버 변수 접두어

인터페이스 클래스와 구현 클래스

인터페이스와 구현 클래스가 있을 때는 인터페이스 이름은 두고 구현 클래스에 ~Impl을 붙인다

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

코드를 읽으면서 변수 이름을 자신이 아는 이름으로 변환해야 한다면 그 이름은 바람직하지 못하다

클래스 이름 / 메서드 이름

클래스 이름 : 명사/명사구
메서드 이름 : 동사/동사구

기발한 이름은 피하라

특정 정보, 문화를 알아야 이해할 수 있는 이름은 피하자

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

추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다
일관성 있는 어휘를 사용하자
fetch, retrieve, get
controller, manager, driver

말장난을 하지 마라

한 단어를 두 가지 목적으로 사용하지 말자
기존 값 두 개를 더하거나 이어서 새로운 값을 만드는 메서드 -> add라고 했을 때
집합에 값 하나를 추가하는 메서드 -> add라고 해도 될까???
=> 일관성을 지키려면 insert/append가 적당해보인다
프로그래머는 코드를 최대한 이해하기 쉽게 짜야 한다

해법 영역에서 가져온 이름을 사용하라

기술 개념에는 기술 이름이 가장 적합한 선택이다

문제 영역에서 가져온 이름을 사용하라

문제 영역 개념과 관련이 깊은 코드라면 문제 영역에서 이름을 가져와야 한다

의미 있는 맥락을 추가하라

firstName, lastName, street, houseNumber, city, state, zipcode
-> 다같이 보면 주소를 의미하는 변수들이라는 것을 알 수 있다
-> state만 있다면 주소의 의미를 가진 변수란 걸 알 수 있을까??
=> addr이라는 접두어를 추가해 addrFirstName, addrLastName, addrState
-> 의미가 좀 더 분명해진다
=> Address라는 클래스를 생성하면 더 좋다

불필요한 맥락을 없애라

이름에 불필요한 맥락을 추가하지 않도록 주의한다

내 생각

이름 짓는 거 너무 어렵다…
함수명 뭘로 짓지 고민하다가 반나절을 보낸 적이 있다
그렇다고 해서 썩 마음에 드는 이름을 짓진 못했다
경험과 데이터가 쌓인다면 좀 수월해질 수 있을까?

회사 규칙

모바일 파트

개발 언어 사이트에서 가이드하는 규칙을 기본적으로 따르고, 기타는 내부 규칙을 따른다
윈도우 -> 모바일로 확장하는 과정에서 C스타일 네이밍으로 모바일 개발 진행함

서버파트

크게 정해둔 규칙은 없고 이전 코드 따라서 작성하는 정도..
-> 회사에 건의해보고 싶지만 인력 부족으로 당장 개선되지 않을듯함

프로젝트 1

함수명 및 id 지을 때 페이지명(파일명)이 들어가도록 함
-> get페이지명Chart() / id=”div페이지명Chart”
-> 프로젝트 내 전체 검색이 용이하다
같은 기능을 하는 함수지만 호출url이 달랐기 때문에 공통으로 사용하기 어려웠음
-> 예를 들면 차트에 나타낼 데이터를 가져와 화면에 보여준다

태그:

카테고리:

업데이트: