애플펜슬을 잃어버렸다.. 아이패드에 필기를 할 수 없다.. 종이엔 필기하는 맛이 없다..
2장은 이름을 잘 짓는 방법을 소개하는 장이다. 그래서 그런지 구구절절 책 내용만 요약하게 될거 같다.. 책에 밑줄 긋고 필기한 부분 위주로 정리를 하려 한다.
그리고 새로운 issue.. 갑자기 내 맥북 한글 자판 딜레이가 장난아니다... 글 쓰기 어렵다.. 왜이러는걸까 크롬에서는 심한데 사파리에서는 안그런다.. 알수없는 m1..
의도를 분명히 밝혀라
1장에서 좋은 코드를 짜는데 시간은 오래걸리지만 좋은 코드로 절약하는 시간이 더 많다는 것 처럼, 좋은 이름을 짓기엔 시간이 좀 걸리지만 그만큼 절약하는 시간이 훨씬 더 많다고 한다. 변수, 함수, 클래스 이름은 다음과 같은 정보가 포함되어야 한다. 존재 이유, 수행기능, 사용방법.. 이름만 보고도 함수가 하는 일을 이해하기 쉽도록.
그릇된 정보를 피해라
이부분은 내가 처음 플젝했을 때 했던 실수다. 사실 잘못됐다는 것도 이 책을 보고 알았다.
List라는 단어는 특별한 단어로, 실제 list가 아니라면 사용해선 안된다. 그릇된 정보를 주는 것이다. 예를 들면 여러 계정을 그룹으로 묶을 때 accountList라고 명명하는 경우. 계정 그룹이지 실제 list가 아니니 account라고 명명하는 편이 낫다.
또한 소문자 L과 대문자 O가 들어가는 경우 주의해야한다. l(영어 L이다!)은 1처럼 보이고 O는 0처럼 보이기 때문이다. 지금 이렇게 글로 쓰는데도 헷갈린다.. 영어 l이 한글ㅣ처럼 보인다. 아니 실제로 봐도 별 차이 없어보이는데?.. 아무튼 코딩할땐 한글 ㅣ를 쓸일이 없으니 괜찮긴 하지만 이렇게 헷갈리지 주의해야 한다.
검색하기 쉬운 이름을 사용하라
의미있는 상수라면 이름을 붙이자!
예를 들면 숫자 7을 검색하기는 은근 까다롭다. 파일명이나, 7이 들어가는 수식 등 다양한 곳에서 검색이 되기 때문에 MAX_CLASS등으로 상수에 이름을 붙이면 검색하기 편하다. 마찬가지로 e라는 문자도 변수로 사용하면 검색하기에 어렵다. e가 들어간 단어들이 수도 없이 많을테니..
간단한 메서드에는 로컬변수만 한 문자를 사용한다고 한다. 하지만 변수나 상수가 여러 코드에서 사용된다면 당연히 검색하기 편한 이름이 바람직하다. 아래 코드를 보면
for (int i=0;j<34;j++){
s+=(t[j]*4)/5;
}
이런 간단한 for문에서 길게 변수를 선언하고, 숫자를 모두 상수 취급해버리면 메서드 길이는 짧아진다. 하지만 의미있는 상수나 변수를 찾기는 매우 어려울 것이다.
클래스 이름과 메서드 이름
클래스나 객체 이름은 명사나 명사구를 , 메서드 이름은 동사나 동사구가 적합하다. 이건 대부분 다들 알고있겠지... 갑자기 코드 컨벤션이 생각난다.. 카멜컨벤션.. 그리고 애플망고를 표기할때 고유명사니까 applemango로 적어야지 appleMango는 안된다는...
한 개념에 한 단어를 사용해라
사실 이건 짧은 영어 실력에 생각지도 못한 문제상황이었다. 평소에 get을 많이 사용해서 그런지 get 대신 fetch, retrieve를 사용할 생각을 해본적이 없었다. 같은 메서드를 클래스마다 get, fetch, retrieve등 섞어서 쓴다면 혼란을 준다. 따라서 작가는 한개념에 한 단어를 사용하라고 했다. 또 다른 예시도 있다.
- controller, manager, driver
일관성 있게 코드를 짜자!
이건 이해가 잘 안가는 부분이었다. 해법 영역과 문제영역이 뭘 말하는지 몰랐다.
- 해법영역에서 가져온 이름을 사용하라
: 모든 이름을 도메인 영역에서 가져오는 것은 현명하지 못하다.
기술 개념에는 기술 이름이 가장 적합하다.
해법 영역이라는건 문제를 해결할만한 답이 있는 곳에서 이름을 가져오라는 것일까?
- 문제 영역에서 가져온 이름을 사용하라
: 적절한 프로그래머 용어가 없다면 문제 영역에서 이름을 가져온다
문제영역이란 뭘까.. 문제가 있는 곳의 이름을 따오는걸까?
작가는 우수한 프로그래머와 설계자라면 해법영역과 문제영역을 구분할 줄 알아야 한다고 한다. 우수한 프로그래머가 되기 위해 이게 해법 영역과 문제영역을 구분하고 싶었다. 아무래도 한글 번역만으로는 이해를 못할 것 같아서 원서엔 어떻게 표현되었는지 궁금해서 영어로 구글링을 해봤다.
책에 있는 내용을 영어로 잘 적어놓으셨다.. 영역이라는 단어가 나에겐 애매하게 다가왔던 것 같은데 그냥 도메인 이름, 도메인 영역이었던것 이었다.. 심플한데 그냥 한국판 클린코드가 원서로 적혀있는거라 내용은 똑같아서 도대체 해법 영역과 문제영역이 뭔지 궁금증이 해결되진 않았다.
이건 한글로 구글링 했을 때 나온 유능하신 분의 블로그 정리중 일부이다. 앞으로도 이 단어가 나올 것인가 보다..
해법 영역에서 명명할 이름은 굳이 문제영역인 도메인, 비즈니스 로직등에서 이름을 따올 부분이 아닌, 프로그래머들이 이름을 생성할 수 있는 영역인 것 같다. 이게 내 결론이다 !
아마 클린코드 글 업로드는 주1회 될 것 같다.. 끝!
'서적 공부 > 클린코드' 카테고리의 다른 글
[클린코드] 1장을 읽고 나서.. 및 앞으로 계획 (2) | 2023.08.10 |
---|