본문 바로가기

LANGUAGES, METHODLOGY/STUDY

[STUDY] 깨끗한 코드란 무엇일까? 로버트 C.마틴의 클린 코드

보통 개발자 커리어를 시작하게 되면 여러 종류의 코드를 경험하게 되는데, 저마다 가진 '더럽다, 지저분하다' 느끼는 코드들을 머릿속에 가지고 있을 것이다. 그렇다면 '더러운 코드'란 소위 어떤 코드일까? 반대로 깨끗한 코드, '클린코드'란 무엇일까. 그리고 클린 코드가 가져다줄 수 있는 이점들은 무엇이 있을까? 로버트 C.마틴의 클린 코드를 완독하고 핵심 내용들에 대해 되새겨보고자 포스트를 쓰기로 했다.

 

책 전반에 있어 좋은 내용들이 참 많지만, 핵심적으로 간추려보고자 직관적인 개념인 '더러움' 과 '깨끗함'으로 나누어 정리해본다.

Dirty code

- 함수의 역할을 곧바로 읽을 수 없어 추측과 내비게이션을 반복해야 한다.

- 유사한 내용이 군데군데 반복되고 있다.

- 과한 주석이 코드를 읽기도 전에 주석과 코드를 전부 이해해야하는 일로 귀결된다.

- 함수들의 인자가 2개 이상이 되어, 개발자가 '조심히 다뤄야'하는, 경우의 수가 수십가지인 함수가 있다.

- 디버깅의 관점에서 볼 때, 무엇이 어디서부터 잘못된지 알아내는 상상이 괴로워지는 함수가 있다.

- 함수에 부수효과가 있다.

- 함수와 클래스들이 각각의 요소에 미치는 영향이 지대하다. 즉 결합도가 높다.

Clean code

- 함수의 이름 만으로 함수의 역할을 알 수 있다.

- 중복이 없다. 

- 함수들은 철저하게 각각의 역할에 충실하며, 그 이상의 일을 절대 침범하거나 관여하지 않는다.

- 한 클래스는 책이다. 고로 대단원에서 소단원으로 내려가듯이, 추상화의 수준은 위에서 가장 높고, 구체화의 수준은 아래에서 가장 높다.

- 함수들은 최대한 단순하며, 하나의 일을 수행한다. 경우의 수란 각 함수별로 성공, 혹은 실패의 경우를 가질 정도로 단순하다.

- 변수의 이름은 간결하고 구체적이다. 코드란 끄적이는 간단한 메모가 아닌, 소프트웨어의 명세이자 톱니바퀴다. 그만큼 진지해야 한다.

- 함수와 클래스들의 결합도가 낮다. 특정 함수 혹은 클래스가 사라진다 해서 프로그램이 받는 영향은 전혀 없다. 

- 프로젝트의 구조는 모든 곳을 통틀어 예상할 수 있으며, 예상에 따른 어색함이 아닌 고개를 끄덕이는 합리적인 구조를 찾아볼 수 있다. 

 

 

자 그렇다면, 왜 깨끗해야 하는가? 클린 코드가 개발자와 팀에게 주는 이점은 무엇인가 라고 자문해본다면 어떤 이야깃거리가 있을까?

Why to be clean?

개발자의 숙명이란 코드를 쓰고, 지우는 일이다. 그런데 코드가 깨끗하지 못하면 해야 하는 일들은 그런 일상적인 작업들로부터 '영향'을 받고, 이는 새로 해야 하는 일에 집중하지 못하고 부수적으로 해야 하는 일들로 가득해지고 만다. 이런 환경 속에서 개발자가 새로 만들어내는 코드에 수준을 부여하기란 여간 쉽지는 않을 것이다.

 

코드가 깨끗하다는 것은 프로젝트 전체를 소위 '건강하게', 안정적으로 돌아가게 끔 하는 초석이 된다. 각 함수들과 클래스가 주는 영향은 각각의 제한된 수준에서 벗어나지 않기 때문에 버그를 찾고 수정하는 일이 개발자에게 부담이 되는 일은 없을 것이다.(말하자면 모든 버그 수정 및 신규 코드 작성이 폭탄 해체같은 긴장을 주지 않는 일이 된다는 것이다.)

 

모든 팀에서 모든 구성원이 동일한 수준으로 무언가를 해내기란 집단과 환경에 따라 당연히 쉽지 않은 일일 것이다. 허나 이전에 그렇지 못했다 해서 영원히 그럴 수 없다는 법은 없다. 프로그래밍이란 진보의 길이다. 고착시키는 것이 아닌 개선과 리팩토링의 반복을 통해 흐름에 맞춰 나가는 일인 것이다. 그 흐름을 맞춘다는 건 계란 하나 부치듯이 단순한 것은 아니다. 돌아보고 다시금 상기해야 한다. 나는 무슨 길을 걷고 있는지, 내가 써내려 가는 코드와 네이밍은 어떠한 지.