반응형
Ⅰ. 소프트웨어 내부로직의 재구조화 작업, 리팩토링의 정의 및 목적
가. 리팩토링의 정의
- 소프트웨어 모듈의 외부적 기능은 수정하지 않고 내부적인 구조, 관계를 재구조화함으로써 소프트웨어의 유지보수성을 향상시키는 기법
나. 리팩토링의 목적
- 소프트웨어 디자인 개선 | - 설계 의도화 구현 코드의 일관성 유지 |
- 소프트웨어 이해도 향상 | - 이해하기 쉬운 코드로 개발자 작업 단축 |
- 오류발견 용이성 확보 | - 소스 구조를 명확히 하여 오류 디버깅 용이 |
- 전체 개발 생선성 유지 | - 좋은 디자인으로 개발자 생선성 향상 |
Ⅱ. 리팩토링의 절차 및 주요 기법
가. 리팩토링의 절차

나. 소프트웨어 리팩토링 주요 기법
기법 | 정의 | 기대효과 |
매서드 추출 (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 |