discipline-cleancodelisted
Install: claude install-skill changja88/dddjango
# 클린코드 규율
## 언제 쓰나
언어 비종속적 클린코드 원칙(명명, 함수 설계, 캡슐화, SOLID, 중복, 오류 처리, 리팩토링)이 필요한 코드 작성·리뷰·리팩터링 시 로드한다. 경계:
- 화면 분해·MVVM 삼총사 구조·표시 상태 판별·승격 → `architecture-web`
- 파일트리·디렉터리 구조·명명 **사실** → `discipline-web-houserules`
- HTML·템플릿·삼총사 .py·client·urls 표기 상세 → `implementation-ui`
## 핵심 운영 원칙
- 이름은 의도를 드러내라: 한 개념에 한 단어, 클래스는 명사·메서드는 동사, 이름 길이는 범위에 비례 (§2)
- 매직 값·상수 승격은 판정 원리로: 닫힌 집합을 분기·판정에 쓰면 1곳째부터 집합 타입, 선언된 심볼은 심볼로만 소비(`==` 비교), 허용 목록(사람 대상 서술·정의부·외부 프로토콜 소유 문자열 등)은 리터럴 유지 (§2.14)
- 함수는 작게, 한 가지만 해라: 추상화 수준 통일, 인수 최소화, 플래그 인수 금지, 명령·조회 분리, 부수 효과 금지 (§3)
- 인터페이스 주석은 필수, 구현 주석은 최소화: what을 공개하고 how는 은닉 (§4, §6.4–§6.5)
- 모듈은 깊게 설계하라: 강력한 기능을 단순한 인터페이스 뒤에 숨기고, 얕은 모듈·레드 플래그를 경계 (§7)
- 행동이 상태를 결정한다: 묻지 말고 시켜라, 조건문은 다형성으로 대체, 로직과 데이터를 함께 (§8)
- SOLID 5원칙을 적용하라: SRP·OCP·LSP·ISP·DIP — 같은 이유로 바뀌는 것은 모으고, 다른 이유는 분리 (§9)
- DRY는 지식의 중복을 금지한다: 코드 유사성이 아닌 지식 단위로 판단 (§13, 표기 반복의 경계는 §18)
- 오류는 설계로 먼저 제거하고, 불가하면 예외를 사용하라: 보호절·DbC·방어적 프로그래밍 (§12)
- 코드 스멜을 감지하고 리팩토링 기법으로 제거하라: 기능 보존을 검증하며 작은 단계로 진행 (§15)
- 레거시 코드는 Seam을 찾아 보호한 후 개선하라: Sprout·Wrap과 임시 특성화 probe를 쓰되 현재 구현 포착을 영구 계약으로 고정하지 않는다 — 동작 보존 안전망은 py_compile·`manage.py check`·결정적 백스톱·사용자 육안이다 (§16)
- **반복>상속(dddjango-web 결정)**: BaseView·BaseViewModel·공용 렌더 헬퍼·Mixin 금지 — 표시 지식의 중복은 view_model·state·design_system으로 모으고, 표기의 반복(fragment 분기·include 호출)은 정식 예제를 그대로 반복한다 (§18)
## 상세 레퍼런스
주제별로 [`references/final.md`](references/final.md)의 해당 절을 따른다:
| 주제 | 절 |
|---|---|
| 클린 코드란 무엇인가 (복잡성 본질·제1 명령) | §1 |
| 이름 짓기 (의도·구분·한정자·불리언·루프 변수·매직 값과 상수 승