기록은 기억을 이기고 시간보다 오래 남는다.

카테고리 없음

리팩토링: 더 좋은 코드를 만드는 과정

준_준 2024. 6. 5. 14:20

리팩토링은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정하는 것'을 의미합니다. 주로 코드의 가독성을 높이고 유지 보수를 쉽게 하기 위해 사용됩니다. 리팩토링은 버그를 수정하거나 새로운 기능을 추가하는 행위가 아닙니다.


리팩토링의 이유

1. 소프트웨어 설계

  • 큰 그림을 기반으로 코드를 이해하기 쉽게 만드는 과정이 필요합니다.
  • 단기 목표만을 위해 코드를 수정하다 보면 기반 구조가 무너지기 쉽습니다.

2. 소프트웨어 이해도

  • 프로그래밍은 컴퓨터와의 대화입니다. 어떻게 하면 컴퓨터에게 내가 하고자 하는 일을 명확하게 표현할 수 있을까요?
  • 단, 컴퓨터에게만 대화를 하는 것이 아닙니다. 내 코드는 나만 살펴볼까요?

3. 소프트웨어 버그

  • "코드를 이해하기 쉽다"는 "버그를 찾기 쉽다"는 것을 의미합니다.

리팩토링 시기

3의 법칙

  1. 처음에는 그냥 한다.
  2. 비슷한 일을 두 번째로 하게 되면 일단 계속 진행한다.
  3. 비슷한 일을 세 번째 하게 되면 리팩토링한다.

 

리팩토링 방법

1. 복잡한 조건문의 단순화

  • 복잡한 조건문은 코드를 이해하기 어렵게 만들고, 버그를 발생시키기 쉽습니다.
  • 논리적인 조건문을 명확하게 구성하여 이러한 문제를 해결할 필요가 있습니다.

2. 중복된 코드 제거 (함수화 1)

  • 중복된 코드는 프로그램의 크기를 불필요하게 늘리며 유지 보수를 어렵게 합니다.
  • 특정 로직을 함수로 만들면 코드를 재사용할 수 있고, 각 함수가 수행하는 작업을 명확하게 이해할 수 있습니다.

3. 데이터(상태 정보) 관리

  • 전역 오염 방지: 현재 관리하는 데이터(상태 정보)는 '전역 범위'에 선언되어 있어서 어디에서나 접근하고 수정할 수 있습니다.
    • 이렇게 되면 데이터(상태 정보)의 상태를 추적하기 어렵고, 의도하지 않게 값이 변경될 가능성이 있습니다.
    • 또한, 데이터(상태 정보)끼리 어떤 연관성을 가지고 있는지 알기 어렵습니다.
  • 이제는 전역에서 관리하는 데이터를 하나의 객체 안에 넣어서 관리할 예정입니다.
    • 특정 데이터를 수정하는 함수(메서드)만 객체 안에 포함시켜 정의합니다.
    • 이렇게 하면 관련 있는 데이터와 함수를 묶어서 보다 구조화된 방식으로 코드 관리를 할 수 있습니다.
    • 또한, 하나의 객체에 정의된 함수는 해당 객체 안에 정의된 데이터의 상태를 변경하고 관리하는 것을 명확하게 보여주며, 해당 데이터와 밀접하게 연관되어 있음을 알 수 있습니다.

4. 복잡도 낮추기 (함수화 2)

  • 함수 추출과 코드(관심사) 분리
    • 함수 추출: 하나의 함수 내에서 기능적으로 관련된 코드 블록을 분리하여 새로운 함수로 추출하는 과정입니다.
      • 기존 함수에서 추출된 새로운 함수는 일련의 작업을 수행하고 그 결과를 반환합니다.
    • 코드 분리(Separation of concerns): 긴 함수나 클래스를 더 작고 의미 있는 단위로 분리하는 작업을 의미합니다.
      • 코드 분리는 주로 함수 추출과 함께 사용되어 코드베이스의 모듈화와 구조 개선을 도모합니다.

5. 파일 모듈화

  • 파일 모듈화: 코드를 여러 개의 파일로 분리하고, 각 파일을 독립적인 모듈로 사용할 수 있는 구조로 만드는 것입니다. 이를 통해 코드의 재사용성, 유지보수성 및 가독성을 향상시킬 수 있습니다.
  • ES6부터는 자바스크립트에 공식적으로 모듈 시스템이 도입되었습니다.
    • ES6 모듈은 파일 단위로 독립적인 모듈을 정의하고, import 및 export 키워드를 사용하여 모듈 간에 코드를 공유합니다.
반응형