[250319] TIL

์˜ค๋Š˜ ํ•œ ์ผ

์–ด๋…ธํ…Œ์ด์…˜ ๊ณต๋ถ€

์–ด๋…ธํ…Œ์ด์…˜

@NoArgsConstructor

  • ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑ

@NoArgsConstructor(access = AccessLevel.*PROTECTED*)

  • ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ์ž ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ฌ
  • ์ƒ์† ๋ฐ›์•„์„œ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ˆ๊น, JPA๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED) // JPA๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
public class Order {
    @Id @GeneratedValue
    private Long id;
    
    @ManyToOne
    private User user;
    
    private int totalAmount;
    private OrderStatus status;

    // ์˜๋„๋œ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์„ ๊ฐ•์ œํ•˜๋Š” ์ƒ์„ฑ์ž
    @Builder
    public Order(User user, int totalAmount) {
        this.user = user;
        this.totalAmount = totalAmount;
        this.status = OrderStatus.PENDING;
    }
}

// ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์—์„œ
// ์ž˜๋ชป๋œ ๋ฐฉ๋ฒ• (์ปดํŒŒ์ผ ์—๋Ÿฌ)
Order order = new Order(); // protected ์ƒ์„ฑ์ž๋ผ์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€

// ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•
Order order = Order.builder()
    .user(user)
    .totalAmount(10000)
    .build();

@RequiredArgsConstructor

  • final ํ•„๋“œ๋‚˜ @NonNull ๋กœ ํ‘œ์‹œ๋œ ํ•„๋“œ๋งŒ์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•จ.
// @RequiredArgsConstructor ์‚ฌ์šฉ ์ „
public class UserService {
    private final UserRepository userRepository;
    private final PasswordEncoder passwordEncoder;
    
    // ์ง์ ‘ ์ž‘์„ฑํ•œ ์ƒ์„ฑ์ž
    public UserService(UserRepository userRepository, PasswordEncoder passwordEncoder) {
        this.userRepository = userRepository;
        this.passwordEncoder = passwordEncoder;
    }
}

// @RequiredArgsConstructor ์‚ฌ์šฉ ํ›„
@RequiredArgsConstructor
public class UserService {
    private final UserRepository userRepository;
    private final PasswordEncoder passwordEncoder;
    // Lombok์ด ์ž๋™์œผ๋กœ final ํ•„๋“œ๋“ค์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž ์ƒ์„ฑ
}

@RequestBody

  • HTTP ์š”์ฒญ์˜ ๋ณธ๋ฌธ์„ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
@PostMapping
public ResponseEntity<ApiResponse> createUser(@RequestBody UserRequestDto requestDto) {
    // requestDto๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
    // ์—ฌ๊ธฐ์„œ requestDto๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ƒ์„ฑ ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
}

N+1 ๋ฌธ์ œ

  • ํ•œ ๋ฒˆ์˜ ์ฟผ๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™”๋Š”๋ฐ, N๋ฒˆ์˜ ์ฟผ๋ฆฌ๊ฐ€ ๋” ์‹คํ–‰ ๋˜๋Š” ๋ฌธ์ œ

Categories:

Updated:

Leave a comment