리팩터은(는) 무엇을 하나요?
사용 시점
- 사용자가 리팩터링, 구조 재구성, 코드 이동, 모듈 분할 또는 병합, 인터페이스 단순화, 단계별 재작성, 의존성 역전, 또는 중복 코드 제거를 요청할 때.
- 변경이 구조를 변경하면서 동작을 보존한다고 주장할 때.
- 리팩터가 여러 호출 지점, 공개 심볼, 테스트, 또는 소유권 경계에 영향을 미칠 때.
사용하지 않아야 할 때
- 작업이 구조적 변경 없이 작은 지역 버그 수정일 때.
- 사용자가 명시적으로 동작 변경을 요청하고 동작 보존 리팩터를 요청하지 않을 때.
- 리팩터 여부를 결정하기 전에 광범위한 설계 검토가 필요할 때.
- 주요 위험 영역이 여전히 불명확하여 광범위한 엔지니어링 검토가 첫 번째 단계로 적절할 때.
워크플로
- 보존할 동작과 변경할 구조를 정의합니다.
- 비목표를 명시합니다: 기능 변경 없음, 호환성 변경 없음, 오류 의미 변경 없음, 명시적으로 요청되지 않은 성능 주장 없음.
- 리팩터의 영향을 받는 호출자, 테스트, 문서, 설정, 생성된 코드 및 공개 인터페이스를 검사합니다.
- 동작이 중요하고 검증 범위가 약한 경우 특성화 테스트를 추가합니다.
- 작업을 컴파일 및 테스트 가능한 작은 되돌릴 수 있는 단계로 나눕니다.
- 기계적 이동 또는 이름 변경을 의미 편집과 분리합니다.
- 사용자가 명시적으로 변경을 요청하지 않는 한 공개 API를 보존합니다.
- 호출자가 마이그레이션되고 동작이 확인된 후에만 이전 경로를 제거합니다.
참고 자료
- 다단계 리팩터를 계획하기 전에
references/refactor-playbook.md를 읽으십시오. - 테스트가 약하거나 동작을 고정해야 할 때
references/characterization-tests.md를 읽으십시오. - 리팩터를 마무리하기 전에
references/review-checklist.md를 읽으십시오.
중단 조건
- 보존해야 할 동작이 불분명할 때.
- 리팩터가 성공하기 위해 광범위한 동작 변경이 필요할 때.
- 공개 API, 설정, 프로토콜, 저장소, 메트릭 또는 오류 의미가 명시적인 사용자 승인 없이 변경될 수 있을 때.
- diff가 리팩터, 기능 작업, 성능 최적화 및 정리를 안전하게 검토할 수 없을 정도로 혼합할 때.
출력 규칙
- 어떤 동작이 변경되지 않은 상태로 유지되도록 의도되었는지 보고합니다.
- 기계적 변경을 의미 변경과 분리하여 보고합니다.
- 동작을 보호하는 테스트나 검사를 보고합니다.
- 확인되지 않은 모든 동작, 호환성 또는 성능 측면을 명시합니다.