Programming/Clean Code

CleanCode - 깨끗한 코드

빅콜팝 2023. 1. 2. 01:58
728x90
반응형

클린코드에서는 깨끗한 코드를 작성하기 위해서는 나쁜 코드를 작성해서는 안 된다고 설명하고 있다.

프로그래머라면 누구나 나쁜 코드로 고생한 경험이 있을 것이다. 그렇다면 어째서 나쁜 코드를 작성한 것일까.
제대로 짤 시간이 없다고 생각해서, 코드를 다듬느라 시간을 보냈다가 상사에게 욕 먹을까봐, 다른 업무가 너무 밀려 후딱 해치우고 밀린 업무로 넘어가려고 .. 등등 모두가 겪어본 상황이다.
우리는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다.
우리 모두는 대충 짠 프로그램이 돌아간다는 사실에 안도감을 느끼며 그래도 안 돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로를 위로한 경험이 있다.
다시 돌아와 나중에 정리하겠다고 다짐했었다.

물론 그때 그 시절 우리는 르블랑의 법칙을 몰랐다. "나중은 결코 오지 않는다."

이 책에서는 나쁜 코드는 개발 속도를 크게 떨어뜨린다고 말하고 있다. 매번 얽히고설킨 코드를 해독해서 얽히고설킨 코드를 더한다. 시간이 지나면서 쓰리게 더미는 점점 높아지고 깊어지고 커진다. 청소한 방법이 없다. 불가항력이다.
나쁜 코드가 쌓일수록 팀 생산성은 떨어진다.

 


원대한 재설계의 꿈


추후 생산성이 바닥이 되어 원대한 재설계 작업이 이루어지게된다.

 

- 생산성이 0에 수렴해 가는 시점에 프로그래머들은 재설계를 요구함

- 관리자들은 마음에 내키지 않지만 생산성이 바닥이라 어쩔 수 없이 허락함

- 레거시 프로젝트와 새로운 프로젝트가 병행하면서 경주를 시작

- 새로운 프로젝트는 기존 프로젝트의 기능을 따라 잡아야함

- 기존 프로젝트는 새로운 기능을 추가함

- 새로운 프로젝트는 기존 기능 + 새로 추가한 기능을 따라 잡아야함

- 끝나지 않는 반복

 

=> 결론적으로 기존에 싼 똥 덩어리에 새로운 똥 떵어리가 하나가 더 추가됨

 

 

그렇기에 처음부터 나쁜 코드를 작성하지 않아야한다.
나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다.
나쁜 코드가 심각한 장애물이라는 사실을 납득했다고 가정하다. 그렇다면 깨끗한 코드란 무엇이며 어떻게 작성해야 하는 것일까?

 



- 철저한 오류 처리를 해야한다.
세세한 사항까지 꼼꼼하게 신경쓰라는 말이다. 프로그래머들이 대충 넘어가는 부분 중하나가 오류 처리다. 메모리 누수, 경쟁 상태, 일관성 없는 명명법이 또 다른 예다. 한 마디로 요약하면 깨끗한 코드는 세세한 사항까지 꼼꼼하게 처리하는 코드다.
- 깨끗한 코드란 한 가지를 잘 한다고 단언한다.
수많은 소프트웨어 설계 원칙이 이 간단한 교훈 하나로 귀결된다는 사실은 우연이 아니다. 나쁜 코드는 너무 많은 일을 하려 애쓰다 의도가 뒤섞이고 목적이 흐려진다. 깨끗한 코드는 한 가지에 '집중'한다. 각 함수와 클래스가 모듈은 주변 상황에 현혹되거나 오염되지 않은 채 한길만 걷는다.

- C++ 창시자 비야네 스트롭스트룹 -


- 가독성을 강조해야한다.
깨끗한 코드가 잘 쓴 문장처럼 읽혀야 한다.
좋은 소설과 마찬가지로 깨끗한 코드는 해결할 문제의 긴장을 명확히 드러내야 한다. 긴장을 쌓으며 클라이맥스에 이르렀다가 명백한 해법을 제시하며 긴장과 문제를 풀어야 한다.
- 코드는 추측이 아니라 사실에 기반해야 한다. 반드시 필요한 내용만 담아야 한다.
코드를 읽는 사람에게 프로그래머가 단호하다는 인상을 줘야한다.

- 그래디 부치 -

 

- 깨끗한 코드는 다른 사람이 고치기 쉽다.
당연하게 들리지만 아무리 강조해도 지나치지 않은 교훈이다.
- 깨끗한 코드를 테스트 케이스와 연관짓는다.
테스트 케이스가 없는 코드는 깨끗한 코드가 아니다. 아무리 가독성이 높아도 테스트 케이스가 없으면 깨끗하지 않다.

-큰 데이브 토마스-

 


- 깨끗한 코드는 주의 깊게 작성한 코드다.
누군가 시간을 들여 깔끔하고 단정하게 정리한 코드다. 고치려고 살펴봐도 딱히 손 댈 곳이 없다.

- 마이클 페더스 -

 


- 중복 없는 코드를 작성해라
같은 작업을 여러 차례 반복한다면 코드가 아이디어를 제대로 표현하지 못한다는 증거다.
객체가 여러 기능을 수행한다면 여러 객체로 나눈다. 메서드가 여러 기능을 수행한다면 메서드 추출 리팩터링 기법을 적용해 기능을 명확히 기술하는 메서드 하나와 기능을 실제로 수행하는 메서드 여러 개로 나눈다.

- 론 제프리스 -

 

 

기한을 맞추는 유일한 방법은, 즉 가장 빨리 가는 유일한 방법은 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.

728x90
반응형