728x90
✨ 이 글은 [ 코드프레소 Java 웹 개발 체험단 활동 ] 내용입니다 ✨
💜 코드프레소 이러닝 강의 수강 중 - SW 유지보수성 향상을 위한 Clean Code 💜
😎 아래의 링크를 통해 프리미엄 IT 교육 서비스, 코드프레소를 확인해보세요 😎
Controll Structures란?
- 조건, 루프(loop), 흐름을 제어하는 선언문
- if, if-else, for, while, do while 등...
Control Structures 와 Clean Code
- Control Structures 는 코드 복잡도에 가장 큰 영향을 주는 요소이다
- 특히 중첩된 Control Structures는 코드의 가독성을 낮추고, 복잡도는 올리며, 테스트 용이성은 낮춘다
Cyclomatic Complexity
- 소스 코드의 복잡도를 나타내는 지표이다
- 1976년 Thomas J. McCabe에 의해 고안되었다
- 복잡도가 낮을수록 프로그램이 구조적으로 안정되었다는 의미이다
- 또한 복잡도가 높을수록 프로그램이 비구조적이며 불안정하다는 의미이다
- 프로그램의 제어 프름을 node, edge로 표현한 그래프를 기반으로 계산한다
- 계산 방법
- 첫번째 계산 방법이다
- 두번째 계산 방법으로, 앞의 계산 방법과 결과는 동일하다
Cyclomatic Complexity의 기준
- 소프트웨어의 규모, 도메인 특성 등에 따라 Cyclomatic Complexity 기준이 달라진다
- 1976년, Cyclomatic Complexity가 10 이하를 권고하였다
- Microsoft의 개발 가이드에서는 25 이하를 권고한다
- 카네기 멜론 대학의 SW 공학 연구소의 가이드는 위의 사진과 같다
- 일반적으로 Complexity 하나마다 테스트 케이스가 하나씩 필요하다고 한다
Clean Contorl Structures
- Control Structures는 복잡도에 큰 영향을 끼친다
- 따라서 개발 초기부터 코드 복잡도를 고려한 Control Structues의 설계가 중요하다
- 읽기 쉬운 조건문
- Fail Fast! Early Return!
- 최대한 긍정 조건으로 표현하라
Control Structures의 조건문
- 조건문의 구성
- 비교할 대상이 되는 특정 변수, 특정 값
- 결과가 Boolean(True/False) 이 되는 비교.논리 연산자
- < > <= >= == != && || !
읽기 쉬운 조건문이란?
- 연산자를 기준으로 아래의 순서대로 작성한다
매직 넘버와 가독성
- 매직 넘버란 그 의미를 알 수 없는 임의의 수이다
- 조건문에서 매직 넘버는 코드의 가독성을 해치는 주요 원인이다
- 코드를 이해하기 위해 별도의 문서와 시간이 필요하다
- 따라서 조건문을 구성하는 오른쪽 항의 값은 잘 설명할 수 있는 명확한 상수로 설계되어야 한다
삼항 연산자와 가독성
- 삼항 연산자를 사용하려면 항상 가독성을 고려해야 한다
- 코드의 라인을 최소화하는 것보다, 코드를 읽고 이해하는 시간을 최소화하는 것이 중요하다 (가독성 중시)
- 아주 간단한 경우가 아니라면, 삼항 연산자보단 if-else로 표현하는 것이 자연스럽다!
Fail First! Early Return!
- 핵심 로직을 처리하기 전에 다수의 사전 검증 로직이 필요한 경우가 존재한다
- 이 때는 사전 검증 로직과 핵심 로직이 혼재되어 코드의 가독성이 낮아진다
만약 위의 코드를 가독성 좋게 바꾸면 아래와 같이 바꿀 수 있다
- 위와 같이 구현하는 경우 검증 영역과 핵심 로직 영역이 분리된다
- Method의 복잡도가 낮아진다
- 가독성이 향상되고, 테스트가 용이해진다
Fail Fast 란?
- Control Structure를 구성할 때 코드의 가독성을 높이면서 복잡도를 줄이기 위해 Fail Fast! Early Return! 의 구조를 고려해야 한다
- 따라서 빨리 실패하는 '검증 로직'을 구현하여 로직을 분리한다
- 빨리 실패하는 '검증로직'을 다시 method로 분리하고 예외를 사용하면 코드의 가독성을 더욱 높이고 복잡성은 낮출 수 있다
- Fail Fast는 Clean Code와 코드의 복잡도를 줄이기 위한 중요한 기법이다
부정 표현 vs 긍정 표현
- 긍정적인 표현은 부정적 표현보다 이해하기 상대적으로 용이하므로, 조건문은 긍정 표현을 사용하는 것이 가독성 관점에서 좋다
긍정 표현을 활용한 Control Structures
- ! 를 사용하는 조건은 긍정을 표현하는 Method로 치환하자!
Summary : Clena Control Sturcure
- Control Structure는 신경쓰지 않으면 복잡도를 증가시킨다
- 가독성을 심각하게 저해하고 테스트를 어렵게 만든다
- Control Structure를 최대한 이해하기 쉽고 중첩이 적은 방향으로 설계 및 작성해야 한다
- Fail Fast / Early Return 또는 Method 추출 기법으로 가독성 향상이 가능한지 항상 확인해야 한다
728x90
'코드프레소 체험단 > Clean Code' 카테고리의 다른 글
[SW 유지보수성 향상을 위한 Clean Code] Clean Code를 위한 Code Refactoring (0) | 2022.01.24 |
---|---|
[SW 유지보수성 향상을 위한 Clean Code] Clean Formatting (0) | 2022.01.24 |
[SW 유지보수성 향상을 위한 Clean Code] Clean Comment (0) | 2022.01.24 |
[SW 유지보수성 향상을 위한 Clean Code] Clean Method (0) | 2022.01.24 |
[SW 유지보수성 향상을 위한 Clean Code] Clean Naming (2) (0) | 2022.01.24 |
댓글