💡'클린 코드(Clean Code)' 책을 읽게 된 배경
개발자로 2년 가까이 일하면서 자연스레 코드 리팩토링에 대해 관심을 가지게 되었다.
'누군가 내 코드를 볼 때, 내 설명이 없어도 이해 가능한 코드를 구현하고싶다.'는 생각을 종종 하곤 한다.
내 시야에서 코드 리팩토링을 하기엔 시야가 너무 좁고 한정적이기 때문에, 좀 더 넓은 시야를 경험해보고자 '클린 코드(Clean Code)'라는 책을 읽게 되었다.
책을 원체 싫어해서 '클린 코드(Clean Code)' 책을 사놓고도 금방 읽다가 말았지만, 요즘엔 책에 대한 두려움과 거부감이 없어져서 '클린 코드(Clean Code)' 책을 다시 읽게 되었다.
어떤 언어를 사용하든 코드는 기계가 이해하고 실행할 정도로 엄밀하고 정확하고 상세하고 정형화 되어야 한다. 코드는 요구사항을 표현하는 언어라는 사실을 명심해야 한다. 요구사항에 더욱 가까운 언어를 만들 수도 있고, 요구사항에서 정형 구조를 뽑아내는 도구를 만들 수도 있다.
어느 순간에는 정밀한 표현이 필요할 수 있지만, 코드의 필요성을 없앨 방법은 없다. 그러므로 코드는 항상 존재하리라.
프로그래머라면 누구나 당연히 나쁜 코드로 고생한 경험이 있다. 아마 급해서, 서두르느라, 혹은 제대로 짤 시간이 없다고 생각해서 나쁜 코드를 짰을 것이다.
우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다. 물론 그때 그 시절 우리는 '르블랑의 법칙'을 몰랐다. 나중은 결코 오지 않는다.
👩🏻💻 💡 끼어들기
맞다... 나중은 결코 오지 않는다. 그래서 나쁜 코드에 이슈가 생기거나 추가해야할 요소가 생기면 난감 그 자체다. 최근들어 코드를 들어올려서 수정한 경우가 많다보니, 애진작에 잘 짜야겠다고 생각이 들었다. 요즘은 유지보수가 가능할만한, 남들이 봤을 때 해석이 쉬운 가독성 좋은 코드를 짜려고 최대한 노력하고 있다.
2-3년 넘게 프로그램을 짰다면 남들이 저질러놓은 쓰레기 코드로 고생한 경험이 있으리라. 코드가 하도 엉망이라 프로젝트 진도가 안 나가는 경험도 있으리라. 나쁜 코드는 개발 속도를 크게 떨어뜨리고, 나쁜 코드가 쌓일수록 팀 생산성은 떨어진다.
한두 해 이상 우리 분야에 몸 담은 프로그래머라면 누구나 나쁜 코드가 업무 속도를 늦춘다는 사실을 익히 안다.
그럼에도 모든 프로그래머가 기한을 맞추려면 나쁜 코드를 양산할 수 밖에 없다고 느낀다. 진짜 전문가는 이 부분이 틀렸다는 사실을 잘 안다. 오히려 엉망진창인 상태로 인해 속도가 곧바로 늦어지고, 결국 기한을 놓친다. 빨리 가는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.
👩🏻💻 💡 끼어들기
"모든 프로그래머가 기한을 맞추려면 나쁜 코드를 양산할 수 밖에 없다고 느낀다." 나는 이 표현을 처음 읽었을 때까지만 하더라도 이 말에 공감을 하였는데, 2개월이 지난 지금 봤을 때 동의 할 수 없다. 애초에 클린하게 짜는 작업과 의식이 몸에 배면 나쁜 코드를 양산하려는 시도 조차 하지 못한다.
"깨끗한 코드를 어떻게 작성할까?" 깨끗한 코드가 무엇인지 모르면 깨끗한 코드를 만들려고 애써봤자 소용이 없다.
깨끗한 코드를 작성하려면 '청결'이라는 힘겹게 습득한 감각을 활용해 자잘한 기법들을 적용하는 절제와 규율이 필요하다. 어떤 사람은 그 절제와 규율을 적용해 나쁜 코드를 좋은 코드로 바꾸는 전략도 파악한다. 깨끗한 코드를 작성하는 '코드 감각'이 있는 프로그래머는 빈 캔퍼스를 우아한 작품으로 바꿔가는 화가와 같다.
아마 프로그래머 수만큼이나 정의도 다양하리라. 다음은 우리 분야에서 아주 유명하고 노련한 프로그래머들의 의견이다.
깨끗한 코드는 '보기에 즐거운' 코드다.
깨끗한 코드는 세세한 사항까지 꼼꼼하게 처리하는 코드다.
깨끗한 코드는 한 가지를 잘 한다.
깨끗한 코드는 단순하고 직접적이다.
깨끗한 코드는 잘 쓴 문장처럼 읽힌다.
깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다.
깨끗한 코드는 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다.
깨끗한 코드는 테스트 케이스가 있다.
깨끗한 코드는 모든 테스트를 통과한다.
깨끗한 코드는 중복이 없다.
깨끗한 코드는 시스템 내 모든 설계 아이디어를 표현한다.
깨끗한 코드는 클래스, 메서드, 함수 등을 최대한 줄인다.
깨끗한 코드는 표현력이 높고, 초반부터 간단한 추상화를 고려한다.
깨끗한 코드는 읽으면서 놀랄 일이 없어야 한다.
깨끗한 코드는 읽으면서 짐작한대로 돌아가는 코드이다.
깨끗한 코드는 문제를 풀기 위한 언어처럼 보인다.
👩🏻💻 💡 끼어들기
깨끗한 코드는 읽으면서 놀랄 일이 있다. 너무 잘 짜서, 어떻게 이렇게 잘 짤 수 있냐며 놀랄 일이 있다. 그런 코드를 보면 정말 감탄이 나온다.
우리는 저자다. 저자는 독자와 잘 소통할 책임이 있다. 다음에 코드를 짤 때는 자신이 저자라는 사실을, 여러분의 노력을 보고 판단을 내릴 독자가 있다는 사실을 기억하기 바란다.
👩🏻💻 💡 끼어들기
맞다. 협업하는 사람들이 독자이며, 프로그래머는 협업하는 사람들을 위한 코드를 짜야한다고 생각한다.
잘 짠 코드가 전부는 아니다. 시간이 지나도 언제나 꺠끗하게 유지해야한다. 우리는 적극적으로 코드의 퇴보를 막아야 한다.
이 책을 읽는다고 뛰어난 프로그래머가 된다는 보장은 없다. '코드 감각'을 확실히 얻는다는 보장도 없다. 단지 뛰어난 프로그래머가 생각하는 방식과 그들이 사용하는 기술과 기교와 도구를 소개할 뿐이다. 나머지는 여러분에게 달렸다.
-알라딘 eBook <클린 코드 Clean Code> (로버트 C. 마틴 지음, 이해영.박재호 옮김) 중에서