[클린 코드(Clean Code) ] Ch2 - 의미 있는 이름
2021. 1. 20. 19:00ㆍ04. Archives/독서
728x90
반응형
Ch2. 의미 있는 이름
의도를 분명히 밝혀라
- 변수나 함수 그리고 클래스 이름은 다음과 같은 굵직한 질문에 모두 답해야 한다.
- 변수 (혹은 함수나 클래스)의
- 존재 이유는?
- 수행 기능은?
- 사용 방법은?
- 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 것
- 변수 (혹은 함수나 클래스)의
의미 있게 구분해라
컴파일러나 인터프리터만 통과하려는 생각으로 코드를 구현하면 언젠가는 문제가 생기기 마련
연속된 숫자를 덧붙이거나 불용어(의미가 불분명하거나 없어도 되는 단어)를 추가하는 방식은 적절하지 못함
이름이 달라야 한다면 의미도 달라져야 한다.
변수의 이름으로 아무런 정보를 제공 받지 못하는 예시
public static void copyChars(char a1[], char a2[]){ for (int i = 0; i < a1.length; i++) { a2[i] = a1[i]; } }
수정하면 아래와 같다.
public static void copyChars(char source[], char destination[]){ for (int i = 0; i < source.length; i++) { destination[i] = source[i]; } }
발음하기 쉬운 이름을 사용하라
날짜 및 시간 정보를 제공해주는 이름의 경우
genymdhms // generate date; 'y'ear, 'm'onth, 'd'ay, 'h'our, 'm'inute, 's'econd // 어떻게 읽어야할지 감도 안잡히는 단어 // vs // generationTimestamp; // 좀 길지만 의미도 정확하고 명확하게 읽을 수 있는 단어 -> 더 좋은 이름
검색하기 쉬운 이름을 사용하라
변수나 상수를 코드 여러 곳에서 사용한다면 검색하기 쉬운 이름이 바람직하다
for (int j=0; j<34; j++){ s += (t[j]*4)/5; } // vs // int realDayPerIdealDay = 4; const int WORK_DAYS_PER_WEEK = 5; int sum = 0; for (int j=0; j < NUMBER_OF_TASKS; j++){ int realTaskDays = taskEstimate[j] * realDaysPerIdealDay; int realTaskWeeks = (realTaskDays / WORK_DAYS_PER_WEEK); sum += realTaskWeeks; }
- 같은 의미를 가지고 알아보기 쉬운만큼 변수의 길이는 훨씬 길다
- 그래도 프로젝트의 사이즈가 커지면 위의 값들을 검색을 통해 찾기 훨씬 용이하다
인코딩을 피하라
- 헝가리식 표기법
- 예전 프로그래밍 언어들은 이름의 길이가 제한되어 있었기 때문에 이런 방식이 도움이 됐지만
- 지금은 헝가리식 표기법이나 인코딩 방식이 컴파일이나 타입 오류를 발견하는데 많은 영향을 주진 않기 때문에 오히려 방해가 됨
자신의 기억력을 자랑하지 마라
- 루프에서 반복 횟수를 세는 변수 i, j, k를 제외하면 문자 하나만 사용하는 변수 이름은 문제가 있음
- 전문가 프로그래머는 명료함이 최고라는 사실을 이해한다.
- 클래스 이름, 객체 이름
- 명사나 명사구가 적합하다.
- 동사는 사용하지 않는다.
- 메서드 이름
- 동사나 동사구가 적합
- 접근자, 변경자, 조건자는 작성하는 언어의 표준에 따라 값 앞에 get, set, is와 같은 접두어를 붙임
- 클래스 이름, 객체 이름
한 개념에 한 단어를 사용해라
- 추상적인 개념 하나에 단어 하나를 선택한다.
- ex) 똑같은 메서드를 클래스마다 fetch, retrieve, get과 같이 제각각으로 부르면 안됨
- 단, 맥락이 다르다면 다른 단어를 이용해야함
의미 있는 맥락을 추가하라
- ex) firstName, lastName, street, houseNumber, city, state, zipcode 라는 변수가 있을 때,
- 변수 전체를 보면 주소임을 추론할 수 있지만, 만약 어느 메서드가 state만을 이용한다면 해당 변수만을 보고 이 변수가 주소의 state임을 추론하기는 어렵다
- 따라서 addr와 같은 접두어를 추가하여 보면 읽는 사람이 더 이해하기 쉽다.
- 물론 Address라는 클래스를 생성하면 훨씬 더 명확해진다.
불필요한 맥락을 없애라
- 일반적으로 짧은 이름이 긴 이름보다 좋다.
- 단, 의미가 분명한 경우에 한해서
반응형
'04. Archives > 독서' 카테고리의 다른 글
[클린 코드 (Clean Code)] Ch4. 주석 (0) | 2021.01.22 |
---|---|
[클린 코드 (Clean Code)] Ch3. 함수 (0) | 2021.01.21 |
[책/코딩] 클린 코드(Clean Code) - 애자일 소프트웨어 장인 정신 정리 (0) | 2021.01.19 |
Tistory 블로그 마크다운 테스트 (0) | 2020.06.21 |
[개발/코딩/프로그래밍] 개발자의 글쓰기 (0) | 2020.06.21 |