예시) feature / #이슈번호 제목
<aside> 💡
예시)
isValidUser(), hasPermission(), existsInDatabase()isNotInvalidUser(), checkUserValidity()
</aside><aside> 💡
getter가 아닌 메서드에서 get-을 사용하지 않는다.예시)
calculateTotalPrice(), fetchUserData()getTotalPrice(), getUserData() (이 경우 데이터 가공이나 처리 과정이 있는 메서드라면 적합하지 않음)
</aside><aside> 💡
DTO는 데이터 전송용 객체(Data Transfer Object)의 약자로, 그 용도에 따라 request, response, clientRequest, clientResponse와 같이 명확히 구분
예시)
UserRequest: 클라이언트가 서버로 전송하는 요청 데이터.UserResponse: 서버가 클라이언트로 응답할 때 보내는 데이터.UserClientRequest: 서버가 외부 API에 보낼 요청 데이터.UserClientResponse: 서버가 외부 API로부터 받은 응답 데이터.
</aside><aside> 💡
예시)
- com.example.project
    - user
        - UserController
        - UserService
        - UserRepository
    - product
        - ProductController
        - ProductService
        - ProductRepository
</aside>
<aside> 💡
예시)
public class UserService {
    private final UserRepository userRepository;
    private final UserValidator userValidator;
    // 메서드 선언부
    public void createUser(User user) {
        // 메서드 로직
    }
}
</aside>
<aside> 💡
예시)
@PostMapping("/users")
public ResponseEntity<UserResponse> createUser(@Valid @RequestBody UserRequest userRequest) {
    User user = userService.createUser(userRequest);
    return ResponseEntity.ok(new UserResponse(user));
}
</aside>
<aside> 💡
예시)
public enum OrderStatus {
    PENDING,
    SHIPPED,
    DELIVERED,
}
</aside>
<aside> 💡
@Getter, @NoArgsConstructor, @RequiredArgsConstructor
</aside>
<aside> 💡
예시)
@NoArgsConstructor 사용시 AccessLevel.PROTECTED 로 설정
→ 생성자를 통해서 값 변경 목적으로 접근하는 메시지들 차단
@Entity
@Table(name = "users")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User {
    // 필드와 메서드 정의
}
</aside>
<aside> 💡
<aside> 💡
static final 변수 → final 변수 → 인스턴스 변수 순서로 정의한다.
예시)
public class ExampleClass {
    private static final String CONSTANT = "ConstantValue";
    private final String immutableField;
    private String mutableField;
    public ExampleClass(String value) {
        this.immutableField = value;
    }
}
</aside>