Clean Code & Refactoring

[Clean Code] 1장. 깨끗한 코드 : Clean Code

유자맛바나나 2021. 11. 13. 03:07

[Clean Code 시리즈 포스팅]

[Clean Code] 1장. 깨끗한 코드 : Clean Code (Now)

[Clean Code] 2장. 의미 있는 이름 : Meaningful Names

[Clean Code] 3장. 함수 : Functions

[Clean Code] 4장. 주석 : Comments

[Clean Code] 5장. 형식 맞추기 : Formatting

[Clean Code] 6장. 객체와 자료구조 : Objects and Data Structures

[Clean Code] 9장. 단위 테스트 : Unit Tests

 

 

 

깨끗한 코드란?  프로그래밍 대가의 의견

 

비야네 스트롭스트룹(Bjarne Stroustup)

C++ 창시자이자 The C++ Programming Language 저자

  • 우아하고, 효율적인 코드
  • 깨끗한 코드란 '한 가지'를 제대로, 잘 한다. 논리가 간단해야 버그가 숨어들지 못한다. 나쁜 코드는 너무 많은 일을 하려 애쓰다가 의도가 뒤 섞이고 목적이 흐려진다.
  • 의존성을 최대한 줄여야 유지보수가 쉬워진다.
  • 오류는 명백한 전략에 의거해 철저히 처리한다.

 

그래디 부치(Grady Booch)

Object Oriented Analysis and Design with Application 저자

  • 깨끗한 코드는 단순하고 직접적이다.
  • 깨끗한 코드는 잘 쓴 문장처럼 읽힌다.(가독성)
  • 깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다. 오히려 명쾌한 추상화와 단순한 제어문으로 가득하다.

 

데이브 토마스(Dave Thomas)

OTI 창립자이자 이클립스 전략의 대부

  • 깨끗한 코드는 작성자가 아닌 다른 사람도 읽기 쉽고 고치기 쉽다.
  • 단위 테스트와 인수 테스트 케이스가 존재한다.
  • 깨끗한 코드에는 의미 있는 이름이 붙는다.
  • 특성 목적을 달성하는 방법은 여러 가지가 아니라 하나만 제공한다.
  • 의존성은 최소이며 각 의존성을 명확히 정의한다.

 

론 제프리스(Ron Jeffries)

Extreme Programming Installed와 Extreme Programming Adventure in C# 저자

  • 모든 테스트를 통과한다.
  • 중복이 없다. 같은 작업을 여러 차례 반복하면 코드가 아이디어를 제대로 표현하지 못한다는 증거다.
  • 시스템 내 모든 설계 아이디어를 표현한다.
  • 클래스, 메서드, 함수 등을 최대한 줄인다. 객체가 여러 기능을 수행한다면  여러 객체로 나눈다. 메서드가 여러 기능을 수행한다면 기능을 명확히 기술하는 메서드 하나와 기능을 실제로 수행하는 메서드 여러 개로 나눈다.
  • 추상 메서드나 추상 클래스를 만들어 실제 구현을 감싼 후 빠르고, 간단하게 먼저 구현한다. 이후 복잡한 기능을 개발한 후 구현체만 바꾸면 된다.
  • 중복 줄이기, 표현력 높이기, 초반부터 간단한 추상화 고려하기. 이 세가지가 깨끗한 코드를 만드는 비결이다.

 

워드 커닝햄(Ward Cunningham)

위키 창시자, 익스트림 프로그래밍 공동 창시자

  • 코드를 읽으며 짐작했던 기능을 각 루틴이 그대로 수행한다.
  • 코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드다.

 

로버트 C. 마틴(Rober C. Martin)

Clean Code 저자, Agile Software Development, Principles, Patterns and Practices 저자

  • 깨끗한 변수 이름, 깨끗한 함수, 깨끗한 클래스를 만들어야 한다.
  • 코드를 읽는 시간 : 짜는 시간 = 10 : 1 의 비율만큼 코드를 읽는 시간이 길다. 즉, 기존 코드를 끊임없이 읽기 때문에 읽기 쉬운 코드가 매우 중요하다.

 

보이스카우트 규칙

캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라 (보이스카우트 규칙)

잘 짠 코드가 전부가 아니라 시간이 지나도 깨끗하게 유지가 되어야 한다는 뜻이다. 우리는 적극적으로 코드의 퇴보를 막아야 한다. 한꺼번에 많은 시간과 노력을 투자해 코드를 정리할 필요가 없다. 변수 이름 하나를 개선하고, 긴 함수를 분할하고, 중복을 제거하고, 복잡한 if 문 하나 정리하면 충분하다.

 

 

실무에 적용할 내용

코드를 작성할 때 다음 내용을 자문하자

 

1. 가독성

내가 작성하는 코드는 읽기 쉬운 코드인가? 함께 일하는 개발자가 내 코드를 읽었을 때 나의 도움 없이 이해할 수 있는가?

 

2. 더 작게, 클래스, 메서드, 함수는 많은 일이 아닌 한 가지만 제대로!

내가 작성한 클래스는 단일 책임 원칙을 준수하고 있는가?

내가 작성한 메서드, 함수는 한 가지 일 만을 '잘' 수행하고 있는가?

리팩토링 할 여지는 없을까?

 

3. Decoupling(의존성 최소화)

클래스 간 역할을 제대로 나누지 못해 클래스 간 불필요한 의존성이 발생하고 있지는 않은가?

 

4. 오류 제거, 테스트 케이스

나는 Unit Test를 잘 작성하고 있는가?

TDD의 원칙을 잘 따르고 있는가?

 

❑ Reference

클린 코드 | 로버트 C.마틴 | 인사이트