Comment Checker — 주석 품질 관리
AI가 생성한 코드에서 불필요한 주석을 감지하고, 좋은 주석 원칙에 따라 제거 또는 개선을 제안합니다.
나쁜 주석 카테고리 (상세)
| 카테고리 |
설명 |
예시 |
| 중복 주석 |
코드가 이미 설명하는 내용을 반복 |
i++; // i를 1 증가시킨다 |
| 잘못된 주석 |
코드와 다른 내용, 오래된 정보 |
함수 설명과 구현이 다른 경우 |
| 형식적 주석 |
규칙 때문에 강제로 작성, 가치 없음 |
의미 없는 DocComment, 파라미터 반복 설명 |
| 저널 주석 |
코드 내 changelog, 버전 이력 |
// 2024-01-15 수정됨 |
| 노이즈 주석 |
자명한 내용만 기술 |
// 변수 선언 |
| 위치 마커 |
섹션 구분용 주석 (Extract Method 대상) |
// === Section ===, // 1. 데이터 로드 |
| 주석 처리된 코드 |
삭제하고 버전 관리에 맡기기 |
// oldFunction(); |
| HTML/포맷팅 |
주석 내 마크업 남용 |
|
좋은 주석 카테고리 (상세)
| 카테고리 |
설명 |
예시 |
| 법적/저작권 |
라이선스, 저작권 |
Copyright, License 헤더 |
| 의도 설명 |
WHY를 설명 (WHAT 금지) |
결제 실패 시 3회까지 재시도 (비즈니스 정책) |
| 복잡한 로직 설명 |
정규식, 비트 연산 등 난해한 부분 |
|
| 경고 |
특별한 주의사항, 부작용 |
이 함수는 메인 스레드에서만 호출 |
| TODO |
티켓 번호와 함께 |
TODO(JIRA-1234): 서버 API 수정 후 제거 |
| Public API 문서화 |
DocComment, 공개 인터페이스 문서 |
매개변수, 반환값, 예외 설명 |
Extract Method over Comment 패턴
주석이 코드 블록을 설명할 때: 해당 블록을 잘 이름 붙인 함수로 추출하고 주석을 제거한다.
예시:
Before:
// 사용자 인증 확인
if user != nil && user.isActive { ... }
After:
if isUserAuthenticated(user) { ... }
private func isUserAuthenticated(_ user: User?) -> Bool {
return user != nil && user.isActive
}
판단 기준: 주석이 "무엇을 하는지" 설명한다면 → Extract Method 후보. 함수명이 주석을 대체한다.
4단계 리뷰 워크플로우
- 스캔: 대상 파일 확인, 주석 개수 파악, 언어 식별
- 패턴 감지: Grep으로 주석 패턴 검색 (언어별 주석 구문 대응)
- 분류: 발견된 주석을 제거/개선/유지 카테고리로 분류
- 제안: 제거 권장, 개선 권장, 유지 사유를 포함한 리포트 출력
AI 생성 주석 감지 패턴
- 코드를 자연어로 그대로 번역한 주석 (// 변수 초기화, // 반환)
- 함수명/타입명과 동일한 내용의 DocComment
- 모든 파라미터를 나열하는 형식적 문서화
- // Gets the user, // Saves the data 등 get/set 반복
- 의미 없는 섹션 구분 (// Data loading, // Processing)
주석 품질 판정 테이블
| 타입 |
판정 |
조치 |
| Redundant |
제거 |
코드로 표현 가능 |
| Mandatory |
제거/개선 |
규칙 재검토, 가치 있는 경우만 유지 |
| What 설명 |
제거 |
Extract Method 또는 이름 개선 |
| Why 설명 |
유지 |
비즈니스 맥락, 정책 |
| Rule/정책 |
유지 |
비즈니스 규칙 |
| Perf/최적화 |
유지 |
성능 관련 설명 |
| Algo/알고리즘 |
유지 |
복잡한 로직 설명 |
| Doc/API문서 |
유지 |
Public API에 한함 |
| Stale/오래됨 |
제거 |
코드와 불일치 |
| Section |
개선 |
Extract Method로 전환 |
리뷰 리포트 형식
## Comment Check Report
제거 권장:
- [파일:라인] 주석 — 사유
개선 권장:
- [파일:라인] 현재 → 개선안 (Extract Method 또는 이름 개선)
유지:
- [유지 사유가 있는 주석]
요약: 제거 N개, 개선 N개, 유지 N개
핵심 원칙
- 코드는 자기 설명적이어야 한다: 주석 없이도 의도가 명확해야 함
- 주석은 최후의 수단: 코드로 표현할 수 없을 때만 사용
- 감사받는 주석만 작성: Why를 설명, What은 금지
- 주석보다 리네이밍 우선: 변수/함수 이름으로 의도 표현
주석 작성 판단 기준
주석 작성 전 확인:
- 이 주석이 없으면 코드를 이해할 수 없는가? → No면 불필요
- 이 내용을 함수/변수 이름으로 표현할 수 있는가? → Yes면 이름 개선
- Extract Method로 해결할 수 있는가? → Yes면 Extract 적용
- Why(왜)를 설명하는가? → No면 재검토
- 읽는 사람이 감사할 만한 정보인가? → No면 삭제
자동 수정 모드
명확한 위반 사항은 자동 제거를 제안합니다. 사용자 확인 후 적용 가능.
예시
나쁜 예:
// Bad: redundant
i++; // i를 1 증가시킨다
// Bad: What 설명
// 데이터베이스에 사용자 저장
database.save(user)
좋은 예:
// Good: intent
// 결제 실패 시 3회까지 재시도 (비즈니스 정책)
retryPayment(maxAttempts: 3);
1---2name: comment-checker-23description: 코드 주석 품질 관리 및 불필요한 주석 감지. 좋은/나쁜 주석의 원칙과 AI 생성 주석 감지 워크플로우를 제공합니다. Use when reviewing code comments, removing redundant comments, or writing meaningful inline documentation.4---5
6# Comment Checker — 주석 품질 관리
7
8AI가 생성한 코드에서 불필요한 주석을 감지하고, 좋은 주석 원칙에 따라 제거 또는 개선을 제안합니다.
9
10## 나쁜 주석 카테고리 (상세)
11
12| 카테고리 | 설명 | 예시 |
13|----------|------|------|
14| 중복 주석 | 코드가 이미 설명하는 내용을 반복 | i++; // i를 1 증가시킨다 |
15| 잘못된 주석 | 코드와 다른 내용, 오래된 정보 | 함수 설명과 구현이 다른 경우 |
16| 형식적 주석 | 규칙 때문에 강제로 작성, 가치 없음 | 의미 없는 DocComment, 파라미터 반복 설명 |
17| 저널 주석 | 코드 내 changelog, 버전 이력 | // 2024-01-15 수정됨 |
18| 노이즈 주석 | 자명한 내용만 기술 | // 변수 선언 |
19| 위치 마커 | 섹션 구분용 주석 (Extract Method 대상) | // === Section ===, // 1. 데이터 로드 |
20| 주석 처리된 코드 | 삭제하고 버전 관리에 맡기기 | // oldFunction(); |
21| HTML/포맷팅 | 주석 내 마크업 남용 | <!-- HTML 주석 형태 --> |
22
23## 좋은 주석 카테고리 (상세)
24
25| 카테고리 | 설명 | 예시 |
26|----------|------|------|
27| 법적/저작권 | 라이선스, 저작권 | Copyright, License 헤더 |
28| 의도 설명 | WHY를 설명 (WHAT 금지) | 결제 실패 시 3회까지 재시도 (비즈니스 정책) |
29| 복잡한 로직 설명 | 정규식, 비트 연산 등 난해한 부분 | |
30| 경고 | 특별한 주의사항, 부작용 | 이 함수는 메인 스레드에서만 호출 |
31| TODO | 티켓 번호와 함께 | TODO(JIRA-1234): 서버 API 수정 후 제거 |
32| Public API 문서화 | DocComment, 공개 인터페이스 문서 | 매개변수, 반환값, 예외 설명 |
33
34## Extract Method over Comment 패턴
35
36주석이 코드 블록을 설명할 때: 해당 블록을 잘 이름 붙인 함수로 추출하고 주석을 제거한다.
37
38예시:
39```
40Before:
41// 사용자 인증 확인
42if user != nil && user.isActive { ... }
43
44After:
45if isUserAuthenticated(user) { ... }
46
47private func isUserAuthenticated(_ user: User?) -> Bool {
48 return user != nil && user.isActive
49}
50```
51
52판단 기준: 주석이 "무엇을 하는지" 설명한다면 → Extract Method 후보. 함수명이 주석을 대체한다.
53
54## 4단계 리뷰 워크플로우
55
561. 스캔: 대상 파일 확인, 주석 개수 파악, 언어 식별
572. 패턴 감지: Grep으로 주석 패턴 검색 (언어별 주석 구문 대응)
583. 분류: 발견된 주석을 제거/개선/유지 카테고리로 분류
594. 제안: 제거 권장, 개선 권장, 유지 사유를 포함한 리포트 출력
60
61## AI 생성 주석 감지 패턴
62
63- 코드를 자연어로 그대로 번역한 주석 (// 변수 초기화, // 반환)
64- 함수명/타입명과 동일한 내용의 DocComment
65- 모든 파라미터를 나열하는 형식적 문서화
66- // Gets the user, // Saves the data 등 get/set 반복
67- 의미 없는 섹션 구분 (// Data loading, // Processing)
68
69## 주석 품질 판정 테이블
70
71| 타입 | 판정 | 조치 |
72|------|------|------|
73| Redundant | 제거 | 코드로 표현 가능 |
74| Mandatory | 제거/개선 | 규칙 재검토, 가치 있는 경우만 유지 |
75| What 설명 | 제거 | Extract Method 또는 이름 개선 |
76| Why 설명 | 유지 | 비즈니스 맥락, 정책 |
77| Rule/정책 | 유지 | 비즈니스 규칙 |
78| Perf/최적화 | 유지 | 성능 관련 설명 |
79| Algo/알고리즘 | 유지 | 복잡한 로직 설명 |
80| Doc/API문서 | 유지 | Public API에 한함 |
81| Stale/오래됨 | 제거 | 코드와 불일치 |
82| Section | 개선 | Extract Method로 전환 |
83
84## 리뷰 리포트 형식
85
86```
87## Comment Check Report
88
89제거 권장:
90- [파일:라인] 주석 — 사유
91
92개선 권장:
93- [파일:라인] 현재 → 개선안 (Extract Method 또는 이름 개선)
94
95유지:
96- [유지 사유가 있는 주석]
97
98요약: 제거 N개, 개선 N개, 유지 N개
99```
100
101## 핵심 원칙
102
1031. 코드는 자기 설명적이어야 한다: 주석 없이도 의도가 명확해야 함
1042. 주석은 최후의 수단: 코드로 표현할 수 없을 때만 사용
1053. 감사받는 주석만 작성: Why를 설명, What은 금지
1064. 주석보다 리네이밍 우선: 변수/함수 이름으로 의도 표현
107
108## 주석 작성 판단 기준
109
110주석 작성 전 확인:
1111. 이 주석이 없으면 코드를 이해할 수 없는가? → No면 불필요
1122. 이 내용을 함수/변수 이름으로 표현할 수 있는가? → Yes면 이름 개선
1133. Extract Method로 해결할 수 있는가? → Yes면 Extract 적용
1144. Why(왜)를 설명하는가? → No면 재검토
1155. 읽는 사람이 감사할 만한 정보인가? → No면 삭제
116
117## 자동 수정 모드
118
119명확한 위반 사항은 자동 제거를 제안합니다. 사용자 확인 후 적용 가능.
120
121## 예시
122
123나쁜 예:
124```
125// Bad: redundant
126i++; // i를 1 증가시킨다
127
128// Bad: What 설명
129// 데이터베이스에 사용자 저장
130database.save(user)
131```
132
133좋은 예:
134```
135// Good: intent
136// 결제 실패 시 3회까지 재시도 (비즈니스 정책)
137retryPayment(maxAttempts: 3);
138```