이전에 회사 인턴 면접을 볼 때, "좋은 코드"가 무엇인가? 에 대한 질문을 받았다.
돌아가기만 하는 코드를 짜왔던 나에게 좋은 코드에 대해서 깊이 생각해 본적이 없어서, "추후 유지보수 시 리팩토링하기 용이한 코드", "다른 개발자들이 읽기 쉬운 코드"라고 두루뭉술하게 답변했다.
추상적으로 말했지만, 구체적으로 프로그래밍 시 좋은 코드를 만들어 내는 방법을 알지는 못하였다. 어떻게 좋은 코드를 짤 수 있을지 개발자로서 한 번도 생각하지 못한게 나중에 실이 될 것 같아 "클린 코드"라는 책을 사서 읽게 되었다.
코드가 존재하리라
책에서도 언급했다시피, chatGPT와 같이 자동으로 코드를 생성해주는 시대가 왔다. 그러나 코드는 요구사항을 상세히 표현하는 수단이다. 따라서 인간의 창의력과 직관, 감정을 가지고 세밀한 요구사항을 코드로 표현하는 것은 늘 필요하다. 따라서 코드도 항상 존재한다.
나쁜 코드
르블랑의 법칙(Leblanc's Law) 나중은 결코 오지 않는다는 뜻이다.
나쁜 코드는 개발 속도를 늦추고, 팀 생산성을 떨어뜨린다. 기한을 맞추기 위해 좋은 코드와 딜을 하는 경우가 있는데, 진짜 전문가는 기한을 맞추는 유일한 방법을 언제나 코드를 최대한 깨끗하게 유지하는 습관이라고 말한다.
그래서, 깨끗한 코드란 ?
(1) 비야네 스트롭스트룹
- 보기에 즐거운 코드
- 속도와 CPU 자원을 고려하였을 때 효율적으로 동작하는 코드
- 철저한 오류 처리를 신경 쓴 코드
- 한 가지에 집중하여 구현된 코드
(2) 그래디 부치
- 단순하고 직접적인 코드
- 설계자의 의도를 숨기지 않은 코드
- 명쾌한 추상화와 단순한 제어문으로 구성된 코드
(3) 데이브 토마스
- 작성자가 아닌 사람도 읽기 쉽고 고치기 쉬운 코드
- 단위 테스트 케이스와 인수 테스트 케이스가 존재하는 코드
데이브 토마스는 특히, 테스트 케이스가 없다면 아무리 코드가 우아하고 가독성이 높아도 깨끗하지 않다고 이야기한다.
(4) 마이클 페더스
- 시간을 들여 주의 깊게 작성한 코드
(5) 론 제프리스
- 중복이 없는 코드
- 한 기능만 제대로 수행하는 코드
- 클래스, 메서드, 함수 등을 최대한 추상화한 코드
론은 중복, 표현력, 그리고 추상 메서드나 추상 클래스로 실제 구현을 감싸는 것을 중요하게 두었다.
(6) 워드 커닝햄
- 코드를 읽으며 짐작할 수 있는 기능을 그대로 수행하는 코드
우리는 저자다
저자에게는 독자가 있다. 저자는 독자와 잘 소통할 책임이 있다.
실제로 코드를 잘 짜는 것은 저자 본인에게도 큰 도움을 준다고 한다. 우리가 코드를 짜면서, 코드를 짜는 시간이 읽는 시간보다 10분의 1 수준으로 적다. 따라서 새 코드를 짜면서 계속해서 기존 코드를 읽어 나가기 때문에, 읽기 쉬운 코드가 중요하다고 할 수 있다.
보이스카우트 규칙
코드를 잘 짰다면, 시간이 지나도 언제나 깨끗하게 유지해야 한다.
보이스카우트 규칙에는 다음과 같은 것이 있다.
캠핑장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라 !
코드는 시간이 갈 수록 좋아져야 하고, 코드의 퇴보를 막기 위해서 지속적으로 시간을 들여 개선해야 한다.
'DEV book > Clean Code' 카테고리의 다른 글
[Clean Code] 3장 함수 (1) (0) | 2023.05.23 |
---|---|
[Clean Code] 2장 의미 있는 이름 (0) | 2023.04.28 |