클린 코드 - 2장 의미 있는 이름
26 Mar 2021Intro
초서-독서 한 내용을 그대로 적는 곳이기 때문에 책을 읽지 않은 분들이 보기에 맥락이 애매할 수 있습니다.
초서 : 책을 읽는데 그치는 것이 아닌 손을 이용해 책의 중요한 내용을 옮겨 적음으로써 능동적으로 책의 내용을 수용하고 판단하여 새로운 지식을 재창조하는 과정. 메타인지 학습법
Index
- 들어가면서
- 1장 깨끗한 코드
- 2장 의미 있는 이름 «
- 3장 함수
- 4장 주석
- 5장 형식 맞추기
- 6장 객체와 자료 구조
- 7장 오류 처리
- 8장 경계
- 9장 단위 테스트
- 10장 클래스
- 11장 시스템
- 12장 창발성(創發性)
- 13장 동시성
- 14장 점진적인 개선
- 15장 JUnit 들여다보기
- 16장 SerialDate 리팩터링
- 17장 냄새와 휴리스틱
2장 의미 있는 이름
의도를 분명히 밝혀라
” 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다. “
- 변수(혹은 함수나 클래스)의 존재 이유는 ?
- 수행 기능은 ?
- 사용 방법은 ?
따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말이다.
public List<int[]> getThem() {
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x : theList)
if (x[0] == 4)
list1.add(x);
return list1;
}
위 코드는 암암리에 다음과 같은 정보를 안다고 가정한다.
- theList에 무엇이 들었는가 ?
- theList에서 0번째 값이 어째서 중요한가 ?
- 값 4는 무슨 의미인가 ?
- 함수가 반환하는 리스트 list1을 어떻게 사용하는가 ?
public List<Cell> getFlaggedCells() {
List<Cell> flaggedCells = new ArrayList<Cell>();
for (Cell cell : gameBoard)
if (cell.isFlagged())
fraggedCells.add(cell);
return flaggedCells;
}
단순히 이름만 고쳤는데도 함수가 하는 일을 이해하기 쉬워졌다.
바로 이것이 좋은 이름이 주는 위력이다.
의미 있게 구분하라
getActiveAccount();
getActiveAccounts();
getActiveAccountInfo();
이 프로젝트에 참여한 프로그래머는 어느 함수를 호출할지 어떻게 알까 ?
읽는 사람이 차이를 알도록 이름을 지어라.
발음하기 쉬운 이름을 사용하라
검색하기 쉬운 이름을 사용하라
인코딩을 피하라
” 문제 해결에 집중하는 개발자에게 인코딩은 불필요한 정신적 부담이다. “
자신의 기억력을 자랑하지 마라
" 코드를 읽으면서 변수 이름을 자신이 아는 이름으로 변환해야 한다면
그 변수 이름은 바람직하지 못하다. (변수 i, j, k는 괜찮다) "
" 전문가 프로그래머는 명료함이 최고라는 사실을 이해한다. "
클래스 이름
”
Manager
Processor
Data
Info
등과 같은 단어는 피하고, 동사는 사용하지 않는다. “
메서드 이름
” 동사나 동사구가 적합 “
생성자를 중복정의 할 때는 정적 팩토리 메서드를 사용한다.
Complex complex = Complex.FromRealNumber(23.0);
( o )
Complex complex = new Complex(23.0);
( x )
기발한 이름은 피하라
한 개념에 한 단어를 사용하라
” 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다. “
똑같은 메서드를 클래스 마다 fetch
, retrieve
, get
으로 제각각 부르면 혼란스럽다.
말장난을 하지 마라
- 집합에 값 하나를 추가하는
add
메서드 - 기존 값 두 개를 더하거나 이어서 새로운 값을 만드는
add
메서드
두 메서드는 맥락이 다르다. 일관성을 지키기 위해add
를 고수할 필요 없다.
insert
나append
와 같은 이름이 적당함.
해법 영역에서 가져온 이름을 사용하라
” 코드를 읽을 사람도 프로그래머라는 사실을 명심한다.
그러므로 전산 용어, 알고리즘 이름, 패턴 이름, 수학 용어 등을 사용해도 괜찮다. “
문제 영역에서 가져온 이름을 사용하라
” 적절한 ‘프로그래머 용어’가 없다면, 문제 영역(도메인 영역?)에서 이름을 가져온다. “
의미 있는 맥락을 추가하라
" 클래스, 함수, 이름 공간에 의미를 넣어 맥락을 부여한다. "
" 모든 방법이 실패하면 마지막 수단으로 접두어를 붙인다. "
불필요한 맥락을 없애라
- 들어가면서
- 1장 깨끗한 코드
- 2장 의미 있는 이름 «
- 3장 함수
- 4장 주석
- 5장 형식 맞추기
- 6장 객체와 자료 구조
- 7장 오류 처리
- 8장 경계
- 9장 단위 테스트
- 10장 클래스
- 11장 시스템
- 12장 창발성(創發性)
- 13장 동시성
- 14장 점진적인 개선
- 15장 JUnit 들여다보기
- 16장 SerialDate 리팩터링
- 17장 냄새와 휴리스틱