본문으로 건너뛰기
cccskills
무료GitHub에 공개

replace-temp-with-query

임시 변수를 메서드 호출(query)로 치환하여 중복 제거·추출 용이성 확보. "임시 변수 메서드로", "temp 제거", "지역 변수를 쿼리로", "/replace-temp-with-query" 요청 시 사용. 단, 임시 변수가 서로 얽혀 치환 불가면 /extract-method-object가 적합. /replace-temp-with-query [commit-ref]로 호출.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(1)

  • SKILL.md4.2 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Replace Temp with Query

GOAL

한 번만 대입되고 여러 곳에서 사용되는 임시 변수를 의미 있는 이름의 메서드로 추출하여:

  • 중복된 계산 로직 제거
  • 표현식의 의미를 명확한 메서드명으로 전달
  • Extract Method의 전제 조건 충족 (임시 변수 제거)

CONSTRAINTS

  • 계열: Tidy — 후보 보고 후 승인 없이 적용 (../../references/refactoring-procedure.md §0·§3-A)
  • 동작 변경 금지: 구조 개선만 수행 (기능 변경 없음)
  • 테스트 수정 금지: 구조 변경이 테스트를 실패시키면 되돌리기
  • 명시적 git add: git add -A 금지, 변경된 파일만 명시

적용 패턴

Before

double basePrice = quantity * itemPrice;
if (basePrice > 1000) {
    return basePrice * 0.95;
} else {
    return basePrice * 0.98;
}

After

if (basePrice() > 1000) {
    return basePrice() * 0.95;
} else {
    return basePrice() * 0.98;
}

private double basePrice() {
    return quantity * itemPrice;
}

추가 예시: 복잡한 조건식

// Before
double tax = order.getTotal() * 0.1;
double shipping = order.getTotal() > 100 ? 0 : 10;
return order.getTotal() + tax + shipping;

// After
return order.getTotal() + tax() + shipping();

private double tax() { return order.getTotal() * 0.1; }
private double shipping() { return order.getTotal() > 100 ? 0 : 10; }

적용 기준

적용 대상

  • 한 번만 대입되는 임시 변수
  • 여러 곳에서 참조되는 변수
  • 복잡한 표현식을 담은 변수 (의미 부여 가치 높음)
  • Extract Method 전 단계로 사용

적용 제외

  • 루프 내 누적 변수 (accumulator): sum += value;
  • 부수효과 있는 표현식: 메서드 호출이 상태 변경하는 경우
  • 여러 번 대입되는 변수: 값이 변경되는 경우
  • 성능 크리티컬 구간: 측정된 성능 문제가 있는 경우만

OUTPUT FORMAT

실행 절차

공통 골격(대상 파일 수집 → 후보 제시(계열별 승인 규칙) → 적용 → 테스트 → 커밋/되돌리기, 브랜치·PR이 필요한 조건)은 이 스킬 디렉터리 기준 ../../references/refactoring-procedure.md가 정본이다. 아래는 이 기법에 고유한 부분만 규정한다.

후보 식별 (공통 절차 2단계)

  • 임시 변수 패턴 탐지 (한 번 대입, 여러 번 참조)
  • 적용 제외 조건 필터링
  • 각 후보에 대해:
    • 파일명 및 라인 번호
    • Before/After 코드 미리보기
    • 적용 근거 (참조 횟수, 표현식 복잡도)

후보 제시 예시 (공통 절차 3단계)

발견된 후보 3개:

1. OrderService.java:45
   basePrice = quantity * itemPrice
   → private double basePrice() { return quantity * itemPrice; }
   (참조 3회, 복잡도 낮음)

→ 승인 없이 적용 (Tidy 계열)

리팩토링 적용 (공통 절차 4단계)

  • 메서드 추출 (private, 원본 표현식)
  • 임시 변수 참조를 메서드 호출로 치환
  • 임시 변수 선언 제거

커밋 메시지: refactor: replace temp with query in <클래스명> (공통 절차 6단계)

출력 예시

완료: Replace Temp with Query

변경 내용:
- OrderService.java: basePrice 변수 → basePrice() 메서드
- InvoiceCalculator.java: discount 변수 → discount() 메서드

