# Naming Conventions — Java / Spring Boot

- **Classes:** PascalCase → `UserService`, `OrderController`, `PaymentRepository`
- **Interfaces:** PascalCase (no `I` prefix) → `UserService`, NOT `IUserService`
- **Implementations:** Append `Impl` → `UserServiceImpl`
- **Methods:** camelCase, verb-first → `findById()`, `createOrder()`, `isActive()`
- **Variables:** camelCase, descriptive → `userId`, `orderList`, NOT `u`, `ol`
- **Constants:** UPPER_SNAKE_CASE → `MAX_RETRY_COUNT`, `DEFAULT_TIMEOUT_MS`
- **Packages:** all lowercase → `com.company.project.service`
- **Database tables:** snake_case → `user_orders`, `product_items`
- **Database columns:** snake_case → `created_at`, `user_id`, `is_deleted`
- **REST endpoints:** kebab-case, plural → `/api/v1/user-profiles`, `/api/v1/orders`
- **Request DTOs:** `[Action][Resource]Request` → `CreateUserRequest`, `UpdateOrderRequest`
- **Response DTOs:** `[Resource]Response` → `UserResponse`, `OrderDetailResponse`
- **Enums:** PascalCase class, UPPER_SNAKE_CASE values → `OrderStatus.PENDING`
- **Test classes:** `[ClassUnderTest]Test` → `UserServiceImplTest`
- **Test methods:** `methodName_shouldExpectedBehavior_whenCondition` → `create_shouldThrowException_whenEmailDuplicated`
