1. 깨끗한 코드

Posted by yunki kim on January 1, 2022

  사람들은 시간이 없다는 이유로, 지겹다는 이유로 코드를 다듬지 않고 나쁜 코드를 작성한다. 그러고서는 나중에 손보겠다는 다짐을 한다. 하지만 나중은 결코 오지 않는다.

  나쁜 코드는 생산성을 떨어트린다. 코드를 고칠 때마다 사이드 이팩트가 터진다. 매번 스파게티 코드를 어떤식으로던 해석해 스파게티 코드를 더하다 보면 쓰래기 더미는 점점 높아지고 커진다. 일부 관리층은 이 문제를 해결하기 위해 새로운 인력을 투입한다. 하지만 새로운 인력은 기존 코드에 대한 이해도가 부족해 결국 또 다른 나쁜 코드들을 양산한다. 결국에는 생산성이 바닥을 치게 된다.

  결국 팀은 반기를 들게 되고 새로운 팀을 만들고 재설계에 자원을 쏟아붓기 시작한다. 기존 서비스를 유지보수 하면서. 이때 부터는 재설계 팀과 유지보수 팀의 레이스가 시작된다. 재설계 팀은 재설계를 하는 동안 유지보수팀이 기존 시스템에 가하는 변경을 따라 잡음과 동시에 기존 시스템의 기능을 완벽히 구현해야 한다. 시간이 길어질 수록 재설계 역시 스파게티 코드로 변하고 초창기 팀원들은 모두 떠나게 된다.

  나쁜 코드가 나오는 이유는 전적으로 프로그래머에게 있다. 많은 프로그래머들은 나쁜 코드의 요인을 상부의 압박 등에서 찾지만 궁극적으로는 프로그래머의 잘못이다. 우리가 의사라 가정해 보자. 환자가 수술 전 시간이 없다는 이유로 손을 씻지 말것을 요구한다면 우리는 감염의 위험성을 알기 때문에 그 요구를 거부할 것이다. 이와 마찬가지로 나쁜 코드의 위험성을 인지하지 못하고 있는 상부의 말을 그대로 따르는 것은 프로그래머의 잘못이다. 

  당장의 시간을 절약한다는 이유로 나쁜 코드를 작성하는 것은 나중에 더 많은 리소스를 소비하고 기한을 맞추지 못하는 결과를 야기한다. 따라서 깨끗한 코드를 작성하고 유지하는 것이 유일한 지름길이고 올바른 길이다.

  깨끗한 코드를 어떻게 작성해야 할까? 단순히 깨끗한 코드와 나쁜 코드를 구분할 줄 아는 능력으로는 부족하다. 깨끗한 코드를 작성하기 위해서는 '청결'이라는 감각을 활용해 자잘한 기법들을 적용하는 절제와 규율이 필요하다. 이 '청결'의 열쇠는 '코드 감각'이다. '코드 감각'이 있으면 좋은 코드와 나쁜 코드를 구분하고 절제와 규율을 적용해 나쁜 코드를 좋은 코드로 바꾸는 전략도 파악한다. 

 

깨끗한 코드

  깨끗한 코드에 대해 C++의 창시자는 다음과 같이 말했다.

  "나는 우아하고 효율적인 코드를 좋아한다. 논리가 간단해야 버그가 숨어들지 못한다. 의존성을 최대한 줄여야 유지보수가 쉬워진다. 오류는 명백한 전략에 의거해 철저히 처리한다. 성능을 최적으로 유지해야 사람들이 원칙 없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다. 깨끗한 코드는 한 가지를 제대로 한다." - C++ 창시자 비야네 스트롭스트룹(Bjarne Strosrup)

  '우아한'이라는 것은 보기에도 즐거운 코드이다. 즉, 깨끗한 코드는 잘 쓴 문장처럼 읽혀야 한다. '효율'은 단순히 속도 뿐만 아니라 자원을 낭비하지 않는 것을 의미한다. '유혹'은 나쁜 코드는 나쁜 코드를 유혹한다는 의미이다. 즉, 나쁜 코드를 고치면서 되려 더 나쁜 코드를 만든다는 의미이다. 

  깨끗한 코드는 메모리 누수, 경쟁 상태(race condition - 둘 이상의 조작이 타이밍이나 순서에 따라 결과값에 영향을 주는것), 일관성 없는 명명법 등이 없어야 한다. 또 한 너무 많은 일을 할려고 해서는 안된다. 너무 많은 일을 하려고 애쓰다 보면 의도가 뒤섞이고 목적이 흐려진다.

  깨끗한 코드는 다른 사람이 고치기 쉬워야한다. 또 한 테스트 케이스가 없는 코드는 깔끔한 코드가 아니다. 

  깨끗한 코드의 특징:

    1. 주의 깊게 짜여져 있다.

    2. 테스트 코드가 존재하고 모든 테스트를 통과한다.

    3. 중복이 없다.

    4. 시스템 내 모든 설계 아이디어를 표현한다.

    5. 한가지 기능만 한다.

    6. 가독성이 높다(짐작한 대로 작동되야 한다)

    7. 작게 추상화 한다.

 

우리는 저자다

  자바독에서 @author 필드는 저자를 소개한다. 즉, 개발자는 저자다. 저자는 독자와 잘 소통할 책임이 있다. 독자는 저자가 쓴 글을 보고 판단을 내린다.

  코드를 작성하다 보면 새로운 코드를 작성하기 위해 기존 코드를 보는 일이 잦다. 이때 주변 코드가 읽기 쉬워야 새로운 코드를 작성하기 수월하다. 

 코드를 깨끗하게 작성했다고 해서 그게 끝이 아니다. 아무리 깨끗한 코드라도 시간이 지나면 엉망이 될 수 있다. 따라서 미국 보이스카우트 규칙을 기억하자 - '캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라'. 깨끗한 코트를 유지하기 위해 끊임 없이 개선하라. 그렇다고 한번에 많은 시간을 투자할 필요는 없다. 단지 변수 이름을 조금 개선하고, 함수를 적절히 분리하고, 약간의 중복을 없애는 등의 노력이면 충분하다.

 

출처 - 클린코드