본문 바로가기
Architecture

[Clean Code 정리] 깨끗한 코드

by 테리는당근을좋아해 2022. 5. 26.

깨끗한 코드

 

1. 5S 원칙

1) 정리(Seiri) 또는 조직 (정렬 : sort)

  • 명명법 등을 통해 무엇이 어디에 있는지 알아야 한다.

 

2) 정돈 (Seiton)

  • 코드는 누구나 예상하는 위치에 있어야 한다.

 

3) 청소 (Seiso)

  • 주석으로 처리한 코드, 불필요한 기록은 지워야 한다.

 

4) 청결 또는 표준화 (Seiketsu)

  • 작업 공간을 청소하는 방식에 그룹이 동의한다.

 

5) 생활화 또는 규율 (Seikatsuka)

  • 관례를 따르고, 자기 작품을 자주 돌아보고, 기꺼이 변경하는 규율

 

 

2. 깨끗한 코드를 작성하는 것

  • 깨끗한 코드를 작성하는 방법은 배우기 어렵고 고생해야 한다.
  • 단순히 원칙과 패턴을 안다고 해서 깨끗한 코드가 되는 것은 아니다.
  • 연습과 실패, 잘못된 결정으로 인한 대가를 경험해야 한다.

 

 

3. 나쁜 코드

  • 르블랑의 법칙(Leblanc's Law)
  • 나쁜 코드가 쌓일수록 팀 생산성을 떨어지고 업무가 늘어난다. 이는 프로그래머의 탓이다.
  • 좋은 코드를 사수하는 일은 프로그래머의 책임이다.
  • 우리는 나쁜 코드가 업무속도를 늦춘다는 것을 알지만 기간을 맞추기 위해 나쁜 코드를 양산한다.
  • 나쁜 코드로 인해 오히려 기간을 맞추지 못하게 되기 때문에 기한을 맞추는 유일한 방법은 깨끗한 코드를 유지하는 습관이다.

 

 

4. 깨끗한 코드라는 예술

  • 깨끗한 코드를 작성하는 것은 예술과 같다.
  • 깨끗한 코드와 나쁜 코드를 구분할 줄 안다고 해서 깨끗한 코드를 작성할 줄 아는 것이 아니라, 코드 감각을 이용한 절제와 규율이 필요하다.

 

 

5. 깨끗한 코드란?

비야네 스트롭스트룹(Djarne Stroustruo, C++ 창시자)

  • 나는 우아하고 효율적인 코드를 좋아한다.
  • 의존성의 논리가 간단해야 버그가 숨어들지 못한다.
  • 의존성을 최대한 줄여야 유지보수가 쉬워진다.
  • 오류는 명백한 전략에 의거해 철저히 처리한다.
  • 성능을 최적으로 유지해야 사람들이 원칙 없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다.
  • 꺠끗한 코드는 '보기에 즐거운' 코드이다.
  • 효율도 단순히 속도를 의미하는 것이 아니다.
  • 나쁜 코드는 나쁜 코드를 유혹한다.
  • 프로그래머들이 대충 넘어가는 것이 오류 처리의 세세한 사항까지 꼼꼼하게 신경 써야 한다.
  • 나쁜 코드는 너무 많은 일을 하려 얘쓰다가 의도가 뒤섞이고 목적이 흐려진다.
  • 깨끗한 코드는 한가지에 집중한다.

 

 

 

 

그래디 부치(Grady Booch)

  • 깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다.
  • 깨끗한 코드는 단순하고 직접적이고 잘 쓴 문장처럼 읽힌다.
  • 오히려 명쾌한 추상화와 단순한 제어문으로 가득하다.
  • 코드는 추측이 아니라 사실에 기반해야 한다.
  • 반드시 필요한 내용만 담아야 한다.
  • 코드를 읽는 사람에게 프로그래머가 단호하다는 인상을 줘야한다.

 

 

 

 

데이브 토마스(Dave Tomas)

  • 깨끗한 코드는 작성자가 아닌 사람도 읽기 쉽다.
  • 단위 테스트케이스와 인수 테스트 케이스가 존재한다.
  • 고치기 쉽다.
  • 깨끗한 코드에는 의미 있는 이름이 붙는다.
  • 특정 목적을 달성하는 방법은 오직 하나만 제공한다.
  • 의존성은 최소이며, 각 의존성을 명확히 정의한다.
  • 언어에 따라 필요한 모든 정보를 코드만으로 명확히 표현할 수 없기 때문에 코드는 문학적으로 표현해야 마땅하다.
  • 실제로 읽기 쉬운 코드와 고치기 쉬운 코드는 엄연히 다르다.
  • 테스트케이스가 없는 코드는 아무리 우아하고 가독성이 높아도 깨끗한 코드가 아니다.

 

 

 

 

마이클 C. 페더스(Michael Feathers)

  • 깨끗한 코드는 언제나 누군가 주의 깊게 짰다는 느낌을 준다.
  • 작성자가 이미 모든 사항을 고려했으므로, 딱히 손 댈 곳이 없다.
  • 고칠 궁리를 하다 보면 언제나 제자리로 돌아온다.
  • 누군가 남겨준 코드, 주의깊게 짜놓은 작품에 감사를 느낀다.

 

 

 

 

존 제프리스(John Jeffreys)

  • 모든 테스트를 통과한다.
  • 중복이 없다.
  • 시스템 내 모든 설계 아이디어를 표현한다.
  • 클래스, 메서드, 함수 등을 최대한 줄인다.

 

 

 

워드 커닝햄(Ward Cunningham)

  • 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 된다.
  • 코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드라 불러도 된다.
  • 깨끗한 코드는 읽으면서 놀랄 일이 없어야 한다.
  • 코드를 독해하느라 머리를 쥐어짤 필요가 없어야 한다.
  • 읽으면서 짐작한 대로 돌아가는 코드가 깨끗한 코드이다.

 

 

6. 보이스카웃 규칙

  • 언제나 처음 왔을 때보다 깨끗하게 해놓고 캠핑장을 떠나듯이 코드 또한 기능을 추가하기 전보다 더 깨끗한 상태를 유지해야 한다.
  • 잘 짠 코드가 전부가 아니면 한꺼번에 많은 시간과 노력을 투자해 코드를 정리할 필요가 없다.
  • 단순히 변수 이름 개선, 긴 메소드 분할, 중복 제거만으로 충분하다.

'Architecture' 카테고리의 다른 글

[Clean Code 정리] 객체와 자료구조  (0) 2022.05.29
[Clean Code 정리] 형식 맞추기  (0) 2022.05.29
[Clean Code 정리] 주석  (0) 2022.05.28
[Clean Code 정리] 함수  (0) 2022.05.28
[Clean Code 정리] 의미있는 이름  (0) 2022.05.28

댓글