규칙
코딩 스타일

코딩 스타일

다운로드 후 ~/.claude/rules/ 폴더에 복사하여 사용하세요

일관된 코드 품질을 위한 코딩 스타일 규칙입니다.

불변성 (중요)

🚫

항상 새 객체 생성, 절대 변경하지 않음!

// 잘못된 방법: 변경
function updateUser(user, name) {
  user.name = name  // 변경!
  return user
}
 
// 올바른 방법: 불변성
function updateUser(user, name) {
  return {
    ...user,
    name
  }
}

배열 불변성

// 잘못된 방법
array.push(item)
array.sort()
 
// 올바른 방법
const newArray = [...array, item]
const sortedArray = [...array].sort()

파일 구성

적은 대형 파일보다 많은 작은 파일:

권장설명
200-400줄일반적인 파일 크기
최대 800줄파일 크기 상한
기능/도메인별타입별이 아닌 기능별 구성

원칙

  • 높은 응집도, 낮은 결합도
  • 대형 컴포넌트에서 유틸리티 추출
  • 관련 코드를 가까이 배치

오류 처리

항상 포괄적인 오류 처리:

try {
  const result = await riskyOperation()
  return result
} catch (error) {
  console.error('작업 실패:', error)
  throw new Error('상세한 사용자 친화적 메시지')
}

오류 처리 체크리스트

  • 모든 async 함수에 try/catch
  • 의미 있는 오류 메시지
  • 적절한 로깅
  • 사용자에게 친화적인 피드백

입력 검증

항상 사용자 입력 검증:

import { z } from 'zod'
 
const schema = z.object({
  email: z.string().email(),
  age: z.number().int().min(0).max(150)
})
 
const validated = schema.parse(input)

함수 크기

// 나쁨: 너무 큰 함수 (50줄 초과)
function processData(data) {
  // ... 100줄의 코드 ...
}
 
// 좋음: 작은 함수로 분리
function processData(data) {
  const validated = validateData(data)
  const transformed = transformData(validated)
  return saveData(transformed)
}

중첩 제한

// 나쁨: 너무 깊은 중첩 (4레벨 초과)
if (a) {
  if (b) {
    if (c) {
      if (d) {
        // 너무 깊음!
      }
    }
  }
}
 
// 좋음: 얼리 리턴으로 중첩 감소
if (!a) return
if (!b) return
if (!c) return
if (!d) return
// 메인 로직

코드 품질 체크리스트

작업 완료 전 확인:

  • 코드가 읽기 쉽고 이름이 명확함
  • 함수가 작음 (50줄 미만)
  • 파일이 집중됨 (800줄 미만)
  • 깊은 중첩 없음 (4레벨 이하)
  • 적절한 오류 처리
  • console.log 문 없음
  • 하드코딩된 값 없음
  • 변경 없음 (불변 패턴 사용)