NAVER의 java 코딩 컨벤션을 따라 작성되었습니다.
도메인 별로 패키지를 분리하여 관리합니다.
예시:
com.example.myapp
├── config // 설정 관련 클래스
├── api // API 관련 클래스
│ └── feature1
│ └── Controller.java
│ └── Service.java
│ └── Repository.java
│ └── feature2
│ └── Controller.java
│ └── Service.java
│ └── Repository.java
├── domain // 엔티티 및 도메인 객체
├── dto // 데이터 전송 객체
├── exception // 예외 처리 관련 클래스
└── util // 유틸리티 클래스
PascalCase (첫 글자 대문자)
예: UserService
, OrderController
, ProductRepository
camelCase (첫 글자 소문자)
예: createUser()
, findAllProducts()
camelCase
예: userName
, orderList
모두 대문자, 언더스코어로 단어 구분
예: MAX_CONNECTIONS
, DEFAULT_PAGE_SIZE
Tab 또는 스페이스 4칸 사용
각 클래스, 메소드, 필드 사이에 적절한 공백을 두어 가독성을 높입니다.
긴 줄은 100~120자 이내로 작성합니다.
예시:
@Service
public class UserService {
private final UserRepository userRepository;
// 생성자 주입
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public UserDto createUser(UserDto userDto) {
// 사용자 생성 로직
User user = new User(userDto.getName(), userDto.getEmail());
userRepository.save(user);
return new UserDto(user);
}
}
Javadoc 스타일 주석을 사용하여 클래스, 메소드의 역할과 사용법을 설명합니다.
코드의 복잡한 로직이나 주의사항이 있을 때 한 줄 주석(//)을 사용합니다.
앞으로 개선하거나 추가할 사항이 있을 때 // TODO: 형식으로 남깁니다.
예시:
/**
* 사용자 관련 비즈니스 로직을 처리하는 서비스 클래스.
*/
@Service
public class UserService {
// ...
/**
* @param userDto 사용자 데이터 전달 객체
* @return 생성된 사용자 정보를 담은 DTO
*/
public UserDto createUser(UserDto userDto) {
// TODO: 입력 값 검증 추가
// 사용자 생성 로직
}
}
@ControllerAdvice를 활용하여 전역 예외 처리 로직을 작성합니다.
비즈니스 로직에 맞는 커스텀 예외를 정의하여 사용합니다.
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
}