C# 리팩토링 스킬
유지보수성, 가독성, 베스트 프랙티스 준수를 위해 C# 코드를 체계적으로 리팩토링합니다.
중요: 모든 결과는 반드시 한국어로 작성합니다. 코드 식별자, 기술 용어, 패턴 이름 등은 원문 그대로 유지하되, 설명·문제점·개선안 등 서술 부분은 한국어를 사용합니다.
인자
$ARGUMENTS[0]: 대상 파일 경로 (선택, 미지정 시 .cs 파일 탐색)$ARGUMENTS[1]: 리팩토링 유형 (선택):solid,pattern,modern,extract,all- 미지정 시: 모든 카테고리를 스캔하고, 발견된 항목만 적용
실행 단계
1단계: 대상 식별
파일이 지정되지 않은 경우 ($ARGUMENTS[0]이 비어있음):
- 최근 수정된
.cs파일 탐색 - 사용자에게 대상 파일 선택 요청
2단계: 코드 분석
대상 코드를 읽고 리팩토링 기회를 분석합니다.
TargetFramework 확인: .csproj에서 <TargetFramework>를 읽어 C# 버전을 파악하고, 해당 버전에서 사용 가능한 기능만 제안합니다.
3단계: 리팩토링 적용
$ARGUMENTS[1] 기준 또는 전체 카테고리를 분석합니다:
리팩토링 카테고리
SOLID 리팩토링 (solid)
| 위반 | 리팩토링 |
|---|---|
| SRP | Extract class, 책임 분리 |
| OCP | Strategy/Template Method 패턴 도입 |
| LSP | 상속 계층 수정, Composition 사용 |
| ISP | 인터페이스를 작은 단위로 분리 |
| DIP | 인터페이스 추출, 의존성 주입 |
Pattern 도입 (pattern)
| Code Smell | 권장 패턴 |
|---|---|
| 복잡한 객체 생성 | Builder, Factory Method |
| 타입별 다중 조건문 | Strategy, State |
| 전역 상태 접근 | Singleton (신중하게), DI |
| 복잡한 하위 시스템 | Facade |
| 트리/복합 구조 | Composite |
| 동적 기능 추가 | Decorator |
| 요청 처리 체인 | Chain of Responsibility |
Modern C# 문법 (modern)
| 기존 문법 | Modern 대안 | 최소 버전 |
|---|---|---|
| 생성자 + 필드 할당 | Primary constructor | C# 12 |
new List<T> { ... } | Collection expressions [...] | C# 12 |
| 다중 null 체크 | Pattern matching, ?., ?? | C# 8 |
| 장황한 switch 문 | Switch expressions | C# 8 |
| 수동 INPC 구현 | [ObservableProperty] (CommunityToolkit.Mvvm) | - |
| 변경 가능한 프로퍼티 (non-MVVM) | required, init | C# 11 |
| 단순 데이터용 class | Record types | C# 9 |
| 전통적 foreach | LINQ (적절한 경우) | - |
Extract 리팩토링 (extract)
- Extract Method: 긴 메서드 → 작고 집중된 메서드
- Extract Class: 큰 클래스 → 여러 응집된 클래스
- Extract Interface: 구체 의존성 → 인터페이스 추상화
- Extract Base Class: 중복 코드 → 공유 기반 클래스
- Extract Parameter Object: 다수 매개변수 → 단일 객체
출력 형식
모든 내용은 한국어로 작성합니다. 코드 식별자와 기술 용어는 원문을 유지합니다.
# 리팩토링 결과
## 대상
- 파일: {파일 경로}
- 리팩토링 유형: {유형}
- TargetFramework: {버전}
## 적용된 변경
### {리팩토링 이름}
- 위치: `file.cs:line`
- 변경 전:
```csharp
// 기존 코드
- 변경 후:
// 리팩토링된 코드
- 이점: {설명}
요약
- 총 리팩토링: {N}건
- 변경된 줄 수: {N}
- 새로 생성된 파일: {목록}
추가 권장 사항
- 추가로 적용 가능한 개선 사항
- 고려할 관련 패턴
## 에러 처리
| 상황 | 처리 |
|------|------|
| `.cs` 파일 없음 | "리팩토링 대상 .cs 파일이 없습니다" 메시지 출력 후 종료 |
| 대상 파일 미발견 | 사용자에게 파일 경로 재확인 요청 |
| TargetFramework < net8.0 | C# 12 전용 기능 제안 제외, 경고 노트 출력 |
## 가이드라인
- 기존 기능을 유지합니다 (동작 변경 없음)
- 대규모 재작성이 아닌 점진적 변경을 합니다
- 영리함보다 가독성을 우선합니다
- 팀의 패턴 친숙도를 고려합니다
- 로직이 명확하지 않은 경우에만 주석을 추가합니다
- 테스트 프로젝트가 존재하면 `dotnet test` 실행 후 회귀 없음을 확인합니다