예시) 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>