도입
소프트웨어에서 변수, 함수, 인수, 클래스, 패키지 등 여러 부분에서 이름을 쓰게 된다. 더불어 소스코드, 소스파일이 담긴 디렉터리 등에도 마찬가지이다. 이렇듯 이름을 짓는건 프로그래밍의 시작이라 할 수 있고 이러한 이름들을 잘 짓는 방법을 알아보자
방법1) 의도를 분명히 밝혀라
- 말 그대로 이름에 의도를 분명하게 표현할 것**(정말 중요)**
- 변수의 존재 이유, 수행 기능, 사용 방법들에 대해 주석이 필요 없도록 만들어야함.
int d; => elapsedTimeInDays, daysSinceCreation, daysSinceModification 등
위 예시와 같이 정확한 의미를 함축적으로 담아야 한다.
⇒ 코드 맥락이 코드 자체에 명시적으로 드러나야 함.
방법2) 그릇된 정보를 피하라
- 코드에 그릇된 정보를 남겨서는 안됨.
- 특히, 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하지 않도록 함.(Ex. hp, aix, sco)
- 흡사한 이름을 사용하지 않음
- 유사한 개념은 유사한 표기법을 사용(일관성 유지를 통한 정보 제공)
- : 이를 통해 핫키(hotkey) 기능을 활용 가능하다.
방법3) 의미 있게 구분하라
- PS(Problem Solving)과 같이 단순히 인터프리터만 통과하도록 코드를 구현해서는 안됨.
- 연속된 숫자, 불용어 추가는 지양
- 이름이 다르면 의미도 달라져야함.
결국, 의미가 없으면 아무런 정보가 없는 것과 같음.
char a1, a2;
=> char source, destination
void getActiveAccount();
void getActiveAccounts();
void getActiveAccountInfo();
/*-- 위 세가지 함수에 대해 이름만으로 구분 불가 --*/
방법4) 발음하기 쉬운 이름을 사용하라
- 사람은 단어라는 개념에 대해 익숙하다.
- 따라서, 실존하는 단어를 활용하는 것이 좋고, 발음 가능한 단어를 선택하자.: 전혀 발음 불가하며, 신입 개발자가 코드 리뷰시 와닿지 않음.
- 개선안: generationTimeStamp
- Ex) genymdhms(generate date, year, month, day, hour, minute, second의 조합)
방법5) 검색하기 쉬운 이름을 활용하라
- 상수 표현 시 단순히 “7”, ”9”와 같이 표현하는 것이 아닌 해당 상수에 알맞게 이름을 정해줘라.: 수정 후에는 “NUMBER_OF_TASKS”로 찾기 가능
- //수정 전 for(int i = 0 ; i < 10 ; i++) //수정 후 const int NUMBER_OF_TASKS = 10; for(int i = 0 ; i < NUMBER_OF_TASKS ; i++)
방법 6) 인코딩을 피하라
- 굳이 추가하지 않아도 변수 이름에 인코딩해야할 정보는 많다.
- 그렇기 때문에 인코딩 “언어”까지 익히는 것은 비합리적이다.
방법 7) 자신의 기억력을 자랑하지 마라
- 단순 루프에서 i, j, k정도는 괜찮지만 그 외 자신만이 아는 이름으로 변환하지 마라.
- 전문가 프로그래머는 자신의 능력을 통해 남들이 이해하기 좋은 코드를 내놓는다.
방법 8) 클래스 이름 및 메서드 이름
- 클래스 이름
- 명사나 명사구가 적합
- Ex. Customer, WikiPage, Account 등
- 메서드 이름
- 동사나 동사구가 적합
- Ex. postPayment, deletePage, save 등
방법 9) 기발한 이름은 피하라
- 이름이 너무 기발하면 유머 감각이 비슷한 사람만, 그리고 농담을 기억하는 동안만 기억한다.
- 따라서, 재미난 이름보다는 명료한 이름을 선택하라.
방법 10) 한 개념에 한 단어를 사용하라
- 똑같은 “가져오다”라는 기능을 수행하는 메서드에 대해 fetch, retrieve, get 등 다양하게 사용하면 헷갈린다.
- 따라서, 하나의 “가져오다”라는 개념에 대해서는 모든 메서드에 대해 사전에 규칙에 따라 사용한다.
방법 11) 말장난을 하지 마라
- 한 단어를 두 가지 목적으로 사용하지 마라.
- 방법 10에 의해서 “같은 맥락”이면 “같은 단어”를 사용하는 것이 맞다.
- 하지만, “다른 맥락”이라면 “다른 단어”를 사용해야 할 것이다.
- void insert(); // 추가 void add(); // 덧셈 /*-- insert() != add() --*/
방법 12) 해법, 문제 영역에서 가져온 이름을 사용하라
- 코드를 읽는 사람 = 프로그래머 = 기술적 지식 보유자
- 따라서, “프로그래머적 용어”가 가장 효율적일 것이다.
- 적절한 “프로그래머적 용어”가 없다면 문제 영역에서 만들어 낸다.
- 유지보수 프로그래머는 간단한 질문으로 파악 가능하다.
방법 13) 의미 있는 맥락을 추가. 불필요 맥락 제거
Ex1) firstName, lastName, street, houseNumber, city, state 는 주소 정보를 뜻함
- 하지만, state만 두고 봤을 때 이것이 주소에 관련된 정보인지 알 수 없음.
- 따라서, 주소 관련 변수를 addrFirstName, addrlastName, addrState 등과 같이 의미 있는 맥락 추가
Ex2) 고급 휘발유 충전소(GSD - Gas Station Deluxe)에서 회계 모듈에 MailingAddress를 추가하는 경우
- 주소 정보 관련 클래스 이름을 GSDAccountAddress와 같이 짓는것은 바람직하지 못하다.
- 클래스 명은 Address, 인스터스 변수명을 GSDAccountAddress로 짓는 것이 바람직하다.
- 더 나아가 MAC 주소, URI 주소를 표현할 때에는 MAC, URI로 표현 가능하다.
결론
- 좋은 이름을 선택하려면 설명 능력이 뛰어나야 하다.
- 가끔은 이름 바꾸는 것이 잘못 될까 두렵지만, 개발자라면 꾸준히 시도해나가야 하는 것이다.
- 코드 구조를 변경하는 것보다 이름을 더 명료하게, 간결하게 짓는 것이 코드 가독성을 높이는데 큰 도움이 될 것이다.
원본 노션 링크
[Clean Code] - 2장 의미 있는 이름
도입
leapday.notion.site
'[Book] > Clean Code' 카테고리의 다른 글
[Clean Code] - 4장 주석(1) 좋은 주석이란? (1) | 2023.02.13 |
---|---|
[Clean Code] - 3장 함수(2) (0) | 2023.02.08 |
[Clean Code] - 3장 함수(1) (0) | 2023.02.07 |
[Clean Code] - 1장 깨끗한 코드 (2) | 2023.01.17 |
도입
소프트웨어에서 변수, 함수, 인수, 클래스, 패키지 등 여러 부분에서 이름을 쓰게 된다. 더불어 소스코드, 소스파일이 담긴 디렉터리 등에도 마찬가지이다. 이렇듯 이름을 짓는건 프로그래밍의 시작이라 할 수 있고 이러한 이름들을 잘 짓는 방법을 알아보자
방법1) 의도를 분명히 밝혀라
- 말 그대로 이름에 의도를 분명하게 표현할 것**(정말 중요)**
- 변수의 존재 이유, 수행 기능, 사용 방법들에 대해 주석이 필요 없도록 만들어야함.
int d; => elapsedTimeInDays, daysSinceCreation, daysSinceModification 등
위 예시와 같이 정확한 의미를 함축적으로 담아야 한다.
⇒ 코드 맥락이 코드 자체에 명시적으로 드러나야 함.
방법2) 그릇된 정보를 피하라
- 코드에 그릇된 정보를 남겨서는 안됨.
- 특히, 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하지 않도록 함.(Ex. hp, aix, sco)
- 흡사한 이름을 사용하지 않음
- 유사한 개념은 유사한 표기법을 사용(일관성 유지를 통한 정보 제공)
- : 이를 통해 핫키(hotkey) 기능을 활용 가능하다.
방법3) 의미 있게 구분하라
- PS(Problem Solving)과 같이 단순히 인터프리터만 통과하도록 코드를 구현해서는 안됨.
- 연속된 숫자, 불용어 추가는 지양
- 이름이 다르면 의미도 달라져야함.
결국, 의미가 없으면 아무런 정보가 없는 것과 같음.
char a1, a2;
=> char source, destination
void getActiveAccount();
void getActiveAccounts();
void getActiveAccountInfo();
/*-- 위 세가지 함수에 대해 이름만으로 구분 불가 --*/
방법4) 발음하기 쉬운 이름을 사용하라
- 사람은 단어라는 개념에 대해 익숙하다.
- 따라서, 실존하는 단어를 활용하는 것이 좋고, 발음 가능한 단어를 선택하자.: 전혀 발음 불가하며, 신입 개발자가 코드 리뷰시 와닿지 않음.
- 개선안: generationTimeStamp
- Ex) genymdhms(generate date, year, month, day, hour, minute, second의 조합)
방법5) 검색하기 쉬운 이름을 활용하라
- 상수 표현 시 단순히 “7”, ”9”와 같이 표현하는 것이 아닌 해당 상수에 알맞게 이름을 정해줘라.: 수정 후에는 “NUMBER_OF_TASKS”로 찾기 가능
- //수정 전 for(int i = 0 ; i < 10 ; i++) //수정 후 const int NUMBER_OF_TASKS = 10; for(int i = 0 ; i < NUMBER_OF_TASKS ; i++)
방법 6) 인코딩을 피하라
- 굳이 추가하지 않아도 변수 이름에 인코딩해야할 정보는 많다.
- 그렇기 때문에 인코딩 “언어”까지 익히는 것은 비합리적이다.
방법 7) 자신의 기억력을 자랑하지 마라
- 단순 루프에서 i, j, k정도는 괜찮지만 그 외 자신만이 아는 이름으로 변환하지 마라.
- 전문가 프로그래머는 자신의 능력을 통해 남들이 이해하기 좋은 코드를 내놓는다.
방법 8) 클래스 이름 및 메서드 이름
- 클래스 이름
- 명사나 명사구가 적합
- Ex. Customer, WikiPage, Account 등
- 메서드 이름
- 동사나 동사구가 적합
- Ex. postPayment, deletePage, save 등
방법 9) 기발한 이름은 피하라
- 이름이 너무 기발하면 유머 감각이 비슷한 사람만, 그리고 농담을 기억하는 동안만 기억한다.
- 따라서, 재미난 이름보다는 명료한 이름을 선택하라.
방법 10) 한 개념에 한 단어를 사용하라
- 똑같은 “가져오다”라는 기능을 수행하는 메서드에 대해 fetch, retrieve, get 등 다양하게 사용하면 헷갈린다.
- 따라서, 하나의 “가져오다”라는 개념에 대해서는 모든 메서드에 대해 사전에 규칙에 따라 사용한다.
방법 11) 말장난을 하지 마라
- 한 단어를 두 가지 목적으로 사용하지 마라.
- 방법 10에 의해서 “같은 맥락”이면 “같은 단어”를 사용하는 것이 맞다.
- 하지만, “다른 맥락”이라면 “다른 단어”를 사용해야 할 것이다.
- void insert(); // 추가 void add(); // 덧셈 /*-- insert() != add() --*/
방법 12) 해법, 문제 영역에서 가져온 이름을 사용하라
- 코드를 읽는 사람 = 프로그래머 = 기술적 지식 보유자
- 따라서, “프로그래머적 용어”가 가장 효율적일 것이다.
- 적절한 “프로그래머적 용어”가 없다면 문제 영역에서 만들어 낸다.
- 유지보수 프로그래머는 간단한 질문으로 파악 가능하다.
방법 13) 의미 있는 맥락을 추가. 불필요 맥락 제거
Ex1) firstName, lastName, street, houseNumber, city, state 는 주소 정보를 뜻함
- 하지만, state만 두고 봤을 때 이것이 주소에 관련된 정보인지 알 수 없음.
- 따라서, 주소 관련 변수를 addrFirstName, addrlastName, addrState 등과 같이 의미 있는 맥락 추가
Ex2) 고급 휘발유 충전소(GSD - Gas Station Deluxe)에서 회계 모듈에 MailingAddress를 추가하는 경우
- 주소 정보 관련 클래스 이름을 GSDAccountAddress와 같이 짓는것은 바람직하지 못하다.
- 클래스 명은 Address, 인스터스 변수명을 GSDAccountAddress로 짓는 것이 바람직하다.
- 더 나아가 MAC 주소, URI 주소를 표현할 때에는 MAC, URI로 표현 가능하다.
결론
- 좋은 이름을 선택하려면 설명 능력이 뛰어나야 하다.
- 가끔은 이름 바꾸는 것이 잘못 될까 두렵지만, 개발자라면 꾸준히 시도해나가야 하는 것이다.
- 코드 구조를 변경하는 것보다 이름을 더 명료하게, 간결하게 짓는 것이 코드 가독성을 높이는데 큰 도움이 될 것이다.
원본 노션 링크
[Clean Code] - 2장 의미 있는 이름
도입
leapday.notion.site
'[Book] > Clean Code' 카테고리의 다른 글
[Clean Code] - 4장 주석(1) 좋은 주석이란? (1) | 2023.02.13 |
---|---|
[Clean Code] - 3장 함수(2) (0) | 2023.02.08 |
[Clean Code] - 3장 함수(1) (0) | 2023.02.07 |
[Clean Code] - 1장 깨끗한 코드 (2) | 2023.01.17 |