# Java 네이밍 규칙 ## 패키지 - 모두 소문자, 단수형 - 도메인 역순: `com.gcsc.프로젝트명.모듈` - 예: `com.gcsc.batch.scheduler`, `com.gcsc.api.auth` ## 클래스 - PascalCase - 명사 또는 명사구 - 접미사로 역할 표시: | 계층 | 접미사 | 예시 | |------|--------|------| | Controller | `Controller` | `UserController` | | Service | `Service` | `UserService` | | Service 구현 | `ServiceImpl` | `UserServiceImpl` (인터페이스 있을 때만) | | Repository | `Repository` | `UserRepository` | | Entity | (없음) | `User`, `ShipRoute` | | DTO 요청 | `Request` | `CreateUserRequest` | | DTO 응답 | `Response` | `UserResponse` | | 설정 | `Config` | `SecurityConfig` | | 예외 | `Exception` | `UserNotFoundException` | | Enum | (없음) | `UserStatus`, `ShipType` | | Mapper | `Mapper` | `UserMapper` | ## 메서드 - camelCase - 동사로 시작 - CRUD 패턴: | 작업 | Controller | Service | Repository | |------|-----------|---------|------------| | 조회(단건) | `getUser()` | `getUser()` | `findById()` | | 조회(목록) | `getUsers()` | `getUsers()` | `findAll()` | | 생성 | `createUser()` | `createUser()` | `save()` | | 수정 | `updateUser()` | `updateUser()` | `save()` | | 삭제 | `deleteUser()` | `deleteUser()` | `deleteById()` | | 존재확인 | - | `existsUser()` | `existsById()` | ## 변수 - camelCase - 의미 있는 이름 (단일 문자 변수 금지, 루프 인덱스 `i, j, k` 예외) - boolean: `is`, `has`, `can`, `should` 접두사 - 예: `isActive`, `hasPermission`, `canDelete` ## 상수 - UPPER_SNAKE_CASE - 예: `MAX_RETRY_COUNT`, `DEFAULT_PAGE_SIZE` ## 테스트 - 클래스: `{대상클래스}Test` (예: `UserServiceTest`) - 메서드: `{메서드명}_{시나리오}_{기대결과}` 또는 한국어 `@DisplayName` - 예: `createUser_withDuplicateEmail_throwsException()` - 예: `@DisplayName("중복 이메일로 생성 시 예외 발생")` ## 파일/디렉토리 - Java 파일: PascalCase (클래스명과 동일) - 리소스 파일: kebab-case (예: `application-local.yml`) - SQL 파일: `V{번호}__{설명}.sql` (Flyway) 또는 kebab-case