๐Ÿ’กLombok์— ๊ด€ํ•˜์—ฌ..(_ _)

์„œ์€๊ฒฝยท2023๋…„ 2์›” 17์ผ
0

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
42/43

Lombok ๊ธฐ๋Šฅ ์ค‘์— ์ƒ์„ฑ์ž ๊ด€๋ จํ•œ ์–ด๋…ธํ…Œ์ด์…˜์ด ์„ธ ๊ฐœ๊ฐ€ ์žˆ๋‹ค. ํ”Œ์  ๋„์ค‘ ์˜ค๋ฅ˜๋ฅผ ์žก๋‹ค๊ฐ€ ๊ทธ ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์ผ๋‹จ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋˜ ์›์ธ๊ณผ ํ•ด๊ฒฐ๋ฒ•๋ถ€ํ„ฐ !

์—๋Ÿฌ์›์ธ

ํด๋ž˜์Šค ๋ณ€์ˆ˜์—

    @OneToMany(mappedBy = "orders")
    private List<Receipt> receipts = new ArrayList<>();

๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋Š”๋ฐ ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ ์ž๊พธ NPE ๋ฐœ์ƒ (๋นŒ๋” ํŒจํ„ด์„ ์ด์šฉํ•˜๋ฉด ์ž๋™ ์ดˆ๊ธฐ๊ฐ’์ด ์„ธํŒ…๋œ๋‹ค๊ณ  ํ•จ)

์—๋Ÿฌํ•ด๊ฒฐ

package com.myproject.demo.domain;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
public class Orders {

    @Builder
    public Orders(Long memberId, LocalDateTime orderDate) {
        this.memberId = memberId;
        this.receipts = new ArrayList<>();
        this.orderDate = orderDate;
    }
    public Orders() {

    }

    @Id @GeneratedValue
    private Long id;

    private Long memberId;

    @Builder.Default
    @OneToMany(mappedBy = "orders")
    private List<Receipt> receipts = new ArrayList<>();

    private int totalPrice;

    private LocalDateTime orderDate;

    public void setTotalPrice(int amount) {
        this.totalPrice = amount;
    }
    public void setReceipts(Receipt receipt) {
        getReceipts().add(receipt);
    }
}

์ดˆ๊ธฐ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ํ•„๋“œ์— Builder.Default๋ฅผ ์จ์ค˜๋„ ๋์ง€๋งŒ ๋นŒ๋” ๋ฉ”์„œ๋“œ์ธ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๋”ฐ๋กœ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

@Builder

์ผ๋‹จ ๋นŒ๋”๋Š” ์™œ ์“ฐ๋Š”๊ฐ€?
ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์„ค์ • ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์—ฐ์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

public class Member {
    private String name;
    private int age;
    
    public Member() {}
    
    public Member(String name, int age) {
    }
    
}

์ด๋ ‡๊ฒŒ ํด๋ž˜์Šค ๋ณ€์ˆ˜๊ฐ€ ์ ์€ ๊ฒฝ์šฐ์—” ํฌ๊ฒŒ ๋ฌธ์ œ ๋˜์ง€ ์•Š์ง€๋งŒ ๋งŒ์•ฝ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ €๊ธฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ ํ–ˆ์„ ๊ฒฝ์šฐ์—”

	...
    private String addr;
    private String school;
    private String company;
    
    
    public Member(String name, int age, String addr, String school, String company) {
    }

์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ๋˜ ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด์— ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“  ๊ตฌ๋ฌธ์„ ์ˆ˜์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค

new Member('name', 100);
-> new Member('name',100,'secret', null, null);

๋˜ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ˆœ์„œ ๋˜ํ•œ ์ง€์ผœ์ค˜์•ผ ํ•˜๋ฏ€๋กœ ๋ณ€์ˆ˜ ์„ ์–ธ ์ˆœ์„œ๋ผ๋„ ๋ฐ”๋€Œ๋ฉด ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ด ํ•œ ๋‘๊ตฐ๋ฐ๊ฐ€ ์•„๋‹ ๊ฒƒ์ด๋‹ค !

์ฆ‰ ๋นŒ๋” ํŒจํ„ด์€ ์ด๋Ÿฐ ๋ณ€๊ฒฝ๊ณผ ํ˜‘์—…์— ๋Œ€ํ•ด ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ ํŒจํ„ด์ด๋ž€ ๊ฒƒ.

(๋นŒ๋”๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋Š” @Builder.Default๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•œ๋ฒˆ ์•Œ์•„๋ดค์œผ๋‹ˆ ๊ตณ์ด ์ ์ง€ ์•Š๊ฒ ๋‹ค!)

@NoArgsConstructor

๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. @Builder์™€๋Š” ๋‹จ ๋‘˜์ด ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋นŒ๋”๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ชจ๋“  ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ @NoArgsConstructor๋Š” ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋นŒ๋”๊ฐ€ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์ง€ ์•Š๊ฒŒ ๋˜๊ณ  ๊ทธ๋Ÿผ ๋นŒ๋“œ๋ฅผ ํ•˜๋Š” ๊ณผ์ •์—์„œ ์•Œ๋งž์€ ์ƒ์„ฑ์ž๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๋ฅผ ๋‚ธ๋‹ค!

๊ฐ„๋‹จ ์š”์•ฝ :


@NoArgsConstructor ์กด์žฌ
// @NoArgsConstructor(access = AccessLevel.PROTECTED)
protected Member() {}

@Builder ๐Ÿ’ญ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์œผ๋‹ˆ ๋”ฐ๋กœ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๊ตฐ..
public User build() {
	return new User(this.name, this.age); 
}

@Builder ๐Ÿ’ญ ๋นŒ๋“œํ•˜๋ ค๋Š”๋ฐ ์•Œ๋งž์€ ์ƒ์„ฑ์ž๊ฐ€ ์—†๋„ค..?
            ์—๋Ÿฌ โŒโ€ผ๏ธ๐Ÿšซ

@AllArgsConstructor

@AllArgsConstructor๋Š” ํด๋ž˜์Šค์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ํ•„๋“œ์— ๋Œ€ํ•œ ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ค€๋‹ค. (@Builder์™€ @NoArgsConstructor๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์„œ ์—๋Ÿฌ๊ฐ€ ๋‚ ๋•Œ ๋Œ€๋ถ€๋ถ„ @AllArgsConstructor๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๊ฑธ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.)

๋ฌด์ž‘์ • ํด๋ž˜์Šค์— ๋นŒ๋”๋ฅผ ๋„ฃ๊ธฐ๋ณด๋‹จ ์–ด๋–ค ๊ฒฝ์šฐ์— ์–ด๋–ป๊ฒŒ ์“ฐ์—ฌ์•ผ ํšจ์œจ์ ์ธ์ง€ ์ƒ๊ฐํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์งœ์ž !!!

0๊ฐœ์˜ ๋Œ“๊ธ€