서론
이 글을 작성하기에 앞서 본인은 본인 스스로 개발을 잘 한다고 생각하지 않고, 아직 배울게 많고 부족한 상태라고 자각한다. 하지만 클린 코드라는 거창하고 권위있는 주제를 다루는 것이 본인의 오만함이 아니라, 그저 훗날 내가 이 글을 다시 보았을 때 과거의 나는 이런 생각을 가지고 있었구나, 나는 지금 얼마만큼 발전했고 혹은 초심을 잃어 퇴화하였는지를 알기 위해 이 글을 작성한다. 따라서 이 글을 읽을지도 모르는 모두에게 코딩에는 정답은 없고 완벽한 코드도 없다는 것을 인지하며 이렇게 열심히 밑밥을 까는 필자의 의도도 유념하며 읽어주기를 바란다.
완벽한 코드
본인은 학창시절 스타크래프트2 를 정말 재미있게 플레이했다. 스타2의 군단의 심장 캠페인을 플레이하면 아바투르라는 공돌이 포지션의 NPC가 완벽하게 만들지 못하냐는 물음에 이렇게 답한다.

완벽은 없음. 완벽이라는 목표는 계속 변함. 멈추지 않음. 따라갈 수 있지만, 붙잡을 수 없음.
이 짧은 문장은 내가 생각하는 ‘클린 코드’의 본질을 잘 보여준다. 완벽한 코드는 존재하지 않으며, 우리는 그저 완벽에 가까워지기 위해 멈추지 않고 나아갈 뿐이다.
클린 코드?

클린 코드(Clean Code)라는 단어는 로버트.C.마틴 이라는 사람이 쓴 책으로 부터 널리 퍼지게 되었다고 한다. 일각에서는 해당 도서를 마치 바이블처럼 여기는 사람들도 있다고 하는데, 본인이 생각하기에는 한번도 클린 코드에 대해 생각해보지 않은 사람에게는 좋은 지침서가 되어줄 것이고, 자신만의 클린 코드에 대한 신념이 있는 사람에게는 좋은 참고서가 되어줄 것이라고 생각한다.
내가 생각하는 클린 코드
나는 내가 작성한 코드가 클린 코드라고 생각하지 않는다. 만약 클린 코드를 ‘완벽한 코드’라고 정의한다면, 그것은 시간에 따라 변하며 나의 무지(無知)에 따라 달라질 것이다.어제의 내가 클린 코드라 믿었던 코드가, 내일의 나는 더 이상 클린 코드가 아니라고 판단할 수도 있다.
그래서 내가 지금 추구하는 클린 코드의 핵심은 단 한 가지다.
남이 보아도 쉽게 이해할 수 있는 코드
본인은 이 기초적인 원칙 위에 다른 여러 부수적인 가치들을 얹어 완벽에 가까운 코드를 만들고자 한다.
클린 코드 책에서는 이를
“Clean code reads like well-written prose.”
코드가 마치 잘 쓴 문장처럼 읽혀야 한다.
이처럼 표현하기도 하는데 본인은 이 원칙만 준수하려고 노력해도 클린 코드에서 설명하는 다른 원칙들이 저절로 지켜질것이라 생각한다. 물론 남이 이해하기 쉬운 코드가 반드시 효율적인 것은 아니다. 하지만 이 원칙을 무시해야 될 만큼 효율성이 시급하다면 그것은 그 코드의 설계 자체가 문제가 아닐까 생각한다. 반드시 명심하자 내가 도달하지 못한 경지에는 효율적이고 남들이 이해하기 쉬운 "클린 코드"가 분명 존재할 것이다.
마치며
코딩에 입문한지 얼마 되지 않는 사람이라도 분명 어디선가 "코딩에는 정답은 없다" 라는 말을 들어본 적이 있을 것이다. 본인도 그 말에 동의한다. 책에서 클린 코드(Clean code)의 반대말은 (Bad code)이다. 틀린 코드(Wrong code)가 아닌 까닭은 그저 완벽에서 조금 먼 코드인 것 뿐이지 모든 코드는 완성을 향한 의지로 만들어진 결과물이며, 작성자는 최선을 다했을 것이다. 다시한번 아바투르 선생의 말씀을 기억하자. 완벽한 코드는 계속 변화하기에 존재할 수 없고 우리가 추구해야할 목표는 완벽에 가까운 코드를 만드는 것이며 그것을 위해 부단히 노력해야 한다는 것을 말이다.