# Java 코드 스타일 규칙 ## 일반 - Java 17+ 문법 사용 (record, sealed class, pattern matching, text block 활용) - 들여쓰기: 4 spaces (탭 사용 금지) - 줄 길이: 120자 이하 - 파일 끝에 빈 줄 추가 ## 클래스 구조 클래스 내 멤버 순서: 1. static 상수 (public → private) 2. 인스턴스 필드 (public → private) 3. 생성자 4. public 메서드 5. protected/package-private 메서드 6. private 메서드 7. inner class/enum ## Spring Boot 규칙 ### 계층 구조 - Controller → Service → Repository 단방향 의존 - Controller에 비즈니스 로직 금지 (요청/응답 변환만) - Service 계층 간 순환 참조 금지 - Repository에 비즈니스 로직 금지 ### DTO와 Entity 분리 - API 요청/응답에 Entity 직접 사용 금지 - DTO는 record 또는 불변 클래스로 작성 - DTO ↔ Entity 변환은 매퍼 클래스 또는 팩토리 메서드 사용 ### 의존성 주입 - 생성자 주입 사용 (필드 주입 `@Autowired` 사용 금지) - 단일 생성자는 `@Autowired` 어노테이션 생략 - Lombok `@RequiredArgsConstructor` 사용 가능 ### 트랜잭션 - `@Transactional` 범위 최소화 - 읽기 전용: `@Transactional(readOnly = true)` - Service 메서드 레벨에 적용 (클래스 레벨 지양) ## Lombok 규칙 - `@Getter`, `@Setter` 허용 (Entity에서 Setter는 지양) - `@Builder` 허용 - `@Data` 사용 금지 (명시적으로 필요한 어노테이션만) - `@AllArgsConstructor` 단독 사용 금지 (`@Builder`와 함께 사용) - `@Slf4j` 로거 사용 ## 예외 처리 - 비즈니스 예외는 커스텀 Exception 클래스 정의 - `@ControllerAdvice`로 전역 예외 처리 - 예외 메시지에 컨텍스트 정보 포함 - catch 블록에서 예외 무시 금지 (`// ignore` 금지) ## 기타 - `Optional`은 반환 타입으로만 사용 (필드, 파라미터에 사용 금지) - `null` 반환보다 빈 컬렉션 또는 `Optional` 반환 - Stream API 활용 (단, 3단계 이상 체이닝은 메서드 추출) - 하드코딩된 문자열/숫자 금지 → 상수 또는 설정값으로 추출