ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 로버트 C.마틴의 클린코드(Clean Code) - 1) 깨끗한 코드란?
    개발 공부/Clean Code 2020. 11. 26. 17:08

     

    운이 좋게 우아한 테크코스의 프리코스 과정을 진행하게 되었는데, 로버트 C.마틴 (Uncle Bob으로 더 유명하죠)의 클린 코드라는 책이 워낙 유명하고 박재성 님의 추천 도서이기도 해서 읽어보게 되었습니다.

     

    책이 두껍기도 하고, 소설책 처럼 술술 읽는다고 이해되는 책이 아니기 때문에 앞으로 시간을 충분히 가지면서 차근차근 하나씩 게시물을 올려볼 생각입니다. 죽은 글이 아니라 살아있는 글을 만들라고 했던 박재성 님의 말씀처럼, 이 게시물들은 언제나 내용이 수정되거나 추가될 수 있음을 미리 밝힙니다.

     

     

    코드가 존재하리라!


    마치 성경의 "빛이 있으라!" 처럼, 이 책은 처음에 "코드가 존재하리라!"라는 말로 시작한다.

     

    물론 나도 그랬지만, 몇몇 사람들은 코드의 중요성에 대해 깊게 생각하지 않는 경향이 있다.

    학부 시절 대학교 동기들을 볼 때도, 코드가 원하는 결과를 출력하면 그걸로 만족하는 경우를 많이 보았다.

    그 코드의 가독성이나 효율성에 대해서는 잘 생각하지 않는 경향이 있었다.

     

    요즘은 더욱이 AI 기술의 발달로 언젠가는 코드를 기계가 알아서 작성하는 시대가 온다고 하는 사람들이 있다.

    그리고 코드를 어떻게 작성하는지 보다는 어떻게 프레임워크를 더 잘 다루는지 더 강력한 라이브러리는 없는지에 대해 중요하게 생각하는 사람들도 많다.

     

    하지만 우리의 Uncle Bob은 코드라는 것은 "요구사항을 표현하는 언어" 라는 점을 명심해야 한다고 말한다.

    코드는 요구사항에 대해서 기계가 정확하고, 상세하고, 구체적으로 실행할 수 있도록 하는 언어라는 것이다.

    요구사항이라는 것은 언제나 구체적이지 않다. 때로는 모호하고 언제든 변경될 수 있는 막연한 것이다.

    과연 기계가 이러한 막연한 요구사항에서 정확하고, 상세하고, 구체적인 무언가를 뽑아낼 수 있을까?

     

    인간은 기계와 달리 창의성을 가지고 있다. 막연한 요구사항에서 구체적인 코드를 뽑아내는 것은 인간만이 가능하다.

    그러므로 우리 인간은 코드의 중요성에 대해 깊이 생각하고 실천해야 한다.

    코드는 앞으로도 계속 존재할 것이기 때문에, 어떻게 하면 코드를 효율적이고 읽기 쉽게 작성할 수 있는지 고민해야 한다.

     

     

    나쁜 코드


    프로그래머이거나 프로그래밍을 공부하는 학생이라면 한 번쯤은 마감에 쫓겨서 막코딩을 해본 적이 있을 것이다.

    나도 학부 시절에 과제 마감 기한에 쫓겨, 갖은 if문과 for문을 남발하며 어찌저찌 만들어서 제출한 적이 있다.

     

    과제야 한번 제출하면 끝이지만, 만약 그것이 실제로 상용화 된 제품이라면 어떨까?

     

    출시 기한에 맞춰서 출시 했다고 하더라도 각종 버그와 오류로 인해 고객 만족은 떨어질 것이다.

    고객 만족만 떨어질까? 그 버그와 오류를 고치겠다고 코드를 열어보면 한숨만 나올 것이다.

    어디서부터 손을 대야할지도 모를 정도로 복잡하고 엉망이기 때문이다.

     

    결국은 출시 기한에 늦지 않으려고 급하게 짠 나쁜 코드는 역설적으로 그 제품의 종말을 야기할 수도 있다.

     

    우리는 보통 깨끗한 코드를 작성하는 것이 시간이 더 오래 걸린다고 생각한다.

    물론 당장 아무렇게나 작성하는 것보다 깨끗하게 작성하는 것이, "작성 시간" 자체는 오래 걸리는 것이 맞다.

    하지만 개발 업무의 대부분은 유지 보수다. 나쁜 코드는 전체 개발 업무 속도를 크게 떨어뜨린다.

    책에서는 불가항력이라고 표현한다. 나쁜 코드가 점점 쌓이면 도무지 청소할 방법이 없다는 것이다.

     

    또한 나쁜 코드는 팀의 생산력을 떨어뜨린다. 개발 업무는 대부분 협업의 형태이다.

    나 혼자 이해할 수 있게 작성한 나쁜 코드는, 다른 사람이 이해하기에는 하루 종일 걸릴 수 있는 것이다.

    그렇게 점점 팀의 생산력은 떨어지고 마침내 0으로 근접하게 된다.

     

    결국 나쁜 코드는 빛깔 좋은 독사과와 같아서, 당장 먹을 때는 맛있지만 결국 우리를 망친다.

    깨끗한 코드는 이를 해결하는데 큰 도움을 줄 수 있다. Uncle Bob은 책에서 다음과 같이 말한다.

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

     

     

    깨끗한 코드(Clean Code)


    책에서는 전 세계적으로 정말 유명하고 실력 좋은 프로그래머들의 인터뷰와 함께 깨끗한 코드에 대해 정의한다.

    여러 프로그래머들이 다양한 얘기를 하지만 결국 본질은 똑같다.

     

    "깨끗한 코드란 한 가지를 잘하는 것이다."

    나쁜 코드는 너무 많은 일을 하려다가 의도가 뒤섞이고 목적이 흐려진다. 깨끗한 코드는 한 가지에 '집중'한다.

    함수와 클래스와 모듈은 오로지 한길만 걷는다.

     

    "깨끗한 코드는 마치 소설에서 잘 쓴 문장처럼 읽혀야 한다,"

    책을 읽을 때, 글로 읽히는 것이 아니라 마음속에 이미지로 떠오를 때가 있을 것이다. 깨끗한 코드도 이와 마찬가지이다. 애매모호하고 혼란스러운 것이 아니라 명쾌하고 구체적이며 반드시 필요한 내용만 담아야 한다.

     

    "깨끗한 코드란 다른 사람이 고치기 쉬운 코드를 말한다."

    단순히 읽기 쉬운 가독성 좋은 코드와 고치기 쉬운 코드라는 것은 다른 개념이다. 고치기 쉬운 코드는 테스트 케이스가 바탕이 되어야 한다. 오늘날의 TDD(테스트 주도 개발)의 개념과 밀접한 연관이 있다.

     

    "중복을 피하라. 한 기능만 수행하라. 제대로 표현하라. 작게 추상화하라."

    같은 작업을 여러 차례 반복한다는 것은 코드가 아이디어를 제대로 표현하지 못한다는 것이다.

     

    "프로그램을 단순하게 보이도록 만드는 열쇠는 언어가 아니다. 언어를 단순하게 보이도록 만드는 열쇠는 프로그래머다."

    결국 모든 것은 프로그래머에게 달려있다는 것이다. 어떤 언어가 좋은지에 대해 고민하고 중요하게 생각하는 사람들이 너무나도 많다. 하지만 프로그래밍의 열쇠는 언어가 아니다. 어떠한 언어를 사용하든 그 열쇠는 프로그래머에게 있는 것이다.

     

    결국은 깨끗한 코드라는 것은 "하나의 기능만 수행하며, 가독성 있고, 테스트 케이스가 충분하고, 중복을 제거하며, 명쾌해야 한다"는 것이다.

     

    우리는 "코드를 짠다."라고 말하지만, 사실 코드를 짤 때 코드를 작성하는 것보다 코드를 읽는 시간이 더 많다.

    책에서는 코드를 읽는 시간 대 코드를 짜는 시간 비율이 약 10 : 1을 넘는 다고 말한다.

    그렇기 때문에 읽기 쉬운 코드는 그만큼 매우 중요하다. 코드를 읽기 쉬우면 코드를 짜기도 쉽다는 것이다.

     

    1장의 마지막에서는 보이스카우트 규칙을 말하며 마무리한다.

    보이스카우트 규칙이란 다음과 같다.

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

     

    즉 처음보다 더 깨끗하게 코드를 계속 발전시키라는 뜻이다. 지속적인 개선이야말로 전문가 정신의 본질이기 때문이다.


     

     

    다음 게시물에서는 2장 '의미 있는 이름'에 대한 게시물로 돌아오겠습니다.

    이번 1장을 읽으면서 여태까지 해왔던 저의 태도나 생각에 대해 반성하는 계기가 되었던 것 같습니다.

    앞으로도 깨끗한 코드를 짜기 위한 고민을 계속 열심히 해야 할 것 같습니다.

     

    이 글을 보시는 분이 계신다면, 로버트 C. 마틴의 클린 코드를 꼭 구입하셔서 읽어보셨으면 좋겠습니다.

     

    그리고 이런 좋은 책을 알 수 있도록 도움을 주신 우아한 테크코스의 리더 박재성 님에게 무한한 감사를 드립니다.

    댓글

Designed by Tistory.