글을 작성하기 전, 왜 우리는 Clean Code를 학습해야하며, 어떠한 마음 가짐으로 임해야하는지 알아보겠습니다.

 

<나쁜 코드로 치르는 대가>

프로젝트 초반 나쁜코드를 작성하며 번개처럼 속도를 낸다면, 시간이 지남에 따라 개발속도는 늦어집니다.

분명, 초반 개발속도는 매우 빠르고 힘차게 나갈지라도, 1-2년 후 결국 굼뱅이처럼 기어갈 수 밖에 없습니다.

프로젝트의 규모가 커지고 코드들이 얽히고 설킨 상황에 개발자가 코드를 '해독'해서 코딩을 한다면 분명 생산성에

문제가 있을 것 입니다.

 

 

<어떠한 마음가짐으로 코드를 작성해야 하는가?>

저자는 미국 보이스카우트가 따르는 간단한 규칙이 개발자들에게도 유용하다고 설명하고 있습니다.

 

           캠핑장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라.

 

체크아웃할 때보다 좀 더 깨끗한 코드를 체크인 한다면 코드는 절대 나빠지지 않습니다. 

사소하게 변수명 하나 또는 약간의 중복제거와 같은 간단한 코드정리가 쌓이다 보면 결국 프로젝트의 코드는 클린해질 것 입니다.

 

 

<의미 있는 이름>

 

1. 의도를 분명히 밝혀라

   변수나 함수 그리고 클래스 이름은 다음과 같은 굵직한 질문에 답해야 합니다.

     - 변수(혹은 함수나 클래스)의 존재 이유

     - 수행 기능

     - 사용 방법

   

   따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 말입니다.

 

※ 변경 전

public List<int[]> getThem() {
	List<int[]> list1 = new ArrayList<int[]>();
    
    for(int[] x : theList)
    	if(x[0] == 4)
            list1.add(x);
	return list1;
}

 

※ 변경 후

public List<int[]> getFlaggedCells() {
	List<int[]> flaggedCells = new ArrayList<int[]>();
    
    for(int[] cell : gameBoard)
    	if(cell[STATUS_VALUE] == FLAGGED)
        	flaggedCells.add(cell);
	return flaggedCells;
}

변경 전 코드에서는 getThem()함수가 어떤 함수이고, list1은 무엇이며, 상수 0과 4는 무엇을 암시하는지 전혀 알 수 없습니다.

하지만, 변경 후 코드에서는 함수, 변수, 상수가 하는 일을 명확히 알 수 있습니다.

 

<의미 있게 구분하라>

 

1. 연속적인 숫자를 덧붙인 이름을 사용하지 마라.

    - a1, a2, ..., aN 과 같은 이름은 아무런 정보도 제공하지 못하는 이름일 뿐입니다.

 

2. 불용어를 추가하지 마라.

    - 불용어를 추가한 이름은 아무런 정보도 제공하지 못합니다.

    - 만약, Product라는 클래스가 있다고 가정하고 다른 클래스를 ProductInfo, ProductData라 부른다면

      개념을 구분하지 않은 채 이름만 달리한 경우입니다.

      즉, 의미가 불분명한 불용어 입니다.

 

<클래스 이름>

 

클래스 이름과 객체 이름은 명사명사구가 적합하다. Customer, WikiPage, Account, AddressParser 등이 좋은 예다.

Manager, Processor, Data, Info 등과 같은 단어는 피하고, 동사는 사용하지 않는다.

 

 

<메서드 이름>

 

메서드 이름은 동사동사구가 적합하다. postPayment, deletePage, save등이 좋은 예입니다. 접근자(Accessor), 변경자(Mutator), 조건자(Predicate)는 javabean표준에 따라 값 앞에 get, set, is를 붙인다.

 

 

<기발한 이름은 피하라>

 

간혹 프로그래머가 나름대로 재치를 발휘해 구어체나 속어를 이름으로 사용하는 사례가 있습니다.

예를 들어, Kill() 대신에 whack()이라 부르거나 Abort() 대신 eatMyShort()라 부릅니다.

특정 문화에서만 사용하는 농담은 피하는 편이 좋습니다. 의도를 분명하고 솔직하게 표현해야합니다.

 

 

<한 개념에 한 단어를 사용하라>

 

1. 추상적인 개념 하나에 단어 하나를 선택해 이를 고수한다.

   - 똑같은 메서드를 클래스마다 fetch, retrieve, get으로 제각각 부르면 혼란스럽습니다. 만약 같은 기능을 하는 메서드

     라면 한 가지를 선택해 고수해야합니다.

 

2. 한 단어를 두 가지 목적으로 하용하지 마라.

   - 때때로, 프로그래머는 같은 맥락의 메서드 또는 클래스가 아닌데도 '일관성'을 고려해 한 가지 단어를 고수합니다.

     예를 들어, 지금까지 구현한 add() 메서드는 모두가 기존 값 두 개를 더하거나 이어서 새로운 값을 만든다고 생각해

     봅시다. 하지만, 새로 작성하는 add() 메서드는 집합에 값 하나를 추가하는 기능입니다.

     이 메서드를 add라 불러도 괜찮을까요?

 

     전혀 다른 기능의 add() 메서드입니다. 이름만 같게 지었을 뿐이지요. 그러므로, 새로 추가한 add() 메서드는 insert   

     나 append라는 이름을 사용하는 것이 적당합니다.

'STUDY > IT' 카테고리의 다른 글

[IT] 좋은 글인듯.. 읽어보자  (0) 2020.01.31
[IT] 변수명 지어주는 사이트(개발)  (1) 2020.01.28
[IT] Clean Code 리뷰 시작  (0) 2019.09.07
[IT] 이클립스 javascript 자동완성  (0) 2019.04.04
[IT]REST API란??  (0) 2019.03.02

+ Recent posts