dddjango-discipline-cleancodelisted
Install: claude install-skill changja88/dddjango
# 클린코드 규율
## 언제 쓰나
언어 비종속적 클린코드 원칙(명명, 함수 설계, 캡슐화, SOLID, 중복, 오류 처리, 리팩토링)이 필요한 코드 작성·리뷰·리팩터링 시 로드한다. 경계:
- Python 언어 관용구·PEP8·타입 힌트·docstring 기계적 규칙 → `implementation-python`
- Django 모델·ORM·서비스 레이어 특화 패턴 → `implementation-django`
- 도메인 전략·애그리거트·바운디드 컨텍스트 → `dddjango-architecture-ddd`
- 테스트 코드 작성법(mock·픽스처·assert) → `dddjango-implementation-test`
## 핵심 운영 원칙
- 이름은 의도를 드러내라: 한 개념에 한 단어, 클래스는 명사·메서드는 동사, 이름 길이는 범위에 비례 (§2)
- 매직 값·상수 승격은 판정 원리로: 닫힌 집합을 분기·판정에 쓰면 1곳째부터 집합 타입, 선언된 심볼은 심볼로만 소비(`==` 비교), 허용 목록(사람 대상 서술·정의부·테스트 외부 계약 기댓값 등)은 리터럴 유지; 발행 ��벤트 봉투 discriminator는 1종째부터 enum(birth-enum), 버전 태그는 리터럴 동결, OHS published contract(`open_host_service/*/contract/`)의 discriminator는 wire Literal 유지(재예외 — houserules §2) (§2.14)
- 함수는 작게, 한 가지만 해라: 추상화 수준 통일, 인수 최소화, 플래그 인수 금지, 명령·조회 분리, 부수 효과 금지 (§3)
- 인터페이스 주석은 필수, 구현 주석은 최소화: what을 공개하고 how는 은닉 (§4, §6.4–§6.5)
- 모듈은 깊게 설계하라: 강력한 기능을 단순한 인터페이스 뒤에 숨기고, 얕은 모듈·레드 플래그를 경계 (§7)
- 행동이 상태를 결정한다: 묻지 말고 시켜라, 조건문은 다형성으로 대체, 로직과 데이터를 함께 (§8)
- SOLID 5원칙을 적용하라: SRP·OCP·LSP·ISP·DIP — 같은 이유로 바뀌는 것은 모으고, 다른 이유는 분리 (§9)
- DRY는 지식의 중복을 금지한다: 코드 유��성이 아닌 비즈니스 지식 단위로 판단 (§13)
- 오류는 ���계로 먼저 제거하고, 불가하면 예외를 사용하라: 보호절·DbC·방어적 프로그래밍 (§12)
- 코드 스멜을 감지하고 리팩토링 기법으로 제거하라: 기능 보존을 검증하며 작은 단계로 진행 (§15)
- 레거시 코드는 Seam을 찾아 보호한 후 개선하라: Sprout·Wrap과 non-migration 임시 특성화 probe를 쓰되, 현재 구현 포착을 영구 계약으로 고정하지 않는다 (§16)
## 상세 레퍼런스
주제별로 [`references/final.md`](references/final.md)의 해당 절을 따른다:
| 주제 | 절 |
|---|---|
| 클린 코드란 무엇인가 (복잡성 본질·제1 명령) | §1 |
| 이름 짓기 (의도·구분·한