X

소프트웨어 리팩토링 (Refactoring)

I. 소프트웨어 코드 정제 기법, 소프트웨어 리팩토링

개념 목적
유지보수 생산성 향상 위해 기능을 변경하지 않고 소스코드를 수정, 보완하는 소프트웨어 품질향상 기법 – 유지보수성 향상
– 유연한 시스템
– 생산성 향상
– 소프트웨어 품질 향상
  • Bad Smell 징후 대상 소스코드 정비를 통한 유지보수성, 비용 절감 및 구조개선, 성능 향상

 

II. 소프트웨어 리팩토링 절차 및 주요 기법

가. 소프트웨어 리팩토링 절차

  • 코드 → (배드스멜) → 리팩토링 → (심플코드) → 테스트
  • 중복, 불명확한 의미, 복잡한 코드에서 Bad Smell 징후

나. 소프트웨어 리팩토링 주요 기법

주요 기법 설명 기대 효과
Extract
Method
– 그룹으로 묶을 수 있는
코드의 메서드 추출
– 결합도 감소
Extract
Class
– 두 개의 클래스 업무를
신규 클래스로 이동
– 응집도증가
– 결합도 감소
Move
Method
– 정의된 클래스보다 타
클래스 다수 호출 시 이동
– 응집도 증가
– 결합도 감소
Rename
Method
– 메서드 이름이 목적을
드러내도록 이름 변경
– 가독성 향상
– 유지보수 향상
Replace Temp with Query – 임시 변수 참조 시
메서드 호출로 교체
– 응집도 증가
– 결합도 감소
Full up
Field
– 서브 클래스 동일 필드 보유 시 슈퍼 클래스로 이동 – 중복 제거
Full up
Method
– 동일 기능 메서드를
슈퍼 클래스로 이동
– 중복 제거

 

III. 성공적인 리팩토링 수행 방안 및 리엔지니어링과 비교

가. 성공적인 리팩토링 수행 방안

절차도 수행 방안
– 소규모 변경(단일 리팩토링)
회귀테스트(Retest All)
– 테스트 통과 시 단계상승
– 하나라도 미작동 시 Undo
  • 리팩토링의 가장 중요한 사항은 기존 서비스에 영향 없이 안정성 기반 수행 필요

나. 리팩토링과 리엔지니어링 비교

항목 리팩토링 리엔지니어링
관점 모듈의 정제 시스템 개선
적용 범위 클래스, 메서드 단위 시스템 등 대단위
반복성 대다수 반복 반복 미발생
적용 사례 메서드 다형성 적용 시스템 전반적 모듈화

 

[참고] 코드스멜

1) 게으른 클래스(Lazy Class): 자식 클래스와 부모 클래스 차이 없으면 합침
2) 추측성 일반화(Speculative Generality): 추측만으로 생성한 클래스는 제거
3) 임시필드(Temporary Field): 파라미터를 줄이기 위한 필드, 메서드는 클래스화
4) 메시지 체인(Message Chain): 특정 객체를 얻기위한 다수 객체는 간소화
5) 미들 맨(Middle Man): 다른 클래스로 위임하는 역할만 담당하는 클래스 검토
6) 부적절한 친밀(Inappropriate Intimacy): 불필요 데이터를 가지고 있는 경우
7) 불완전 라이브러리(Incomplete Library): 불완전 시 필요 부분 추가 구성
8) 거부된 유산(Refused Bequest): 부모클래스의 I/F 거부 시 부모 객체 호출
9) 주석(Comment): 코드 내부 주석은 메서드로 추출해서 설명

도리: