# TypeScript/React 네이밍 규칙 ## 파일명 | 항목 | 규칙 | 예시 | |------|------|------| | 컴포넌트 | PascalCase | `UserCard.tsx`, `LoginForm.tsx` | | 페이지 | PascalCase | `Dashboard.tsx`, `UserList.tsx` | | 훅 | camelCase + use 접두사 | `useAuth.ts`, `useFetch.ts` | | 서비스 | camelCase | `userService.ts`, `authApi.ts` | | 유틸리티 | camelCase | `formatDate.ts`, `validation.ts` | | 타입 정의 | camelCase | `user.types.ts`, `api.types.ts` | | 상수 | camelCase | `routes.ts`, `constants.ts` | | 스타일 | 컴포넌트명 + .module | `UserCard.module.css` | | 테스트 | 대상 + .test | `UserCard.test.tsx` | ## 변수/함수 | 항목 | 규칙 | 예시 | |------|------|------| | 변수 | camelCase | `userName`, `isLoading` | | 함수 | camelCase | `getUserList`, `formatDate` | | 상수 | UPPER_SNAKE_CASE | `MAX_RETRY`, `API_BASE_URL` | | boolean 변수 | is/has/can/should 접두사 | `isActive`, `hasPermission` | | 이벤트 핸들러 | handle 접두사 | `handleClick`, `handleSubmit` | | 이벤트 Props | on 접두사 | `onClick`, `onSubmit` | ## 타입/인터페이스 | 항목 | 규칙 | 예시 | |------|------|------| | interface | PascalCase | `UserProfile`, `ApiResponse` | | Props | 컴포넌트명 + Props | `UserCardProps`, `ButtonProps` | | 응답 타입 | 도메인 + Response | `UserResponse`, `LoginResponse` | | 요청 타입 | 동작 + Request | `CreateUserRequest` | | Enum | PascalCase | `UserStatus`, `HttpMethod` | | Enum 값 | UPPER_SNAKE_CASE | `ACTIVE`, `PENDING` | | Generic | 단일 대문자 | `T`, `K`, `V` | ## 디렉토리 - 모두 kebab-case 또는 camelCase (프로젝트 통일) - 예: `src/components/common/`, `src/hooks/`, `src/services/` ## 컴포넌트 구조 예시 ``` src/components/user-card/ ├── UserCard.tsx # 컴포넌트 ├── UserCard.module.css # 스타일 ├── UserCard.test.tsx # 테스트 └── index.ts # re-export ```