테스트: 모든 테스트 통과 (23 tests)
커밋: refactor: replace temp with query in OrderService, InvoiceCalculator

FAILURE CONDITIONS

공통 실패 조건(계열별 승인 규칙 위반, 테스트 실패 방치, 테스트 수정, 커밋 단위, git add -A, heredoc 한글 메시지)은 ../../references/refactoring-procedure.md에 있다. 아래는 이 기법에 고유한 것만.

  • 부수효과 있는 표현식을 메서드로 추출함
  • 누적 변수를 메서드로 치환함

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

동일한 결과를 내는 여러 조건문(OR 나열·중첩 AND)을 하나로 통합하고 의미 있는 boolean 메서드로 추출. "조건문 합쳐", "같은 결과 반환하는 if 정리", "중첩 if 평탄화", "/consolidate-conditional" 요청 시 사용. 단, 여러 메서드에 흩어진 동일 조건을 호출자 쪽으로 올리는 것은 /lift-up-conditional, 복잡한 조건식·분기를 메서드로 쪼개는 것은 /decompose-conditional이 적합. /consolidate-conditional [commit-ref]로 호출.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

msbaek/msbaek-claude-plugins82026년 10월 16일 업데이트

기능의 external behavior를 Cucumber 인수 테스트(주 검증층)로 구축 — .feature 실행으로 문서↔코드 드리프트를 구조적으로 차단, Four Layer(Steps→Protocol Driver→SUT), 태그 기반 가역 제외, 기존 JUnit 인수 테스트 이관. "인수 테스트 도입", "Gherkin을 실행 가능하게", "cucumber 셋업" 요청 시 사용. /cucumber-acceptance로 호출.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

msbaek/msbaek-claude-plugins82026년 10월 16일 업데이트

복잡한 if/then/else의 조건식과 각 분기를 의미 있는 메서드로 추출하여 가독성 향상. "조건문 분해", "if 가독성", "복잡한 조건식에 이름 붙여", "/decompose-conditional" 요청 시 사용. 단, 같은 결과를 내는 조건문들을 하나로 합치는 것은 /consolidate-conditional, 타입별 분기를 클래스로 바꾸는 것은 /replace-conditional-with-poly가 적합. /decompose-conditional [commit-ref]로 호출.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

msbaek/msbaek-claude-plugins82026년 10월 16일 업데이트

Primitive Obsession 제거 — 검증·연산이 따라다니는 primitive 필드(금액+통화, 이메일 문자열 등)를 도메인 개념을 담은 Value Object로 치환. "값 객체 도입", "primitive obsession", "Money 클래스로", "/discover-value-object" 요청 시 사용. 단, 함께 전달되는 파라미터 묶음을 객체로 바꾸는 것은 /introduce-parameter-object, 컬렉션을 감싸는 것은 /first-class-collection이 적합. /discover-value-object [commit-ref]로 호출.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

msbaek/msbaek-claude-plugins82026년 10월 16일 업데이트

컬렉션 getter가 내부 List/Set을 직접 노출하는 것을 방지 — unmodifiable 반환 + add/remove 메서드 제공. "컬렉션 캡슐화", "getter가 List 그대로 노출", "unmodifiable로", "/encapsulate-collection" 요청 시 사용. 단, 컬렉션과 관련 로직을 전용 클래스로 뽑는 것은 /first-class-collection이 적합. /encapsulate-collection [commit-ref]로 호출.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

msbaek/msbaek-claude-plugins82026년 10월 16일 업데이트

암묵적 의존성(전역 변수·클래스 필드·싱글턴 접근)을 명시적 파라미터로 전환하여 메서드 투명성 향상. "숨은 의존성 드러내", "필드 대신 파라미터로", "전역 참조 제거", "/explicit-parameters" 요청 시 사용. 단, 파라미터가 많아져 묶어야 하면 /introduce-parameter-object, I/O와 계산 분리는 /segregate-functional-core가 적합. /explicit-parameters [commit-ref]로 호출.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

msbaek/msbaek-claude-plugins82026년 10월 16일 업데이트

msbaek의 스킬 모두 보기

이 스킬의 문제 신고