티스토리 뷰

Programming/기타

Clean Code

NavyGuy 2020. 8. 1. 20:18

Overview

클린코드 책을 읽고, 짧은 후기를 써보려한다.

목표

  1. 클린코드에 대해 쉽게 생각하기

  2. 실무에서 클린코드 잘 적용하기


이름을 잘짓자

의도를 분명히 밝혀라

나쁜예
int a;  
int b;  
좋은예
long batchStartTime;  
long batchEndTime;  
long elapsedTimeInDays;  

길어도 좋으니 형용사 + 명사를 조합하여 변수명에 작성자의 의도를 명확히 드러내자.
단 루프(for문..)에서는 전통적으로 한글자 변수를 사용함( i, j, k , 단! l, o 는 안됨! 숫자랑 헷갈림 ㅎ )

애매한 단어나 프로그램 단어는 되도록이면 피하자

애매한 작명은 피하자

나쁜예
int O = 0;
int l = 0; 
if(O == 0)  
if(l == 1) 

프로그램에서 통용되는 용어로 작명은 피하자

Ex) HappyPoint 라고 해서 약어로 변수를 아래와 같이함.
String hp = “HappyPoint123”;
유닉스 플랫폼인 hp와 겹치기 때문에 비추.

accountList (x) → accountGroup , accounts ..
List accountList; (x) // 리스트컬렉션에 쓰여도 사용을 피하자

클래스와 메소드 이름을 잘 짓자

Class → 명사, 명사구

좋은예
Customer, WikiPage, Account
나쁜예
Manager, Processor, Data, Info

Method → 동사, 동사구

좋은예
postPayment, deletePage, save

접근자, 변경자, 조건자는 get, set, is 등을 붙여서 작명 (javabean 표준)

참고
Google Style Guide 링크

표기법 통일하자

  • 카멜표기법 : 첫자 소문자, 대문자로 구분. Ex) String camelCase;
  • 파스칼표기법 : 첫자 대문자 , 대문자로 구분 Ex) String PascalCase;
  • 스네이크표기법 : 언더바로 구분 Ex) String snake_case;

*헝가리표기법은 사용하지말자 (MS에서도 권고 하지않음)
헝가리표기법 : 접두어에 자료형 표기 Ex) String strAnimalName;

참고
표기법 - zetawiki

함수를 잘 만들고 잘 사용하자

함수는 최대한 작게 만들자

함수는 작을수록 좋다.

함수는 한가지만 해라!

동일한 추상화 수준에서 작업을 처리해라.
부수 효과를 일으키지말자.

나쁜예

한 메소드에서 이름도 찾고.. 복호화도 하고.. 유효성체크와 세션초기화까지...
이 메소드에 너무 많은 책임이 부여되고있다.

public boolean checkPassword(String userName, String password){
    User user = User.findByName(userName);
    if(user != User.NULL){
        String codedPhrase = user.getPhraseEncodedByPassword();
    String phrase = cryptographer.decrypt(codedPhrase, password);
        if(“Valid Password”.equals(phrase)){
            Session.initialize();
            return true;
        }
    }
return false;
}

서술적인 이름짓기 (1번 이름 잘짓기랑 중복~ 하지만 중요)

이름만 보고 뭐하는 녀석인지 판단이 가도록

includesetupAndTeardownPages(), getDBConnection()

플래그 파라미터는 지양하자

플래그를 받으면 자동으로 플래그를 판단하는 if문이 생기기때문에 함수가 2가지이상의 일을 한다는걸 공표하는 셈

String printResult(boolean isSuccess){
    String result = “fail”;
        if(isSuccess){    
            result = “success”;
        }
    return result;
}    

마틴 파울러의 Flag Argument

파라미터는 적게

중복된 파라미터는 모델클래스로 관리하는게 좋아보인다.

Before
Circle makeCircle(double x, dobule y, double radius);
After
Circle makeCircle(Point center, double radius);

오류코드 리턴보단 예외처리

오류코드를 반환하면 오류코드를 곧바로 처리해야함.

if(deletePage(page) == E_OK) {
    //정상 처리 코드
} else {
    //오류코드 처리 코드
}

try catch는 뽑아내서 한곳에서

throws Exception 던져서 모아서 예외처리하자.

주석은 나쁜코드를 보완하지 못한다

주석을 주저리주저리 다는 이유

코드 품질이 나쁘기때문에(다 그렇다는건 아님)
코드로 이야기하자

  • 1번 코드

    if ((employee.flags &HOURLY\_FLAG) && (employee.age > 65))  
    // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다.
  • 2번 코드

    if(employee.isEligibleForFullBenefits())

둘 중 어느것이 더 깔끔할까?

주석은 이렇게 써보자
  • 중요성을 강조

    // 실행시간이 오래걸리니 실행하는데 주의하십시오.  
  • Pattern

    Pattern timeMatcher = Pateer.compile(“\\d_:\\d_:\\d\* \\w_, \\w_ \\d_, \\d_”);  
    // kk:mm:ss EEE, MMM dd, yyyy  
  • TEST 결과

    assertTrue(a.compareTo(a) == 0); // a == a  
    assertTrue(a.compareTo(b) != 0); // a != b  
  • TODO
    IDE에서 //TODO를 쉽게 찾을수 있다.
    그렇다고 남발하지말자..

이런식의 주석 안쓰도록 해보자
  • 이력을 표시하는 주석
    형상관리에서 보자

  • 저자를 표시하는 주석
    형상관리에서 보자

  • 코드에 주석처리
    나중에쓸려고.. 그냥 지우자 쌓이고 쌓이면 가독성 떨어짐

    // InputStream resultsStream = formmater.getREsultStream();  
    // StreamREader reader = new StreamReader(resultsStream);  
    // response.setContent(reader.read(formatter.getByteCount()));  
  • 그외 불필요한 주석
    private코드에 javadocs 주석, 중복된 내용 주석 등

코드 컨벤션을 신경쓰자

Coding Convention?
Coding conventions are a set of guidelines for a specific programming language that recommend programming style, practices, and methods for each aspect of a program written in that language.

참고
Coding conventions - wikipeida

위키피디아에 위와 같이 정의되어있다.. 대충 프로그래밍 할때, 스타일과 가이드라인을 맞추자는 뜻

한 프로젝트에서 개발팀이 코드 스타일을 제각각 짠다면?
유지보수성이 개발 생산성이 떨어질것으로 보여짐
팀별로 코드 컨벤션을 통일하자

참고

Clean Code 애자일 소프트웨어 장인 정신

로버트 C. 마틴 지음 | 박재호 ・ 이해영 옮김

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
Total
Today
Yesterday