-
Notifications
You must be signed in to change notification settings - Fork 1
conventions CODE STYLE
Kimgyuilli edited this page Dec 31, 2025
·
1 revision
클래스명
- Controller:
UserController,OrderController - Service:
UserService,OrderService - Repository:
UserRepository,OrderRepository - DTO:
UserRequestDto,UserResponseDto - Entity:
User,Order
메서드명
- 조회:
getUser(),findUserById(),findUserList() - 생성:
createUser(),saveUser() - 수정:
updateUser(),modifyUser() - 삭제:
deleteUser(),removeUser() - 검증:
validateUser(),checkUserExists()
변수명
- 카멜케이스 사용:
userId,userName - boolean 타입:
isActive,hasPermission - Collection: 복수형 사용:
users
프로젝트는 Checkstyle을 통해 코드 스타일을 자동으로 검사합니다.
파일 및 코드 길이
// 파일 최대 길이: 500줄
// 한 파일이 너무 길어지면 클래스 분리를 고려
// 메서드 최대 길이: 150줄
public void processOrder() {
// 메서드가 너무 길어지면 여러 메서드로 분리
}
// 라인 최대 길이: 140자
// 한 줄이 너무 길면 가독성이 떨어지므로 적절히 줄바꿈
// 메서드 파라미터 최대 개수: 7개
public void createUser(String name, String email, int age, ...) {
// 파라미터가 많으면 DTO로 묶는 것을 고려
}// ❌ 나쁜 예: 와일드카드 import 금지
import java.util.*;
import com.sopt.cherrish.domain.*;
// ✅ 좋은 예: 명시적 import
import java.util.List;
import java.util.ArrayList;
import com.sopt.cherrish.domain.User;이유: 와일드카드 import는 어떤 클래스를 사용하는지 불명확하고, 네임스페이스 충돌 가능성이 있음
모든 제어문에 중괄호 필수
// ❌ 나쁜 예: 중괄호 생략
if (condition)
doSomething();
for (int i = 0; i < 10; i++)
process(i);
// ✅ 좋은 예: 중괄호 사용
if (condition) {
doSomething();
}
for (int i = 0; i < 10; i++) {
process(i);
}이유: 코드 수정 시 실수 방지, 가독성 향상
Lombok @Slf4j 사용
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
public class UserService {
public void processUser(Long userId) {
log.info("Processing user: {}", userId);
log.warn("User not found: {}", userId);
log.error("Error processing user", exception);
}
}로그 레벨 가이드
-
log.error(): 시스템 오류, 예외 상황 -
log.warn(): 경고, 비정상적이지만 처리 가능한 상황 -
log.info(): 주요 비즈니스 로직 흐름 -
log.debug(): 개발 시 디버깅 정보
연산자 주변 공백
// ✅ 좋은 예
int sum = a + b;
boolean result = (x > 0) && (y < 10);
String name = "Hello" + " World";
// ❌ 나쁜 예
int sum=a+b;
boolean result=(x>0)&&(y<10);괄호 패딩
// ✅ 좋은 예
if (condition) {
method(param1, param2);
}
// ❌ 나쁜 예
if ( condition ) {
method( param1, param2 );
}equals()와 hashCode() 함께 구현
@Entity
public class User {
@Override
public boolean equals(Object o) {
// equals 구현
}
@Override
public int hashCode() {
// hashCode도 반드시 함께 구현
}
}switch문에 default 필수
// ✅ 좋은 예
switch (status) {
case ACTIVE:
handleActive();
break;
case INACTIVE:
handleInactive();
break;
default:
throw new IllegalArgumentException("Unknown status: " + status);
}boolean 표현식 단순화
// ❌ 나쁜 예
if (isActive == true) { }
return isValid == false;
// ✅ 좋은 예
if (isActive) { }
return !isValid;// ✅ 좋은 예: Java 스타일
String[] names;
int[] numbers;
// ❌ 나쁜 예: C 스타일
String names[];
int numbers[];프로젝트의 Checkstyle 설정은 config/checkstyle/checkstyle.xml에 정의되어 있습니다.
빌드 시 자동 검사
# 전체 빌드 (Checkstyle 포함)
./gradlew build
# Checkstyle만 실행
./gradlew checkstyleMain checkstyleTest
# 리포트 확인
# build/reports/checkstyle/main.htmlCI/CD 파이프라인
- PR 생성 시 자동으로 Checkstyle 검사 실행
- Checkstyle 통과해야만 병합 가능
- 최대 경고 허용: 100개 (점진적 개선 목표)