[CleanCode] Clean Code 및 Refactoring

 
by 박신종


클린코드의 주요원칙

  • coding 표준, 아키텍쳐 표준 및 설계가이드를 준수하라 ( Follow Standard Cconvention)

  • 단순한 것이 효율적이며, 복잡함을 최소화하라 ( Keep it simple, stupid )

  • 캠핑장을 떠나기 전에 원래보다 깨끗하게 해야한다. ( boy Scout Rule )

  • 항상 근본적인 원인을 찾아라. 그렇지 않으면 반복될 것이다. ( Root cause Analysis )

  • 하나의 파일은 하나의 언어로 작성하라(Java, Javascript) ( Do not multiple language in one source file )

클린코드의 주요원칙 (Class Design)

  • Simple Responsbility Principle
    • 하나의 클래스는 하나의 책임만 가져야 한다.
  • Ope/Close Principle
    • 클래스는 확장에 대해 열려 있어야 하고,
  • Liskov Subsitution Principle
    • 파생 클래스의 메소드는 기반 클래스의 메서드를 대체하여 사용할 수 있어야 한다.
  • Interface Segregation Principle
    • 클라이언트가 사용하지 않는 메소드에 의존하지 않아야한다.
  • Dependency Inversion Principle

    • 추상화된 것은 구체적인 것에 의존하면 안된다.

의미있는 이름 / Naming

  • 변수, 클래스, 메서드에 의도가 분명한 이름을 사용한다.

  • 잘못된 정보를 전달할 수 있는 이름은 사용하지 않는다.

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

주석

강사님꼐서는 주석을 없애는 코드를 추천하셨습니다.

주석에 필요한 내용을 Naming 이나 코드 흐름을 통해 이해할 수 있는 코드를 작성하는게 포인트.

들여쓰기

규칙적인 들여쓰기와 줄바꿈으로 가독성 향상

문단구분 잘하면 읽기좋은 구조가 된다.

읽기 쉽게 흐름 제어 만들기

왼쪽에 변수, 오른쪽에 상수를 두고 비교하자.

ex) hour > 12

부정이 아닌 긍정을 다뤄라.

ex) if( flag != false ) ( x )

​ if( flag == true ) ( O )

코드 리뷰 기법

  1. Formal한 코드 리뷰
  2. Lightweight한 코드 리뷰
  3. 온라인 코드 리뷰
  4. 팀 리뷰

코드 리뷰시 무엇을 확인해야 하는가?

  • 기능의 정상 동작 여부
  • 버그의 조기 발견
  • 가독성과 유지보수 편의성
  • 개발표준의 준수 여부
  • 테스트 코드의 작성여부 ( 테스트 코드가 없으면 어떤 기준에 대해 평가하기 힘들다. / 리팩토링 할때도 유용함. )
  • 재사용 가능한 모듈의 중복개발 ( 코드의 중복성을 줄이기 위해 모듈화 시킨다. )

코드리뷰 체크리스트

  1. 코딩 스타일가이드가 준수하고 있는가 ?
  2. 하나의 함수가 하나의 기능만을 수행하고 있는가 ?
  3. 각 함수의 정보는 코드를 설명하기에 충분한가 ?
  4. 주석은 적절하게 기술돼 있는가 ?
  5. 코드는 잘 구조화되어 있는가 ? ( 가독성 및 기능적 측면 )
  6. 헤더, 함수 정보를 도구로 추출해서 자동으로 문서화할 수 있는 구조인가 ?
  7. 숫자를 직접 서술하지 않고 상수를 사용하고 있는가 ?
  8. 주석처리 된 코드는 삭제되었는가 ?
  9. 설명을 보거나 작성자에게 물어봐야만 이해할 수 있는 코드가 존재하는가 ?
  10. 함수 길이가 적절한가? ( 20줄 이내, 한 라인 당 150 문자 이내)
  11. 코드의 재사용이 가능한가?
  12. 전역변수를 최소화했는가 ? ( 상수가 아닌이상 아예 없어야 좋다. )
  13. 변수의 범위는 적절하게 선언되었는가 ?
  14. 클래스와 함수가 관련된 기능끼리 그룹으로 묶여잇는가 ?

Pull Panda

  • 개발자가 Pull Request 할때마다 슬랙으로 알려주는 알림기능 제공.
  • Top Contributors 내역과 작업관련 통계를 제공.
  • 팀 전체 코드리뷰작업을 자동으로 할당.

리팩토링

소프트웨어를 보다 수비게 이해할 수 있고, 적은 비용으로 수정할 수 있도록 겉으로 보이는 동작의 변화 없이 내부 구조를 변경하는 것.

※ 테스트 케이스가 있어야 리팩토링 할 수 있다.

주의점

  • 데이터 베이스

  • 인터페이스

언제 리팩토링 해야하나?

  • 같은 작업을 3번째 반복할 때
  • 어떠한 기능 추가하기 힘들 때
  • 버그를 수정해야 할 때
  • 코드리뷰를 할 때

언제하지 말아야하나?

  • 코드를 처음부터 다시 작성할 때
  • 시간이 없을 때

source