본문 바로가기
코드프레소 체험단/Clean Code

[SW 유지보수성 향상을 위한 Clean Code] Clean Control Structure

by 의정부핵꿀밤 2022. 1. 24.
728x90

✨ 이 글은 [ 코드프레소 Java 웹 개발 체험단 활동 ] 내용입니다 ✨

💜 코드프레소 이러닝 강의 수강 중 - SW 유지보수성 향상을 위한 Clean Code 💜

😎 아래의 링크를 통해 프리미엄 IT 교육 서비스, 코드프레소를 확인해보세요 😎

https://www.codepresso.kr/

 

프리미엄 IT 교육 서비스 - 코드프레소

 

www.codepresso.kr


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의 기준

카네기 멜론 대학의 SW 공학 연구소 가이드

  • 소프트웨어의 규모, 도메인 특성 등에 따라 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 란?

Fail Fast
추상화 -> method 만들기
결과

  • 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

댓글