# 코딩 스타일 ## 불변성 (중요) 항상 새 객체를 생성하고, 기존 객체를 절대 변경하지 마세요: ``` // 의사 코드 잘못된 예: modify(original, field, value) → 원본을 직접 변경 올바른 예: update(original, field, value) → 변경 사항이 반영된 새 복사본 반환 ``` 근거: 불변 데이터는 숨겨진 사이드 이펙트를 방지하고, 디버깅을 쉽게 하며, 안전한 동시성을 가능하게 합니다. ## 파일 구성 많은 작은 파일 > 적은 큰 파일: - 높은 응집도, 낮은 결합도 - 200-400줄이 일반적, 최대 800줄 - 큰 모듈에서 유틸리티를 분리 - 타입이 아닌 기능/도메인별로 구성 ## 에러 처리 항상 에러를 포괄적으로 처리: - 모든 레벨에서 에러를 명시적으로 처리 - UI 코드에서는 사용자 친화적인 에러 메시지 제공 - 서버 측에서는 상세한 에러 컨텍스트 로깅 - 에러를 절대 조용히 무시하지 않기 ## 입력 유효성 검증 항상 시스템 경계에서 유효성 검증: - 처리 전에 모든 사용자 입력을 검증 - 가능한 경우 스키마 기반 유효성 검증 사용 - 명확한 에러 메시지와 함께 빠르게 실패 - 외부 데이터를 절대 신뢰하지 않기 (API 응답, 사용자 입력, 파일 내용) ## 코드 품질 체크리스트 작업 완료 전 확인: - [ ] 코드가 읽기 쉽고 이름이 적절한가 - [ ] 함수가 작은가 (<50줄) - [ ] 파일이 집중적인가 (<800줄) - [ ] 깊은 중첩이 없는가 (>4단계) - [ ] 적절한 에러 처리가 되어 있는가 - [ ] 하드코딩된 값이 없는가 (상수나 설정 사용) - [ ] 변이가 없는가 (불변 패턴 사용)