본문 바로가기
개발 저서/클린 코드(Clean Code)

클린 코드 1장 - 깨끗한 코드

by 성범이라고합니다 2022. 1. 2.

슬링키의 클린! 코드!

#1 나쁜 코드

프로그래머들은 다양한 이유로 나쁜 코드를 작성하게 된다.

급해서? 서두르느라? 동작한다는 안일함?

이러한 나쁜 코드를 두고 다수의 프로그래머들이 '나중에 리팩토링 하자' 라는 생각을 갖는다.

하지만 르블랑의 법칙에 의해 나중은 결코 오지 않는다.

 

#2 나쁜 코드로 치르는 대가

나쁜 코드는 개발 속도를 크게 떨어뜨린다.

코드를 고칠 때마다 엉뚱한 곳에서 문제가 발생하고 더 복잡해지고 어려워진다.

나쁜 코드를 부분 부분 고쳐 나갈수록 코드가 꼬이기 시작한다(스파게티 코드)

시간이 지날수록 쓰레기 더미는 점점 높아지고 깊어지고 커진다. 이를 대처할 방법이 없다. 불가항력이다.

팀 생산성 또한 떨어뜨린다.

 

또한 중요한 것은 '코드 감각'이다.

좋은 코드 감각을 가진 프로그래머는 나쁜 코드도 좋은 코드로 수정할 수 있다.

 

#3 깨끗한 코드란?

깨끗한 코드에 대한 정의는 프로그래머의 수만큼 너무나도 다양하다.

 

깨끗한 코드에 대한 예로 다음은 C++의 창시자인 비야네 스트롭스트룹이 언급한 깨끗한 코드의 정의이다.

  • 비야네는 ‘우아한’이라는 단어를 사용한다.
  • 비야네에 따르면 깨끗한 코드는 ‘보기에 즐거운' 코드다. 잘 만든 오르골이나 잘 디자인된 차를 접할 때처럼 깨끗한 코드는 보는 사람에게 즐거움을 선사해야 한다는 뜻이다.
  • 비야네는 효율도 언급한다. 비야네가 언급하는 효율은 단순히 속도만을 언급하는 것이 아닌 전체적인 효율을 의미한다.
  • 우아하지 못한 코드는 바람직하지 않은 결과를 초래한다. 비야네는 ‘유혹'이라는 단어로 그 결과를 표현한다. 나쁜 코드는 나쁜 코드를 ‘유혹'한다.
  • 비야네는 철저한 오류 처리도 언급한다. 프로그래머들이 대충 넘어가는 부분 중 하나가 오류 처리다. 메모리 누수, 경쟁 상태, 일관성 없는 명명법이 또 다른 예이다.
  • 마지막으로 비야네는 깨끗한 코드란 한 가지를 잘 한다고 단언한다. 나쁜 코드는 너무 많은 일을 하려 애쓰다가 의도가 뒤섞이고 목적이 흐려진다. 깨끗한 코드는 한가지에 ‘집중'한다.

 

 

코드를 작성할 때 주변 코드와의 연관성 및 간결함이 중요하다.

주변 코드가 읽기 쉬우면 새 코드를 짜기는 어렵지 않다.

반면에 주변 코드가 읽기 어려우면 새 코드를 작성하는데 주변 코드를 이해하는데 시간을 써야하는만큼 시간이 오래 걸린다.

 

기존 코드를 읽어야 새 코드를 짜므로 읽기 쉽게 만들면 새로운 코드를 짜기도 쉬워진다.

 

#4 보이스카우트 규칙

체크아웃 할 때보다 더 깨끗한 코드를 체크인하자.

시간이 지날수록 코드가 좋아지는 코드를 작성하자.

 

#5 객체 지향 설계의 다섯가지 원칙(SOLID)

  • SRP(The Single Responsibility Principle) : 단일 책임의 원칙. 클래스에는 한 가지, 단 한 가지 변경 이유만 존재해야 한다.
  • OCP(The Open Closed Principle) : 개방 폐쇄의 원칙. 클래스는 확장에 열려있어야하며, 변경에 닫혀있어야 한다.
  • LSP(The Liskov Substitution Principle) : 리스코프의 치환 법칙. 상속받은 클래스는 기초 클래스를 대체할 수 있어야 한다.
  • ISP(The Interface Segregation Principle) : 인터페이스 분리 원칙. 클라이언트에 밀접하게 작게 쪼개진 인터페이스를 유지한다.
  • DIP(The Dependency Inversion Principle) : 의존 역전의 법칙. 추상화에 의존해야하며, 구체화에 의존하면 안된다.