티스토리 뷰
원초적 난제
프로그래머는 근본적인 가치에서 난제에 봉착한다.
개발을 어느정도 해봤다면 누구나 나쁜 코드가 업무 속도를 늦춘다는 사실을 익히 안다. 그럼에도 모든 프로그래머가 기한을 맞추려면 나쁜 코드를 양산할 수 밖에 없다고 느낀다. 간단히 말해 빨리 가기 위해 시간을 들이지 않는다. (뜨끔1)
진짜 전문가. 정말 실력있는 개발자라면 두번째 부분이 틀렸다는 사실을 잘 알고 있다. 나쁜 코드를 양산하면 기한을 맞출 수 없다. 오히려 엉망진창인 상태로 인해 속도가 곧바로 늦어지고, 결국 기한을 놓치게 된다. 그래서 기한을 맞추는 유일한 방법은, 언제나 코드를 깨끗하게 유지하려는 습관이다.
깨끗한 코드?
나쁜 코드가 심각한 장애물이라는 사실을 납득했다고 가정해보자. 빨리 서비스를 만들려면 코드를 깨끗하게 유지해야 한다는 사실도 인정한다고 가정하자. 그러면 이제 다음 질문은 '깨끗한 코드를 어떻게 작성할까?'이다. 깨끗한 코드는 굉장히 추상적인 개념이고 이게 뭔지 모르면 깨끗한 코드를 만드려고 애써봤자 소용이 없다.
깨끗한 코드를 구현하는 행위는 그림을 그리는 행위와 비슷하다. 그림을 보면 대부분의 사람은 잘 그려졌는지 엉망으로 그려졌는지 안다. 그렇지만, 잘 그린 그림을 구분하는 능력이 그림을 잘 그릴 수 있는 능력은 아니다. 다시말해, 깨끗한 코드와 나쁜 코드를 구분할 줄 안다고 깨끗한 코드를 작성할 줄 안다는 뜻은 아니다.
깨끗한 코드에 대한 정의는 프로그래머 수만큼이나 다양하다. 책의 저자는 유명한 프로그래머들에게 깨끗한 코드에 대해 의견을 물어봤는데, 대표적인 의견 하나를 가져와 보면 아래와 같다.
나는 우아하고, 효율적인 코드를 좋아한다. 논리가 간단해야 버그가 숨어들지 못하고, 의존성을 최대한 줄여야 유지보수가 쉬워진다. 오류는 명백한 전략에 의거해 철저히 처리하고, 성능은 최적으로 유지해야 사람들이 원칙 없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다. 깨끗한 코드는 한가지 일을 제대로 수행한다.
C++ 창시자 - 비야네
이 의견에서, 코드의 효율성도 언급한다는 점에서 의아했다.
주변인들과 '코드의 효율성 vs 코드의 가독성'을 두고, 어떤 코드가 좋은 코드인가?에 대해 논쟁을 펼쳤던 경험이 있는데, 나는 코드의 가독성을 선택했었다. 어떠한 이유로 C++ 창시자가 코드의 효율성도 언급을 했을까?
이에 대해 책의 저자는 이를 여러 관점에서 분석했다.
C++의 창시자니 당연히 효율성을 중요하게 여긴 것이다. 그리고 효율이 단순히 코드의 속도만을 뜻하지 않는 다는 것이다. 우리가 코드를 작성하는 것은 결국 하드웨어 자원을 사용하는 것이다. 그리고 CPU 자원을 낭비하는 코드는 좋은 코드가 아니라는 관점이다.
또한 비야네는 철저한 오류 처리도 언급한다. 이는 세세한 사항까지 꼼꼼하게 신경쓰라는 말이다. 프로그래머들이 대충 넘어가는 부분 중 하나가 오류 처리이다 (뜨끔2). 메모리 누수, 경쟁 상태, 일관성 없는 명명법이 또 다른 예시가 될 수 있고, 한마디로 요약하면 깨끗한 코드는 세세한 사항까지 꼼꼼하게 처리하는 코드를 말한다.
마지막으로 깨끗한 코드란 한 가지를 잘 한다고 언급했다. SOLID 원칙에서 S가 어떤 원칙인지 한번 떠올려보고 왜? 필요한지 생각해보면 좋을것 같다. 한가지를 수행하지 않는 나쁜 코드는 너무 많은 일을 하려 애쓰다가 의도가 뒤섞이고 목적이 흐려지게 된다. 반면, 깨끗한 코드는 한가지에 집중하기에 코드를 수정해야 하는 이유가 명확해지고, 수정해야 하는 범위가 작아진다.
보이스카우트 규칙
좋은 코드는 시간이 지나도 언제나 깨끗하게 유지가 되어야 한다. 아무리 초기에 잘 작성된 코드라도, 시간이 지나면서 엉망으로 변할 수 있다. 그러므로 적극적으로 코드의 퇴보를 막아야 한다.
책의 저자는 아래의 미국 보이스카우트가 따르는 규칙을 프로그래머에 대입한다.
캠핑장에 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라.
체크아웃할 때보다 좀 더 깨끗한 코드를 체크인한다면 코드는 절대 나빠지지 않는다. 한꺼번에 많은 시간과 노력을 투자해 코드를 정리할 필요가 없다. 지속적인 개선이야말로 전문가 정신의 본질이다. 시간이 지날 수록 코드가 좋아지는 프로젝트에서 작업을 해야하는 것은 프로그래머에게 당연한 일이 되어야 한다.
Ref : Clean Code
'BackEnd > Clean Code' 카테고리의 다른 글
[Clean Code] 2장 : 의미 있는 이름 (0) | 2023.03.01 |
---|
- Total
- Today
- Yesterday
- paging
- mmu
- Database
- Effective Java
- soft delete
- java
- 공지
- GORM
- cs
- algorithm
- Operating System
- OS
- ARP
- effective
- fiber
- spring
- go
- network
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |