본문 바로가기
IT기술노트/소프트웨어공학

리팩토링(Refactoring)

by 비트코기 2021. 2. 1.
반응형

코드스멜, 클린코드, 유지보수성 향상, XP


I. 코드스멜 제거를 통한 품질 향상 기법, 리팩토링의 개요

가. 리팩토링(Refactoring)의 정의

-    소프트웨어 모듈의 외부적 기능은 수정하지 않고, 내부 구조, 관계 등을 단순화 하여 유지보수성을 향상시키는 품질 향상 기법

나. 리팩토링의 목적

목적

설명

유지보수성 향상

복잡한 코드의 단순화, 소스의 가독성 향상

유연한 시스템

소프트웨어 요구사항 변경에 유연한 대응

생산성 향상

정제 및 최적화된 소스의 재사용

품질향상

소프트웨어 오류 발견이 용이하여 품질향상


II. 리팩토링의 주요기법 및 절차

가. 리팩토링의 주요기법

구분

기법

설명

메소드정리

Extract Method

그룹으로 묶을 수 있는 코드 조각이 있다면 특성을 알 수 있도록 네이밍하여 메소드로 추출

Replace Temp With Query

수식 결과값 저장을 위해 임시 변수를 사용한다면 수식을 메소드로 만들고, 임시 변수 참조를 메소드 호출로 수정

객체간 기능이동

Move Method

메소드가 자신이 정의된 클래스보다 다른 클래스에서 메소드를 더 많이 사용한다면 메소드를 이동

Extract Method

두개의 클래스가 해야 할 일을 하나의 클래스가 하고 있다면 분리

메소드 호출 단순화

Rename Method

메소드 이름이 목적 표현을 못할 때 이름 변경

Remove Parameter

불필요한 파라미터 제거

클래스/메소드 일반화

Full up field

두 서브 클래스가 동일한 필드를 가지고 있다면 그 필드를 수퍼 클래스로 올림

Full up Method

동일한 일을 하는 메소드를 여러 서브 클래스에서 가지고 있다면 이 메소드를 수퍼 클래스로 올림

기타

Encapsulation field

Public 필드가 있는 경우 그 필드를 Private로 만들고 접근자 제공

Decompose Conditional

조건 논리를 단순화하여 표현

나. 리팩토링의 절차

절차

설명

리팩토링 대상식별

테스트를 통한 적용


III. 리팩토링 고려사항 및 유사기법 비교

가. 리팩토링 고려사항

구분

내용

데이터베이스

- APP DB스키마가 밀접하게 결합되어 마이그레이션 어려움

인터페이스 변경

- 완전하지 않은 인터페이스로 시스템 불안정 초래

리팩토링이 어려운 디자인 변경

- 리팩토링에 적합하지 않은 디자인 존재

리팩토링 금지

- 마감이 임박할 경우 리팩토링 금지

- 코드를 처음부터 다시 작성해야 할 경우 리팩토링 금지

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

구분

리팩토링

리엔지니어링

관점

모듈의 정제

현 시스템을 개선(기능)

적용범위

클래스, 모듈 등 소단위

시스템, 기능 등 대단위

반복성

반복 많음

반복이 거의 없음

적용사례

특정 메소드에 대한 다형성 적용

시스템의 전반적 모듈화

반응형

'IT기술노트 > 소프트웨어공학' 카테고리의 다른 글

소프트웨어 테스트 프로세스  (0) 2021.02.02
소프트웨어 테스트(Software Test)  (0) 2021.02.02
SPA(Single Page Web Application)  (0) 2021.02.01
코드스멜, 클린코드  (0) 2021.02.01
TDD(Test-Driven Development)  (0) 2021.02.01
웹 접근성(Web Accessibility)  (0) 2021.02.01
UX (User eXperience)  (0) 2021.02.01
클래스 재사용  (0) 2021.01.31

댓글