IT 기술/SW공학 & 프로젝트 관리

소프트웨어 리팩토링

gooooooood 2025. 3. 8. 21:15
반응형

Ⅰ. 소프트웨어 내부로직의 재구조화 작업, 리팩토링의 정의 및 목적

가. 리팩토링의 정의

- 소프트웨어 모듈의 외부적 기능은 수정하지 않고 내부적인 구조, 관계를 재구조화함으로써 소프트웨어의 유지보수성을 향상시키는 기법

 

나. 리팩토링의 목적

- 소프트웨어 디자인 개선 - 설계 의도화 구현 코드의 일관성 유지
- 소프트웨어 이해도 향상 - 이해하기 쉬운 코드로 개발자 작업 단축
- 오류발견 용이성 확보 - 소스 구조를 명확히 하여 오류 디버깅 용이
- 전체 개발 생선성 유지  - 좋은 디자인으로 개발자 생선성 향상

 

 

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

가. 리팩토링의 절차

 

 

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

기법 정의 기대효과
매서드 추출
(Extract Method)
- 긴 메서드의 일부 코드를 별도의 메서드로 분리 - 유지보수 용이
매서드 통합
(Inline Method)
- 불필요하게 분리된 메서드 통합 - 코드 간소화
클래스 추출
(Extract Class)
- 너무 많은 역할 클래스의 속성, 메소드 추출 - 단일 책임 원칙 준수
클래스 통합
(Inline Class)
- 불필요하게 분리된 클래스 통합 - 코드 간소화
변수 캡슐화
(Encapsulate Variable)
- 직접 접근 변수 private로 캡슐화 - 데이터 보호
매직 넘버 제거
(Replace Magic Number)
- 의미 없는 숫자 의미 있는 상수로 치환 - 가독성 향상
메서드 이름 재정의
(Rename Method)
- 메서드 이름을 목적이 드러나게 변경 - 가독성 향상
중복 코드 제거
(Remove Duplicate Code)
- 여러 중복 코드 공통 메서드로 이동 - 일관성 유지

- 코드 리팩토링으로 코드 스멜 문제 해결하여 클린코드 생성

 

Ⅲ. 코드스멜의 정의와 특징 및 종류별 리팩토링 방법

가. 코드스멜의 정의와 특징

정의 - 프로그램 내에서 이해하기 어렵고 수정이 힘들며 확장이 어려운 코드로 리팩토링이 필요한 코드
특징 - 코드 스멜은 객관적이지 않으며 개발 환경에 따라 다를 수 있음
- 팀이나 회사에서 중요하게 생각하는 가치에 따라 다를 수 있음
- 어떤 언어를 사용하느냐에 따라 다를 수 있음  

 

나. 코드스멜의 종류와 각각의 리팩토링 방법

코드스멜 설명 리팩토링 방법
중복 코드(Duplicate Code) - 동일한 코드가 여러곳에 반복 중복 제거
긴 메소드(Long Method) - 하나의 메서드가 여러 기능 메서드 추출
큰 클래스(Large Class) - 하나의 클래스가 많은 역할 클래스 분리
신 객체(Gob Object) - 한 객체가 너무 많은 책임 역할별 책임 분리
기능 질투(Feature Envy) - 다른 클래스의 데이터 과도한 참조 객체 캡슐화
산만한 변경(Divergent Change) - 하나의 클래스가 너무 많은 책임 단일 책임 원칙 적용
산탄총 수술(Shotgun Surgery) - 하나의 변경에 여러 클래스 영향 인터페이스 분리
과도한 주석(Comments) - 기능별 과도한 주석 작성 메서드, 변수명 직관적 작성
과도한 조건문(Switch Statements) - 과도한 switch-case문 반복 다형성 활용

 

 

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

- 목표 설정
- 코드 스멜 식별
- 테스트 코드 확보
- 버전 관리
- 소규모 변경(단일 리팩토링)
- Red-Green-Fefactor 원칙
- 중복 제거
- 캡슐화 적용
- 테스트 자동화
- 코드 리뷰
- 성능 테스트
- 문서 및 주석
준비 단계 실행 단계 검증 단계

- 리팩토링은 코드 구조만 점진적으로 수정, TDD 활용하여 안정적으로 수행

 

반응형

'IT 기술 > SW공학 & 프로젝트 관리' 카테고리의 다른 글

FMEA, HAZOP, STPA  (0) 2025.03.05
현장감리와 PMO  (0) 2025.03.05
상용 소프트웨어 직접 구매  (0) 2025.03.05
탐색적 테스팅(Exploratory Testing)  (0) 2025.03.05
소프트웨어 결합도(Coupling)  (0) 2025.03.05