SW 그리고 아빠 엔지니어링 중...

아는 만큼 보이고, 경험해봐야 알 수 있고, 자꾸 써야 내 것이 된다.

개발

클린코드(clean code) - 약식 정리

보리남편 김 주부 2023. 8. 22. 08:00
Clean Code라는 단어는 굉장히 매력적이지만 실제로 대단한 임팩트는 없다. 하지만 레거시 코드를 어떻게 해야 할지에 대한 고민과 앞으로 유지보수가 힘들게 만드는 코드를 지양하기 위한 바로미터가 될 수 있다.

 

로버트 C 마틴의 지침


  • 절대적으로 지켜야 하는 내용이 아니다.
  • 팀이나 공동체에서 서로 동의하는 합리적인 원칙을 세우기 위한 소통
  • Clean Code는 소통을 위한 기초지식을 제공하고 생각할 거리를 던져주는 책
 

Robert C. Martin - Wikipedia

From Wikipedia, the free encyclopedia American software consultant Robert Cecil Martin (born 5 December 1952), colloquially called "Uncle Bob",[2] is an American software engineer, instructor, and author. He is most recognized for promoting many software d

en.wikipedia.org

: 존경의 의미로 클린코드 개념을 창시한 사람의 얼굴은 알아두도록 하자.(얼굴을 알면 우연히 마주쳤을 때 사인은 받을 수 있지 않을까?)

 

클린 코드가 되지 않는 이유


클린 코드 상태에서 유지보수는 빠르게 된다. 하지만 점차 클린 하지 않는 코드가 되는 이유

  • 기한을 맞추기 위해, 클린 하지 않는 코드가 양산된다.
  • 그 위에 유지보수를 지속적으로 하게 된다.
  • 이 것들이 쌓이게 되면서 유지보수 속도가 점차 느려진다. (악순환 반복)

=> 코드를 깨끗하게 유지하려는 노력이 오히려 기한을 맞출 수 있는 좋은 방법이다.

 

클린코드 원칙


클린 코드를 유지하려는 노력은 습관화가 되어야 한다.(날을 잡고 코딩하는 것이 아니다.)

청소의 개념과 비슷한데 정리하면 다음과 같다.

  • 정리 : 적절한 명명법으로 정리
  • 정돈 : 코드는 누구나 예상하는 위치에 있어야 한다.(파편화된 함수를 모은다)
  • 청소 : 쓰레기는 치운다. 필요 없는 주석은 지운다.
  • 규율화 : 청소 방식, 그룹 내 구현 스타일 기법 통일화
  • 생활화 :  자기 작품을 자주 돌아본다.

 

더보기

Clean Code의 다양한 정의


비야네 스트롭스트룹 : 논리가 간단해야 한다. 깨끗한 코드는 한 가지를 제대로 한다. (C++ 창시자)

Grady Booch : 단순하고 직접적이다.(의도를 잘 표현한다.) 깨끗한 코드는 잘 쓴 문장처럼 읽힌다. 깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다.(UML 창시자)

마이클 패더스 : 깨끗한 코드는 언제나 누군가 주의 깊게 짰다는 느낌을 준다. (Working Effectively with Legacy Code 저자)

워드 커닝햄 : 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다.(wiki창시자, XP 공동 창시자)

 

Clean Code를 사용하는 마인드


우리는 저자다.

책 저자는 글을 쓰고, 본인이 쓴 글을 읽고 또 읽고, 다시 읽는다.

독자 입장에서 다시 읽고 고친다. 독자와 잘 소통이 되는지 확인한다.

코드를 짤 때는 자신이 저자임을 기억하고 끊임없이 기존 코드를 읽어야 한다.

 

보이스카우트 규칙

시간이 지나도 언제나 깨끗하게 유지해야 한다. (지속적인 개선)

캠프장은 처음 왔을 때 보다 더 깨끗하게 해 놓고 떠나야 한다.

 

Clean Coding 작성 방법


의미 있는 이름을 쓴다

흔한 약어 지양 : ax, aix, 만능 용어 자제 : info, Data

 

함수

  • 추상화 : 복잡하거나 동작이 많은 경우는 함수를 분리 (함수는 의미를 갖는 최소한의 함수로 만든다. 한 가지 목적을 가져야 한다.
  • 함수배치는 위에서 아래로 코드를 읽을 수 있도록 함수 배치를 한다.
  • 함수 이름을 잘 짓기 : 의미를 잘 알 수 있게 짓기
  • 함수 인수 개수는 가능한 1개 이하로 한다.
  • 한수 인수에 flag는 피한다.

 

주석

주석은 유지보수 되지 않는다. 

 

객체지향

OOP(객체지향 4대 요소) : 캡슐화, 상속, 추상화, 다형성

생각해 볼거리
처음부터 객체지향으로 구현하지 않았다면 lagacy Code를 refactoring 하면서 개선을 할 텐데, 객체지향으로 메서드를 분리, 클래스로 분리를 하다 보면 동일코드는 제거하여 함수로 뽑(추상화)는 과정을 거칠 텐데, 이때 함수의 예외처리를 위해 진입 초기에 return 처리를 하게 된다. 그런데 어쩌나? 자동차 SW를 개발한다면 MISRA C++ 지침을 지켜야 하는데 MISRA C++ rule 에는 multi return을 하지 말라고 한다. multi return을 안 하려면 return에 대한 상태값을 담은 flag 도 써야 하는데 당신은 어떻게 수정을 할 텐가?
예) https://spin.atomicobject.com/2011/07/26/in-defence-of-misra/

 

단위 테스트

좋은 단위 테스트는 F.I.R.S.T 규칙을 따른다.

  • Fast : 실행이 빨라야 한다.
  • Independent : 단위 기능에 집중해야 한다.(하나의 테스트 당 하나의 기능만 테스트)
  • Repeatable : 반복적으로 수행해도 같은 결과가 나와야 한다.
  • Self-Validating : 기대결과를 단언할 수 있어야 한다.
  • Timely : 미루지 않고 즉시 작성해야 한다.

위 단위 테스트를 녹인 방법론 나왔고, 방법론 중 TDD 란 개념도 나왔다.

2022.12.22 - [개발/TDD] - [개념] TDD 란?

 

참고


책 광고는 아니고, 좀 더 깊이 들여다보고 생각해 보고 싶다면 구매를 추천한다.

https://www.yes24.com/Product/Goods/11681152

저자 : 로버트 C 마틴

 

 

728x90

'개발' 카테고리의 다른 글

도스 배치파일 - 문자열 입력 받기  (0) 2022.06.29
개발 기초 용어 정리  (0) 2022.06.28
C 시큐어코딩 가이드  (0) 2022.03.21