클린 코드 1장에서는 어떤 코드가 깨끗한 코드인지 왜 깨끗한 코드를 작성해야 하는지 설명하고 있습니다.
나쁜 코드란?
나쁜 코드란 읽기 어려운 코드를 말합니다.
단순히 로직이 복잡해서 읽기 어려운 코드를 말하는 것이 아니라
어떤 의도로 코드가 작성이 됐는지 이해하기 어려운 코드를 말합니다.
개발하시다 보면 누군가가 작성해논 코드를 보고 이게 도대체 무슨 의미인지, 왜 필요한지 알 수 없어 수 차례 읽어봐야 이해가 가는 코드를 보신 적이 있으실 겁니다. 이해해보면 완전 간단한 코드인데 말이죠.
나쁜 코드란 수정하기 어려운 코드를 말합니다.
코드 한 줄만 수정하면 되는 간단한 로직이라고 생각했는데 참조하고 있는 곳이 수십개여서 수정하는데 한참 걸리는 경우를 경험하신 적이 있으신가요?
바로 그겁니다.
나쁜 코드를 왜 짜게 되는 걸까?
빠듯한 개발 일정? 일정에 비해 많은 개발량? 잘못된 기획으로 인해 설계를 다 뒤집어 엎어야 해서?
위와 같은 이유로 아 그냥 빨리 개발해놓고 나중에 리팩토링하자!라고 결정을 하고 그냥 냅두는 경우가 태반입니다.
나중은 결코 오지 않는다. (르블랑의 법칙)
르블랑의 법칙처럼 나중은 결코 오지 않아 리팩토링 예약된 수 많은 코드들이 쌓이고 쌓여서 나쁜 코드가 생깁니다.
나쁜 코드로 인해 발생하는 문제
1. 나쁜 코드는 이해하기 어렵고 수정하기 어렵기 때문에 업무 생산성이 낮아집니다.
2. 그때그때 해결하지 못한 나쁜 코드들은 추후 리팩토링을 하기 위한 일정이 필요해 당장 해야 하는 업무를 진행하지 못 하는 문제가 생깁니다.
나쁜 코드를 짜지 않는 방법
책에 아주 좋은 비유가 나옵니다.
의사인데 환자가 수술 전에 손을 씻지 말라고 요구한다고해서 의사가 그 요구를 들어준다면 말이 되나요?
개발자도 마찬가지로 일정에 쫒겨서, 나중에 리팩토링하려고 등에 대해 타협해서 나쁜 코드를 개발하는 건 말이 되지 않습니다.
고민하고 시간을 더 들여서 깨끗한 코드를 만들려고 노력해야 합니다.
저는 개발하면서 나쁜 코드를 작성하게 되는 큰 이유 중 하나가 깨끗한 코드가 뭔지 잘 몰라서인 경우가 많았습니다.
깨끗한 코드(= 클린 코드)란?
깨끗한 코드의 정의는 사람마다 다른데 유명한 개발자들의 의견은 다음과 같습니다.
우아하고 효율적인 코드는 한 가지를 제대로 한다. - 비야네 스트롭스트룹 (C++ 창시자)
우아하다는 단어는 여러 뜻을 가지고 있는데 그 중 "보기에 즐거운"이라는 뜻이 있습니다.
보기에 즐거운 코드는 한 가지를 제대로 해야 합니다. 한 가지를!!
단순하고 직접적이며 잘 쓴 문장처럼 읽힌다. - 그래디 부치 (OOADA 저자)
정말 공감하는 문장입니다.
코드를 봤을 때 어떤 의도인지 위에서 부터 쭉쭉 막힘없이 읽히는 그런 코드가 깨끗한 코드입니다.
읽기 쉽고 고치기도 쉬우며 테스트 케이스가 잘 작성되어 있다. - 데이브 토마스 (OTI창립자, 이클립스 전략의 대부)
읽기 쉬운 코드랑 고치기 쉬운 코드는 다릅니다.
아무리 코드가 우아하하고, 가독성이 높아도, 테스트 케이스가 없으면 깨끗한 코드라고 할 수 없습니다.
손댈 곳 없이 주의 깊게 짰다는 느낌을 준다. 고칠 궁리를 하면 계속 다시 제자리로 돌아온다. - 마이클 페더스 (WELC 저자)
주의 깊게 짰다는 느낌을 주는 코드들을 리팩토링하려다 보면 결국 제자리로 돌아오는 경우가 정말 많은데 그런 코드가 깨끗한 코드입니다.
중복이 없고 표현력이 높다. - 론 제프리스 (EPI, EPA 저자)
론 제프리스는 중복을 없애고, 표현력있는 변수, 함수, 클래스명을 짓기 위해 많은 시간을 고민한다고 합니다.
짐작했던 기능을 각 루틴이 그대로 수행하는 코드 - 워드 커닝햄 (위키 창시자)
딱 코드를 봤을 때 생각나는 그 기능을 수행하는 그런 코드가 깨끗한 코드다.
요약
위 개발자분들이 말씀해주신 깨끗한 코드에 대해 요약하면 아래와 같습니다.
1. 한가지를 하는 코드
1. 읽기 쉽고 고치기 쉬운 코드
3. 테스트 코드가 있는 코드
javadoc에 코드 작성자를 @author로 표현하는데 이는 저자(개발자)는 독자(소스읽는 개발자)와 잘 소통하라는 뜻으로 쓰인 거 같습니다.
한가지를 하는 읽기 쉽고 고치기 쉬우면서 테스트가 존재하는 코드를 짜도록 노력해야겠습니다.
보이스카우트 규칙
캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라
잘 짠 코드가 전부는 아닙니다. 시간이 지나도 언제나 깨끗하게 유지할 수 있도록 보이스카우트 규칙을 생각하면 개발하면 좋겠습니다.
1장 깨끗한 코드에 대해 정리해봤습니다.
맨날 개발하면서 생각했던 내용들이 이 책에 있어서 정말 공감이 많이 됐습니다.
위 내용들을 끊임없이 되새김질 하면서 개발해야겠습니다.
'Clean Code' 카테고리의 다른 글
[클린 코드] 6장 - 객체와 자료 구조 (Objects and Data Structures) (0) | 2022.03.06 |
---|---|
[클린 코드] 5장 - 형식 맞추기 (Formatting) (0) | 2022.03.01 |
[클린 코드] 4장 - 주석 (Comments) (0) | 2022.03.01 |
[클린 코드] 3장 - 함수 (Functions) (0) | 2022.02.28 |
[클린 코드] 2장 - 의미 있는 이름 (Meaningful Names) (0) | 2022.02.27 |
댓글