Claude Code에는 simplify (code-simplifier)라는 스킬이 있다. Anthropic 공식 플러그인으로, 코드를 리팩토링할 때 자동으로 적용되는 가이드라인 세트다. 일반 프롬프트와 차이가 있을까?

3가지 유형의 "지저분한 코드"를 준비하고, 동일한 리팩토링 요청을 스킬 없이 vs 있이 비교해봤다.


이 스킬은 뭘 하는가

code-simplifier는 Anthropic 공식 플러그인으로, /simplify 명령으로 호출하면 코드를 리팩토링해주는 에이전트다.

핵심 철학:

  1. 기능 보존 — 코드가 하는 일은 절대 바꾸지 않는다
  2. 명확성 > 압축 — 읽기 쉬운 코드가 짧은 코드보다 낫다
  3. 중첩 삼항 금지 — switch나 if/else 선호
  4. 과도한 단순화 금지 — 너무 clever한 솔루션 지양
  5. 불필요한 추상화 제거 — 하지만 유용한 추상화는 유지

주의: 설치한다고 자동 실행되지 않는다

스킬 설명에 "코드 변경 후 자동으로 리팩토링"이라고 적혀 있지만, 실제로는 /simplify를 직접 호출해야 실행된다. 코딩할 때마다 알아서 돌아가는 것이 아니다. 자동 실행을 원하면 hooks를 설정해야 한다 — 예를 들어 "파일 저장 후 simplify 실행" 같은 걸 settings.json에 구성하는 방식.

스킬의 정체는 마크다운으로 된 가이드라인 문서다. "이렇게 리팩토링해라"는 원칙을 시스템 프롬프트에 주입하는 것.


테스트 설계

테스트 일시: 2026년 3월 29일 | 모델: Claude Opus 4.6 (1M context)

프롬프트: "이 코드를 리팩토링해줘. 기능은 그대로 유지하면서 코드 품질을 개선해줘."

3가지 유형의 코드에 동일 프롬프트를 적용:

테스트 코드 유형 원본 라인 수
#1 Python — 12단계 중첩 조건문 108줄
#2 React TSX — 모놀리식 컴포넌트 239줄
#3 TypeScript — 과도한 추상화 (6개 클래스) 215줄

테스트 #1: Python 중첩 조건문

주문 처리 함수. 원본은 if 안에 if가 12단계까지 중첩되어 있다.

항목 Without With Skill
라인 수 86줄 (−20%) 73줄 (−32%)
얼리 리턴 ✅ 적용 ✅ 적용
헬퍼 함수 분리 ✅ 3개 (모듈 레벨) 1개 (내부 함수)
할인율 딕셔너리 ✅ 상수로 분리 ✅ 로컬 변수
구조 검증/할인/처리 분리 단일 함수, 플랫

관찰: 양쪽 모두 핵심 기법(얼리 리턴, 딕셔너리 매핑)은 동일하게 적용. Without은 함수 3개로 더 잘게 쪼갰고, With는 단일 함수로 유지하면서 더 짧게 만들었다. 스킬의 "명확성 > 압축" 원칙이 반영되어 불필요한 분리를 하지 않은 것.


테스트 #2: React 모놀리식 컴포넌트

239줄짜리 UserProfileDashboard. 12개의 useState, 탭 전환, 모달, CRUD 전부 한 파일.

항목 Without With Skill
라인 수 387줄 (+62%) 379줄 (+59%)
컴포넌트 분리 ✅ 6개+ ✅ 4개+
상태 통합 ✅ EditFormState ✅ EditFormData
삼항 연산자 제거 부분 제거 ✅ switch + 룩업 테이블
API 레이어 분리
명시적 Props 타입 부분 적용 ✅ 전체 적용

관찰: 양쪽 모두 줄 수가 오히려 늘었다 — 이건 정상이다. 컴포넌트 분리를 하면 Props 인터페이스, import 등이 추가된다. 핵심 차이는 스킬 버전이 "중첩 삼항 금지" 원칙을 충실히 따라 switch문과 룩업 테이블을 사용한 것. Without은 삼항을 일부 남겨뒀다.


테스트 #3: 과도한 추상화

CSV→JSON 변환이라는 단순한 작업을 6개 클래스(Logger, ValidatorRegistry, TransformStep, Pipeline + 커스텀 에러 3종)로 구현한 코드.

항목 Without With Skill
라인 수 26줄 (−88%) 28줄 (−87%)
클래스 제거 ✅ 전부 제거 ✅ 전부 제거
에러 처리 조건 합쳐서 1줄 조건 분리해서 2줄 (더 명시적)
에러 메시지 통합 메시지 1개 케이스별 메시지 2개

관찰: 이 케이스는 양쪽이 거의 동일한 결론에 도달했다. "6개 클래스가 필요 없다"는 판단은 스킬 없이도 자명하기 때문. 미세한 차이: 스킬 버전은 에러 조건을 분리해서 각각 다른 메시지를 줬다 — "명시적 코드 > 압축된 코드" 원칙의 반영.


종합 비교

지표 Without With Skill
총 토큰 38,465 39,560
총 소요 시간 117초 115초
비용 차이 거의 동일 (+3%)

결론: 쓸 가치가 있나?

미묘하다. frontend-design보다 차이가 작다.

스킬이 나은 점

  • 삼항 연산자를 확실히 제거
  • 에러 메시지를 더 명시적으로
  • "과도한 분리" 자제 (Test1)
  • Props 타입을 빠짐없이 정의

스킬 없이도 된 점

  • 얼리 리턴 패턴 — 양쪽 동일
  • 불필요한 추상화 제거 — 양쪽 동일
  • 컴포넌트 분리 — 양쪽 모두 수행
  • API 레이어 분리 — Without만 수행

Claude는 스킬 없이도 리팩토링을 잘 한다. 얼리 리턴, 추상화 제거 같은 큰 구조 변경은 양쪽이 동일하다. 차이는 세부 원칙의 일관성에서 나온다.

예를 들어 "중첩 삼항 금지"라는 규칙이 없으면 Without은 삼항을 일부 남겨둔다. 코드는 작동하지만, 팀 컨벤션이 "삼항 금지"라면 매번 수동으로 잡아야 한다. 스킬은 이런 스타일 가이드를 자동으로 강제하는 역할이다.

한 줄 요약: simplify 스킬은 "리팩토링 능력을 높이는 도구"가 아니라 "팀 코딩 컨벤션을 자동으로 적용하는 린터"에 가깝다.

추천 사용법: CLAUDE.md에 팀 코딩 컨벤션을 자세히 적고 simplify를 활성화하면, 코드 작성 → 자동 리팩토링 파이프라인이 만들어진다. 스킬 자체를 그대로 쓰기보다, 팀 규칙에 맞게 커스터마이징해서 쓰는 게 진짜 가치.