본문 바로가기

CS/개발지식

코드 리팩토링와 클린 코드

리팩토링(refactoring) 이란?

  • 결과의 변경 없이 코드의 구조를 재조정함
  • 주로 가독성을 높이고 유지보수를 편하게 함
  • 버그를 없애거나 새로운 기능을 추가하는 행위는 아님
  • 사용자가 보는 외부 화면은 그대로 두면서, 내부 논리나 구조를 개선하는 유지보수 행위

 

리팩토링의 목적 / 하는 이유

  • 소프트웨어의 설계, 구조 및 구현을 개선하는 동시에 소프트웨어의 기능을 보존하기 위해서
  • 코드의 가독성을 향상시키고 복잡성을 감소시키는 효과
  • 소스 코드의 유지 보수성을 개선하고 확장성을 개선하기 위해서
소프트 웨어를 더 이해하기 쉽고 수정하기 쉽게 만들어서, 코드의 품질을 좋게 만들기 위함

 

리팩토링의 사용 시기

  • 기능을 추가할 때
  • 버그를 수정해야 할 때
  • 코드 검토 (Code Review) 할 때

클린 코드 이란?

  • 원하는 로직을 빠르게 찾을 수 있는 코드
  • 모든 사람이 이해하기 쉽도록 작성된 코드

 

클린 코드의 중요성

  • 유지보수를 위해서
  • 기존 코드에 추가 작업하는 시간이 압도적으로 많기 때문에
  • 대부분의 시간을 기존 코드를 읽고, 이해하는 데 사용하기 때문에
  • 테스트 코드가 없어서, 하나를 수정하면 여러 곳에서 Side-effect 가 발생하기 때문에
  • 코드의 품질이 낮아지면, 복잡도가 상승하여 코드를 수정하는 데 더 많은 시간이 소요되기 때문에

 

클린 코드의 주요 원칙

  • 코딩 표준, 아키텍쳐 표준 및 설계 가이드를 준수해야 한다.
  • 단순한 것이 효율적이며, 복잡함을 최소화해야 한다.
  • 참조되거나 수정되는 코드는 원래보다 클린해야 한다.
  • 항상 근본적인 원인을 찾아야한다. 그렇지 않으면 반복될 것이다.
  • 하나의 파일은 하나의 언어로 작성한다.

 

클린 코드를 하는 방법 ( 내 기준 )

  • 검색 가능한 이름을 사용하기
  • 함수명은 반드시 동사로
  • 함수는 하나의 동작만 실행될 수 있도록 구성한다.
  • 함수의 인수는 3개 이하가 적당함.
많을 경우 => object 로 정리해서 param 사용한다.
  • 함수의 파라미터에 boolean 을 둬서 액션 2개 이상을 구현하기 보다는, 함수를 2개로 구분하는 것이 좋다.
  • 변수명은 너무 축약하지 않을 것, 최대한 이해하기 쉬운 변수명으로 만든다.
  • 같은 목적의 코드를 뭉쳐놓을 것.

TDD 이란?

테스트 주도 개발 ( Test Driven Development )
- 개발 시 테스트 케이스(코드) 를 작성하고 그것을 통과하는 코드를 만드는 과정을 반복하며, 해당 부분이 제대로 동작하는 지에 대한 피드백을 적극적으로 받는 개발 방식

 

과정

  • 테스트 코드 작성 (결과값 무조건 실패)
  • 결과값 성공이 나올 수 있도록 최소한의 코드 작성
  • 테스트와 병행하며 실행 코드를 리팩토링

장점

  • 보다 튼튼한 객체 지향적인 코드 생산
    • 필요에 따라 모듈을 추가하거나, 제거해도 소프트웨어 전체 구조에 영향을 미치지 않게 됨
  • 재설계 시간의 단축
    • 테스트 코드를 먼저 작성하기 때문에 설계가 탄탄해짐.
  • 디버깅 시간의 단축
    • 특정 버그가 발생했을 경우 버그를 손 쉽게 찾아낼 수 있다.
  • 테스트 문서의 대체 가능
    • 테스팅을 자동화 시킴과 동시에 보다 정확한 테스트 근거를 산출 가능
  • 추가 구현의 용의함
    • 개발이 완료된 소프트웨어에 기능을 추가하기 편리하다.

단점

  • 생산성이 저하됨.
    • 개발 속도가 느려지기 때문에

출처:https://velog.io/@velopert/TDD%EC%9D%98-%EC%86%8C%EA%B0%9C

 

일반 개발 방식의 단점

 

과정

  1. 요구사항 분석
  2. 설계
  3. 개발
  4. 테스트
  5. 배포

단점

  1. 소프트웨어 개발을 느리게 하는 잠재적 위험이 존재
    1. 소비자의 요구사항이 처음부터 명확하지 않음
    2. 처음부터 완벽한 설계가 어려움
    3. 자체 버그 검출 능력 저하, 소스코드 품질 저하
    4. 자체 테스트 비용이 증가
  2. 재사용과 관리가 어려워서 유지 보수를 어렵게 만듬

'CS > 개발지식' 카테고리의 다른 글

Sass (Syntactically Awesome Style Sheets)  (0) 2023.02.01
개발환경 설정 - Webpack  (2) 2022.12.28
크로스 브라우징 (Cross browsing)  (0) 2022.12.26
렌더링 엔진  (0) 2022.12.26
웹 브라우저의 동작 순서  (0) 2022.12.26