욱'S 노트

Clean Code - 의미 있는 이름 본문

Methdology/Clean Code

Clean Code - 의미 있는 이름

devsun 2015. 6. 16. 10:36
의도를 분명히 밝혀라.

의도가 분명한 이름은 정말로 중요하다. 아래 예를 보면 로직의 복잡성은 변경된 것이 없지만 명명만 고침으로써 이해하기 훨씬 쉬워졌다.


public LIst<int[]> getThem() {

List<int[]> list1 = new ArrayList<>();


for (int[] x : theList) {

if (x[0] == 4) 

list1.add(x);


return list1;

}


public List<Cell> getFlaggedCells() {

List<Cell> flaggedCells = new ArrayList<Cell>();


for (Cell cell : gameBoard) 

if (cell.isFlagged())

fraggedCells.add(cell);


return flaggedCells;

}


그릇된 정보를 피하라.


accountList 보다는 accounts가 좋다. 컨테이너 유형을 이름에 넣지 않는 편이 바람직하다. 특정 조건에 의해 컨테이너가 변경된다면 곤란해질 수 있다.


int a = 1;

if ( o == 1 )

a =  ol;

else

1 = 0l;


위의 경우를 보면 영문과 숫자를 잘 구분하기 위해 폰트체를 바꿔야할 지경이다.


의미있게 구분하라.


불용어를 추가한 이름은 아무런 정보를 제공하지 못한다. 당신은 Product와 ProductInfo 혹은 ProductData의 클래스가 유지하는 정보를 구분할 수 있는가?


발음하기 쉬운 이름을 사용하라.


어떤 회사는 genymdhms 라는 변수명을 사용했다. generated date, year, month, day, hour, minutes, second라는 의미였다. 우리는 발음을 다 다르게 했다. "젠 와이 엠 디 에이치 엠 에스" 또는 "젠 야 무다 힘즈". 이렇게 변수명을 붙일 이유는 없다. generatedTimestamp 얼마나 좋은가?


검색하기 쉬운 이름을 사용하라.


숫자가 들어가면 검색이 어려워진다. 5 -> WORK_DAYS_PER_WEEK라는 상수로 추출하자. 로컬변수는 한문자 i, j를 사용해도 무방하지만 이름 길이는 범위 크기에 비례하는게 좋다.


쓸데없는 인코딩을 하지 마라.


phoneString이라고 처음에 지었다가 내부 문자 타입을 넘버로 변경하게 되어서 다음과 같이 바뀐다면 PhoneNumber phoneString 굉장히 어색하다.


m_desc에 m_ 같은 접두어를 붙이지 말자. 클래스와 함수는 접두어가 필요없을 만큼 작아야 마땅하다. 또한 IDE에서는 멤버변수를 다른 색상으로 보여준다. 


IShapeFactory와 같이 인터페이스를 표현하는 방법도 좋지 않다. 과도한 정보를 제공한다. 내가 다루는 클래스가 인터페이스라는 사실을 남에게 알리고 싶지 않다. 클래스 사용자는 그냥 ShapeFactory라고만 생각했으면 좋겠다. 


클래스 이름 


Customer, WikePage, Account, AddressParser는 좋다. Manager, Processor, Data, Info는 좋지 않고 동사는 사용하지 않는다.


메서드 이름


postPayment, deletePage, save 등의 좋다. 접근자, 변경자, 조건자는 javabean 표준을 따라 앞에 set, get, is를 붙이자.


StereoType에 하나의 단어를 사용하라.


 controller, manager, driver를 섞어쓰면 혼란스럽다. DriverManager와 ProtocolController의 역할은 과연 다른가? 둘다 Controller 혹은 Manager일 수는 없을까? 일관성 있는 어휘는 코드를 사용하는 프로그래머가 반갑게 여길 것이다. 


해법에서 사용한 이름을 사용하라.


VISITOR 패턴을 사용했다면 AccountVisitor라는 이름을 적합하다. JobQueue라는 클래스명을 이해하지 못하는 프로그래머는 없다.


의미있는 맥락을 추가하라.


한 클래스에 firstName, lastName, state 등이 변수로 가지고 있다. 좀 더 분명하게 addrFirstName, addrLastName, addrState라고 addr 접두어를 붙이면 더욱 명확해 진다.


불필요한 맥락를 없애라.


고급 휘발유 충전소에 관한 어플리케이션을 짠다고 모든 클래스에 GSD라는 접두어를 붙였다. IDE 검색 기능에서 G라는 접두어를 입력하는 순간 모든 클래스가 나타날 것이다.






'Methdology > Clean Code' 카테고리의 다른 글

Clean Code - 객체와 자료구조  (0) 2015.07.15
Clean Code - 형식 맞추기  (0) 2015.07.10
Clean Code - 주석  (0) 2015.07.08
Clean Code - 함수  (0) 2015.07.03
Clean Code - 깨끗한 코드  (0) 2015.06.16
Comments