# Code Style 설정 가이드

이 문서는 프로젝트에서 Google Java Style을 자동으로 적용하기 위한 설정 가이드입니다.

## 자동 포맷팅 구성

### 1. 커밋 시점 자동 포맷팅 (Git Pre-commit Hook)

커밋 전에 자동으로 코드를 포맷팅하고 스테이징합니다.

**설정 완료:** `.git/hooks/pre-commit` 파일이 자동으로 실행됩니다.

**동작 방식:**
- 커밋 시도 시 `./gradlew spotlessApply` 자동 실행
- 스테이징된 Java 파일을 자동으로 포맷팅
- 포맷팅된 파일을 자동으로 다시 스테이징
- 포맷팅이 완료되면 커밋 진행

**장점:**
- 수동으로 `spotlessApply`를 실행할 필요 없음
- 항상 일관된 코드 스타일 유지
- 포맷팅 누락 방지

### 2. IntelliJ IDEA 저장 시점 자동 포맷팅

#### 방법 1: Code Style 설정 임포트 (권장)

1. **IntelliJ IDEA 열기**
2. **Settings/Preferences** (Mac: `⌘,` / Windows: `Ctrl+Alt+S`)
3. **Editor > Code Style > Java**
4. **⚙️ (톱니바퀴)** 클릭 > **Import Scheme > IntelliJ IDEA code style XML**
5. 프로젝트 루트의 `intellij-java-google-style.xml` 파일 선택
6. **OK** 클릭

#### 방법 2: 저장 시 자동 포맷팅 활성화


**Option A: Actions on Save 설정**

1. **Settings/Preferences** > **Tools > Actions on Save**
2. 다음 옵션들을 활성화:
   - ✅ **Reformat code**
   - ✅ **Optimize imports**
   - ✅ **Rearrange code** (선택사항)
3. **Changed lines** 또는 **Whole file** 선택
4. **OK** 클릭

**Option B: Save Actions Plugin 사용 (더 많은 옵션)**

1. **Settings/Preferences** > **Plugins**
2. **Marketplace**에서 "Save Actions" 검색 및 설치
3. **Settings/Preferences** > **Other Settings > Save Actions**
4. 다음 옵션 활성화:
   - ✅ **Activate save actions on save**
   - ✅ **Reformat file**
   - ✅ **Optimize imports**
   - ✅ **Rearrange fields and methods** (선택사항)

### 3. Gradle Spotless Plugin 수동 실행

#### 코드 포맷팅 체크
```bash
# 포맷팅 문제 확인만 (수정하지 않음)
./gradlew spotlessCheck
```

#### 코드 자동 포맷팅
```bash
# 모든 Java 파일 자동 포맷팅 적용
./gradlew spotlessApply
```

#### 빌드 시 자동 체크
```bash
# 빌드 전에 자동으로 spotlessCheck 실행됨
./gradlew build
```

## 코드 스타일 규칙

프로젝트는 **Google Java Style Guide** 기반으로 다음 규칙을 따릅니다:

- **Indentation**: 2 spaces (탭 아님)
- **Line Length**: 180 characters
- **Line Endings**: LF (Unix-style)
- **Charset**: UTF-8
- **Import Order**: Static imports → 빈 줄 → Regular imports
- **Braces**: 모든 if, for, while, do 문에 중괄호 필수

## 문제 해결

### Pre-commit hook이 실행되지 않는 경우
```bash
# 실행 권한 확인 및 부여
chmod +x .git/hooks/pre-commit
```

### Spotless 플러그인이 동작하지 않는 경우
```bash
# Gradle 의존성 다시 다운로드
./gradlew clean build --refresh-dependencies
```

### IntelliJ 포맷팅이 다르게 적용되는 경우
1. `intellij-java-google-style.xml` 다시 임포트
2. **File > Invalidate Caches** > **Invalidate and Restart**

## 추가 정보

- **Google Java Style Guide**: https://google.github.io/styleguide/javaguide.html
- **Spotless Plugin**: https://github.com/diffplug/spotless
- **IntelliJ Code Style**: https://www.jetbrains.com/help/idea/code-style.html
