//
Search
Duplicate
📖

[Clean Code] 2장 의미있는 이름

상태
클린코드
담당자
시작일
2022/04/29 09:24
최종편집일
2023/12/10 11:43
책을 읽게 된 계기
개발일을 하다 보면 내 코드도 시간이 지나 이해되지 않았던 적이 많았다.
이 책은 그러한 습관들로부터 벗어날 수 있는 방법을 제시해주었고,
계속 상기 시기키 위해 정리를 하게 되었다.
책의 내용이 많아서 챕터별로 정리를 하도록 하겠다.
책의 내용 - 의미 있는 이름

의도를 분명히 밝혀라!

'좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다.'
예를 들면 아래와 같은 코드가 있다고 해보자.
public List<int[]> getThem() { List<int[]> list 1 = new ArrayList<int[]>(); for (int[] x : theList) if (x[0] == 4) list1.add(x); return list1; }
Java
복사
코드가 하는 일을 짐작하기 어렵다.
1. TheList에 뭇엇이 들었는가?
2. TheList에서 0번째 값이 어째서 중요한가?
3. 값 4는 무슨의미인가?
4. 함수가 반환하는 리스트 list 1을 어떻게 사용하는가?
이처럼 의도가 분명하지 않은 변수명은 프로그래머가 무엇을 말하고 어떤 프로그램을 짜는지 알 수 없는 것이다.
public List<int[]> getThem() { List<int[]> flaggedCells = new ArrayList<int[]>(); for (cell cell : gemeBoard) if (cell.isFlagged()) flaggedCells.add(cell); return flaggedCells; }
Java
복사
theList -> gameBoard로 변경
List1 -> flaggedCells로 변경
이 두 개의 변수만 변경한 것으로 게임이라는 것을 추측할 수 있고,
또한 셀의 상태 값에 따라 깃발이 꽂히는 거라고 이해할 수 있다.

그릇된 정보를 피하라

1. 그릇된 단서
'예를 들면 계정 그룹을 묶을 때, 실제 List가 아니라면, accountList라 명명하지 않다.
프로그래머에게 List라는 단어는 특수한 의미다.
계정을 담는 컨터에너가 실제 List가 아니라면 프로그래머에게 그릇된 정보를 제공하는 셈이다.
그러므로 accountGroup, 아니면 단순히 Accounts라 명명한다.
2. 서로 흡사한 이름을 사용하지 않도록 한다.
최신 자바 환경은 코드 자동완성 기능을 제공한다.
이름만 몇 자만 입력해도 사용할 수 있으므로 흡사한 이름으로 헷갈리게 사용하지 않는다.
3. 정보와 목적을 사용한다면 코드 읽기가 쉬워진다.
예를 들어 Product라는 클래스가 있다고 가정하자.
다른  클래스를 ProductInfo 혹은 ProductData라 부른다면 개념을 구분하지 않은 채 이름만 들린 경우이다.
이와 마찬가지로 의미가 불분명한 불용어를 사용하면 안 된다.
읽는 사람이 차이를 알도록 이름을 지어라.

클래스 이름

클래스 이름과 객체 이름은 명사나 명사구가 적합하다.

메서드 이름

메서드 이름은 동사나 동사구가 적합하다.

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

코드를 읽는 사람도 프로그래머라는 사실을 명심한다. 그러므로 프로그램 용어를 사용해도 된다.
MAP, LIST, QUEUE를 모르는 프로그래머가 있을까? 기술 개념에는 기술 이름이 가장 적합한 선택이다.

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

적절한 '프로그래머 용어가'없다면 문제 영역에서 이름을 가져온다. 코드를 보수하는 프로그래머가 분야 전문가에게 의미를 물어 파악할 수 있게

의미 있는 맥락을 추가하라

모든 방법이 실패하면 마지막 수단으로 접두어를 붙인다.
예를 들어 firstName, LastName, Street라는 변수가 있다. 변수를 훑어보면 주소라는 사실을 금방 알아챈다. 하지만 street라는 변수 하나만 사용한다면? 추측하지 못할 것이다. 이럴 때 접두어 addrStreet을 사용한다. 더 나아가 객체를 만들고 해당하는 객체의 함수를 사용하면 독자에게는 더 쉽게 다가올 것이다.Address()를 만들고, Address(). getStreet을 사용하는 것 처럼.
리뷰
오늘은 클린 코드 1장 의미 있는 이름에 대해서 읽었다.
객체와 함수의 이름을 어떻게 지으면 좋을지와,
어떤 순으로 생각하는지 파악할 수 있었고,
'최대한 나의 프로그램이 남들도 볼 수 있게 구현되었으면 좋겠다.