클린코드는 무엇일까?
많은 개발자들이 살면서 한 번은 들어봤던 말이다.
단순이 코드를 깔끔하고 보기 좋게 짜면 클린코드일까?
우선 저명한 개발자는 클린코드를 뭐라고 정의했는지 살펴보자.
“I like my code to be elegant and efficient. The logic should be straightforward and make it hard for bugs to hide, the dependencies minimal to ease maintenance, error handling complete according to an articulated strategy, and performance close to optimal so as not to tempt people to make the code messy with unprincipled optimizations. Clean code does one thing well.”
Bjarne Stroustrup, inventor of ‘C++
C++의 창시자인 Bjarne Stroustrup은 C에 객체 개념이 없기 때문에 객체지향의 효과를 극대화 하기 위해 C++을 만들었다.
C++의 창시자는 위와 같이 클린코드에 대해 정의하였는데,
- 코드의 논리는 명확하고 간결해야 한다.
- 의존성을 최소화하여 유지보수를 용이하게 해야 한다.
- 오류 처리는 명확한 전략에 따라 완벽하게 이루어져야 한다.
- 성능은 최적화되어야 하지만, 이를 위해 원칙에 어긋나는 코드를 작성하는 유혹을 불러일으키면 안 된다.
또 한 개발자의 정의를 살펴보자.
“Clean code is simple and direct. Clean code reads like well-written prose. Clean code never obscures the designers’ intent but rather is full of crisp abstractions and straightforward lines of control.”
- Grady Booch, author of ‘Object-Oriented Analysis and Design with Applications’
UML을 창시한 Grady Booch는 다음과 같이 정의하였다.
- 깨끗한 코드는 간단하고 직관적이어야 한다.
- 깨끗한 코드는 잘 쓰여진 문장처럼 읽히도록 작성되어야 하고, 디자이너가 의도한 바를 명확하게 드러내야 한다.
- 깨끗한 코드는 명료하고 간결한 추상화와 직관적인 제어 흐름을 갖추어야 한다.
두 개발자의 의견을 종합하면 클린코드에서 가장 중요한 요소 중 하나는 가독성이다. 즉, 모든 팀원이 이해하기 쉽도록 작성된 코드이다.
보통 어떤 코드를 유지보수하기 위해 살펴보면 절반 이상이 코드를 분석하는데 시간을 소모한다.
가독성이 좋은 코드는 이 시간을 확 줄여줄 수 있고, 유지보수를 더욱 쉽게 만들어준다.
그럼 클린코드를 작성하기 위한 기본적인 원칙을 알아보자.
- Follow Standard Conventions : Coding 표준, 아키텍처 표준 및 설계 가이드를 준수하라.
- Keep It Simple, Stupid (KISS) : 단순한 것이 효율적이며, 복잡함을 최소화하라.
- Boy Scout Rule : 캠핑장을 떠나기 전에 원래보다 깨끗하게 해야 한다.(참조되거나 수정되는 코드는 원래보다 Clean하게 해야 한다)
- Root Cause Analysis : 항상 근본적인 원인을 찾아라. 그렇지 않으면 반복될 것이다.
- Do Not Multiple Languages in One Source File : 하나의 파일은 하나의 언어로 작성하라.
대부분이 알고 있는 방법으로는 Coding 표준을 준수하고 단순하게 만들어서 가독성을 높이는 방법이다.
3번의 보이스카우트 규칙은 이전에 있던 코드를 내가 더욱 단순하게 만들자는 방법이다. 즉 시간이 지날수록 깨끗하게 유지되는 코드를 만들자는 규칙이다. 변수 이름 하나를 개선하고, 긴 함수를 분할하고, 중복을 제거하고, 복잡한 if문 하나를 정리하면 그걸로도 충분하다.
또 클린코드하면 같이 나오는 얘기로는 SOLID 원칙이 있다.
다음 시간에 SOLID에 대해 정리를 해보고자 한다.
'CS지식' 카테고리의 다른 글
Ajax, axios, fetch 특징 (0) | 2023.05.11 |
---|---|
SOLID 원칙 (0) | 2023.05.07 |
URL에 SSAFY를 검색하면 일어나는 과정 (0) | 2023.04.27 |
GET방식 POST방식 특징 (0) | 2023.04.18 |