본문 바로가기
Study/Clean Code

클린 코드 1-2장

by 소고기 굽는 개발자 2023. 6. 23.

1장 깨끗한 코드(P1)

1장에서는 유명한 프로그래머들이 자신들이 생각한 '깨끗한 코드'에 대해 설명합니다.

그 핵심은 코드들의 중복이 없고, 제대로 표현되어 모든 사람이 알아볼 수 있다는 것이었습니다.

프로그래머는 시스템을 개발하지만 한편으로는 자신이 만든 소스를 나누는 저자이기도 합니다.

그래서 독자들이 만족할 수 있도록 프로그래머는 끊임없이 기존의 코드를 읽고 리팩터링 하는 과정을 거치며 '깨끗한 코드'를 만들어야 합니다.

다음 장에서는 깨끗한 코드를 만들기 위한 내용을 소개합니다.

2장 의미있는 이름(P21)

한 개념에 한 단어를 사용해라

예를 들어 조회라는 개념의 메서드를 클래스마다 get, fetch, retrieve로 사용하면 혼동이 옵니다.

그래서 같은 개념의 메서드는 일관성 있는 메서드를 하나로 정하여 사용하는 것이 좋습니다.

의미있는 맥락을 추가하라

메서드 하나에 담긴 의미가 많을 경우 독자가 맥락을 유추해야될 경우가 생길 수 있습니다.

그래서 모호한 부분을 줄이고자 메서드를 클래스로 분류해 그 의미대로 세부적인 메서드와 변수를 만들면 읽는 프로그래머(독자)들이 소스를 통해 좀 더 명확히 파악할 수 있게 됩니다.

 

메서드 없이 분기만 한 경우

  private void printGuessStatics(char candidate, int count){ 
      String number;
      String verb; 
      String pluralModifier; 

      if(count == 0){ 
          number = "no"; 
          verb = "are"; 
          pluralModifier = "s"; 
      }else if(count == 1){ 
          ... 
      }else{ 
          ... 
      } 
      ... 
      print(); 
  }

현재 메서드에선 아무리 변수의 이름을 명확하게 짓더라도 읽는 프로그래머들의 해석이 중요해 집니다.

그 이유는 변수의 명칭을 넣지만 분기별로 그 변수의 값이 매번 달라지기 때문입니다.

 

의미있는 메서드로 분기한 경우

public class printGuessStatics{ 
    String number; 
    String verb; 
    String pluralModifier; 

    public String make(char candidate, int count){ 
        createPluralDependentMessagePart(count); 
        return print(); 
    } 

    public void createPluralDependentMessagePart(int count){ 
        if(count == 0){ 
            thereAreNoLetter(); 
        }else if(count == 1){ 
            thereAreOneLetter(); 
        }else{ 
            thereAreManyLetter(); 
        } 
    } 

    public void thereAreNoLetter(){ 
        number = "no"; 
        verb = "are"; 
        pluralModifier = "s"; 
    } 

      ... 
}

printGuessStatics을 하나의 클래스(=객체)로 보면서 그 속성과 특징을 명확하게 파악할 수 있게되었습니다.

예시로 이전 코드에서는 소스를 통해 분기의 내용을 독자가 직접 파악해야 했지만 이번 코드에선 분기 조건에 따라
출력되는 변수 값을 의미있는 하나의 메서드로 만들어 당장 구현은 어떻게 되는지 모르지만 어떤 의미로 사용했는지에
대한 유추는 가능해 집니다.

무작정 메서드명을 나눌 필요는 없지만 필요에 따라 한 메서드에 너무 많은 의미가 담겨 있을 경우에는 class로 분류해
변수와 메서드를 만드는 것도 좋은 방법이라 생각합니다.

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

클린 코드 3장  (0) 2023.06.23