← ClaudeAtlas

coding-philosophylisted

코드 품질 판정의 공통 기준이 되는 개인 코딩 철학. "코딩 철학", "리뷰 기준", "품질 기준"을 묻거나, 코드 리뷰·설계 검토·인터페이스 점검에서 무엇을 결함으로 볼지 판단해야 할 때 사용한다. 다른 스킬(`common:module-review` 등)이 판정 기준으로 이 스킬을 로드한다.
gagip/gagip-dev · ★ 0 · Code & Development · score 63
Install: claude install-skill gagip/gagip-dev
# 코딩 철학 가이드라인 개인 코딩 철학. 코드 리뷰·설계 검토 시 이 기준으로 가독성·정확성·구조를 평가한다. **언어와 프레임워크에 무관하게 적용되는 원칙**이며, 코드 예시는 의사코드(pseudocode)로 표기한다. 특정 언어의 문법을 강요하지 않는다 — 대상 레포에 이미 관례가 있으면 그 관례로 이 원칙을 구현한다. 의사코드의 `assert`는 **릴리즈에서도 항상 활성화된 검증 수단**을 의미한다. 언어마다 대응 수단이 다르다(인자 검사·상태 검사 내장 함수, 프로젝트 전용 검증 유틸 등). 디버그 전용으로 비활성화되는 수단은 원칙적으로 쓰지 않는다. --- ## 1. 계약 프로그래밍 (Contract Programming) 사전조건·불변식·사후조건을 코드로 명시한다. | 종류 | 용도 | 실패 시 | |------|------|---------| | 사전조건 (Precondition) | 함수 진입 전 인자 유효성 검사 — 호출자가 잘못된 값을 전달했음을 즉시 알린다 | 인자 오류 예외 / assertion 실패 | | 불변식 (Invariant) | 메서드 호출 전 객체 상태 유효성 검사 | 상태 오류 예외 / assertion 실패 | | 사후조건 (Postcondition) | 함수 실행 후 반환값·상태가 약속된 범위임을 검증한다 | assertion 실패 | | 내부 가정 검증 | 개발/디버그용 중간 검증 — 필요 시 사용 | assertion 실패 | ``` // 사전조건 — 인자 검사 function setAge(age): assert age >= 0 and age <= 150, "age must be in 0..150, was {age}" ... // 불변식 — 상태 검사 function save(): assert isConnected, "DB connection must be established before save()" ... // 사후조건 — 반환값 검사 function average(values): result = sum(values) / len(values) assert result >= min(values) and result <= max(values), "result out of range: {result}" return result // 잘못된 예 — 잘못된 입력을 조용히 보정 function setAge(age): age = clamp(age, 0, 150) // 잘못된 입력을 숨김 ... ``` **검증 수단은 대상 레포의 관례를 따른다.** 프로젝트가 전용 검증 유틸을 정해뒀다면 그것을 쓰고, 언어 내장 수단을 쓰기로 했다면 그것을 쓴다. 한 레포 안에서 수단이 섞이는 것 자체가 결함이다. **비대칭이 곧 결함이다.** 같은 인터페이스의 구현체들, 같은 모듈의 동급 함수들 중 **하나만** 검증이 빠져 있다면 그것은 취향 차이가 아니라 결함이다. 나머지가 검증한다는 사실이 그 검증이 필요하다는 증거다.