SSARTEL-10th / JPTS_bookstudy

"๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ์•Œ์•„์•ผ ํ•  ์ž๋ฐ” ์„ฑ๋Šฅ ํŠœ๋‹ ์ด์•ผ๊ธฐ" ์™„์ „ ์ •๋ณต
7 stars 0 forks source link

TO.. VO..? #26

Open daminzzi opened 9 months ago

daminzzi commented 9 months ago

๐Ÿ‘ ๋ฌธ์ œ

๊ต์žฌ p.426์—์„œ

์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ๋ฆฌํ„ด ์‹œ TO(ํ˜น์€ VO) ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์˜€๋Š”๊ฐ€?

๋ผ๋Š” ๋ฌธ์žฅ์„ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋‹ค. TO..? VO..? ์ดˆ๋ณด๋ผ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ž˜๋ชป ์•Œ์•„๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.. ๊ตฌ๊ธ€์— ๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ Transfer Object Pattern์ด๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•จ๊ป˜ ๋งŽ์ด ๋‚ด์šฉ์œผ๋กœ๋Š” ํ•ด๋‹น ํŒจํ„ด๊ณผ DB์—์„œ์˜ Entity์™€์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃฌ ๊ธ€๋„ ๋งŽ์•˜๋‹ค. ๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ

โœˆ๏ธ ์„ ์ • ๋ฐฐ๊ฒฝ

์ˆ˜์—…์—์„œ DTO๋Š” ๋“ค์–ด๋ดค๋Š”๋ฐ ์ด๋Ÿฐ ๊ฒƒ๋„ ํŒจํ„ด์ธ์ง€ ์ด์ œ ์•Œ์•˜๋‹ค. ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‹ค๋ค„๋ณธ์ ์€ ์—†์„์ง€๋„..?

๐Ÿ“บ ๊ด€๋ จ ์ฑ•ํ„ฐ ๋ฐ ๋ ˆํผ๋Ÿฐ์Šค

ch24. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ ๊ฒ€ํ•ด์•ผ ํ•  ๋Œ€์ƒ๋“ค

๐Ÿณ ๋น„๊ณ 

๋งˆ์ง€๋ง‰๊นŒ์ง€ ํ™”์ดํŒ…!

ChoiSeEun commented 9 months ago

TO/VO Pattern

1. ์ •์˜

์ด์Šˆ์—์„œ ์–ธ๊ธ‰๋œ ๊ฒƒ์ฒ˜๋Ÿผ, TO๋Š” Transfer Object ํŒจํ„ด์„ ์˜๋ฏธํ•˜๊ณ , ํ•จ๊ป˜ ์–ธ๊ธ‰์ด ๋˜๋Š” VO๋Š” Value Object ํŒจํ„ด์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋ฆ„์—์„œ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋“ฏ์ด ํ•ด๋‹น ํŒจํ„ด๋“ค์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.

2. VO ํŒจํ„ด

์‚ฌ์‹ค, VO ํŒจํ„ด์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด ์ƒ์„ฑ ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ  ๋‹จ์ผ ๋‹จ์œ„๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๋‚ ์งœ,ํ†ตํ™”,์ˆ˜๋Ÿ‰ ๋“ฑ์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์กฐ๊ธˆ ๋” ๊ฐœ๋ฐœ์ ์œผ๋กœ ์ด์•ผ๊ธฐํ•˜๋ฉด, Client์—์„œ ๋ณด๋‚ด๋Š” Request ๋Š” ๋ฐฑ์—”๋“œ์—์„œ ๋ณ€๊ฒฝํ•  ์ผ์ด ์—†์œผ๋ฏ€๋กœ ์ด๋ฅผ VO๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๋ช…ํ™•ํ•œ ๊ตฌ๋ถ„๋„ ์—†๊ณ  ์—„๊ฒฉํ•˜๊ฒŒ ๋‚˜๋ˆ„์ง€๋„ ์•Š๋Š”๋‹ค. ๊ฐœ๋ฐœ์ž๋งˆ๋‹ค ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ  ์ •์˜ํ•˜๋Š” ์Šคํƒ€์ผ์ด ๋‹ฌ๋ผ์„œ DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์˜ฌ ๋•Œ DTO๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , VO๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ๋˜, VO๋ฅผ ๋ถˆ๋ณ€์œผ๋กœ ์“ฐ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค.

๊ทธ๋ž˜์„œ ์•„๋ž˜ ๋‚ด์šฉ์—์„œ๋Š”, TO ํŒจํ„ด์„ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•˜๊ณ ์ž ํ•œ๋‹ค.

3. ํŒจํ„ด ์‚ฌ์šฉ ๋ชฉ์ 

Transfer Object ๋ฅผ ๋งŒ๋“ค์–ด ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด TO ํŒจํ„ด์˜ ๋ชฉ์ ์ด๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์—„์ฒญ๋‚œ ์„ฑ๋Šฅ ๊ฐœ์„  ํšจ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ํ•œ ๊ฐ์ฒด์— ๊ฒฐ๊ณผ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๋ฒˆ ์š”์ฒญ์„ ์ค„์—ฌ์ฃผ๋ฏ€๋กœ ํ•ด๋‹น ํŒจํ„ด ์‚ฌ์šฉ์ด ๊ถŒ์žฅ๋œ๋‹ค.

๋˜ํ•œ, ์†์„ฑ ๊ฐ’์ด null ์ธ ๊ฒฝ์šฐ ๊ธธ์ด๊ฐ€ 0์ธ String์„ return ํ•˜๋Š” ๋“ฑ Transfer Object ๋ฅผ null ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ํŽธํ•˜๊ฒŒ ํ•  ๋•Œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

4. DTO Class

DTO๋Š” Data Transfer Object์˜ ์ค„์ž„๋ง๋กœ, ๊ณ„์ธต๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•œ JavaBeans์„ ์˜๋ฏธํ•œ๋‹ค. DAO(Data Access Object) ํŒจํ„ด์—์„œ ์œ ๋ž˜๋œ ๋‹จ์–ด๋กœ, DAO์—์„œ DB ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ˆจ๊ธฐ๊ณ  DTO ๋ผ๋Š” ๊ฒฐ๊ณผ๊ฐ’์„ ๋‚ด๋ณด๋‚ด๋Š” ์šฉ๋„๋กœ ํ™œ์šฉ๋œ๋‹ค.

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ๊ฐ€์ง€์ง€ ์•Š๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ getter ์™€ setter ๋ฉ”์†Œ๋“œ๋งŒ ๊ฐ€์ง€๋Š” ๋‹จ์ˆœํ•œ ๊ฐ์ฒด์ด๋‹ค.
Controller ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ๋‹จ๊ณผ ์ง์ ‘ ๋งˆ์ฃผํ•˜๋Š” ๊ณ„์ธต์—์„œ๋Š” DTO๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๋ฉฐ, Controller ์™ธ์—๋„ ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด ์‚ฌ์ด์—์„œ DTO๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ์น˜๋งŒ ์ฃผ๋กœ View์™€ Controller ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ํ™œ์šฉ์„ฑ์ด ๋†’๋‹ค.

์ถ”๊ฐ€๋กœ, DTO๋Š” JSON serialization ๊ณผ ๊ฐ™์€ ์ง๋ ฌํ™”์—๋„ ์‚ฌ์šฉ๋œ๋‹ค.

5. ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ

public class GillogTO implements Serializable {

    private String name;
    private String id;

    public GillogTO() {
        super();
    }
    public GillogTO(String name, String id) {
        super();
        this.name = name;
        this.id = id;
    }
    public String getName() { return name;}
    public String getID() { return id; }

    public void setName(String name) { this.name = name;}

    public void setID(String id) { this.id = id;}

    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("name=")
            .append(name)
            .append("id=")
            .append(id)
        return sb.toString();
    }
}
@Getter
@NoArgsConstructor
public class PostssaveRequestDto{
    private String title;
    private String content;
    private String author;

    @Builder
    public PostsSaveRequestDto(String title,String content,Strign author) {
        this.title = title;
        this.content = content;
        this.author = author;
    }
    public Posts toEntity() {
        return Posts.builder().title(title).content(content).author(author).build();
    }
}

7. Entity Class

Entity ํด๋ž˜์Šค๋Š” ์‹ค์ œ DB ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ํ•ต์‹ฌ ํด๋ž˜์Šค๋กœ, DB ์ปฌ๋Ÿผ๋“ค์„ ํ•„๋“œ๋กœ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜์†์„ฑ ์˜ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๊ธฐ ๋•Œ๋ฌธ์—, ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š๋‹ค. ๋˜ํ•œ, ๋งŽ์€ ์„œ๋น„์Šค ํด๋ž˜์Šค์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋“ค์ด Entity ํด๋ž˜์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Entity ํด๋ž˜์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

โ‰ DTO ํด๋ž˜์Šค์™€ ๋ถ„๋ฆฌํ•˜๋Š” ์ด์œ 

1. Entity ํด๋ž˜์Šค๊ฐ€ DB์™€ ๋งž๋‹ฟ์€ ํ•ต์‹ฌ ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์—

Entity ํด๋ž˜์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋˜๊ณ  ์Šคํ‚ค๋งˆ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š”๋ฐ, ํ™”๋ฉด ๋ณ€๊ฒฝ ๋“ฑ์˜ ์‚ฌ์†Œํ•œ ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ์„ ์œ„ํ•ด ํ…Œ์ด๋ธ”๊ณผ ์—ฐ๊ฒฐ๋œ Entity ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด๋‚˜ ํฐ ๋ณ€๊ฒฝ์ด ๋œ๋‹ค.

๋˜ํ•œ, View Layer ์™€ DB Layer ์˜ ์—ญํ• ์„ ์ฒ ์ €ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” Controller์—์„œ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ด์„œ ์ค˜์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋นˆ๋ฒˆํ•˜๋ฏ€๋กœ Entity ํด๋ž˜์Šค๋งŒ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

2. ๋‹ค์–‘ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์š”๊ตฌ์‚ฌํ•ญ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ

ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ Entity ์ž์ฒด๋ฅผ ๋ฐ›๊ฒŒ ๋˜๋ฉด, Entity์—์„œ ์ •ํ•ด์ง„ ํฌ๋งท์— ๋งž์ถฐ ๊ฐœ๋ฐœํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, DTO๋Š” ๊ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋งž์ถ˜ ํ•„๋“œ๋“ค๋งŒ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ DTO๋ฅผ ๋ณด๋ฉด ์–ด๋–ค ๊ฐ’๋“ค์ด ๋งคํ•‘๋˜๋Š”์ง€ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, API ์„ค๊ณ„ ์ƒํ™ฉ์—์„œ ํ•„๋“œ์— ๋‹ค๋ฅธ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•˜๋Š” ์ƒํ™ฉ์—๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. Controller์™€ Service ์‚ฌ์ด์—์„œ ๊ฐ•ํ•œ ์˜์กด์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ

Service๊ฐ€ ๋ฐ›๊ณ  ์‹ถ์€ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ Controller์—๊ฒŒ ์ข…์†์ ์ด๋ฉด Service๊ฐ€ Controller ํŒจํ‚ค์ง€์—๊ฒŒ ์˜์กดํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ Service๊ฐ€ ์›ํ•˜๋Š” ํฌ๋งท์— ๋งž์ถฐ Controller๋‹จ์—์„œ DTO๋ฅผ ํ†ตํ•ด ํฌ๋งท์„ ๋งž์ถฐ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

4. Service Layer๊ฐ€ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ๋ฒ„๋ฆฌ๋ฉด ํ•ด๋‹น Type์„ ์“ธ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—

5. ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š” DTO ํ•ญ๋ชฉ์ด ํ•ญ์ƒ ์š”์ฒญ์œผ๋กœ ๋“ค์–ด์˜จ ๊ฒฐ๊ณผ๊ฐ’๊ณผ ๋™์ผํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ, Service ๋ ˆ์ด์–ด๊ฐ€ Controller ๋ ˆ์ด์–ด DTO์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, Service ๋ ˆ์ด์–ด๋Š” ์ž์‹ ์ด ์›ํ•˜๋Š” ํฌ๋งท์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๊ด€๋ จํ•œ ํ† ๋ก 

DTO ๋ฅผ ์–ด๋Š ์˜์—ญ์—์„œ ์–ด๋Š ์ •๋„๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

+ Entity ํด๋ž˜์Šค ์ฐธ๊ณ  ์‚ฌํ•ญ

Entity์—์„œ๋Š” ๊ฐ์ฒด์˜ ์ผ๊ด€์„ฑ, ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด setter ๋ฉ”์„œ๋“œ์˜ ์‚ฌ์šฉ์„ ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, setter ๋Œ€์‹  Constructor ๋˜๋Š” Builder ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

Constructor ๋ฅผ ์ด์šฉํ•ด์„œ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒฝ์šฐ, ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€์กฐ๋˜์ง€ ์•Š์Œ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

Builder ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋”๋ผ๋„ ์–ด๋–ค ๊ฐ’์„ ์–ด๋–ค ํ•„๋“œ๋ฅผ ๋„ฃ๋Š”์ง€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ, ํ•„์š”ํ•œ ๊ฐ’๋งŒ ๋„ฃ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ๋„ ์žฅ์ ์ด๋‹ค.

@Builder  
@Getter  
@Entity  
@NoArgsConstructor  
public  class Membmer { @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  
private Long idx; 
private String name; 
private String email; 
public Member(Long idx, String name, String email) { 
        this.idx = idx; 
        this.name = name; 
        this.email = email; 
    } 
} 
// ์‚ฌ์šฉ ๋ฐฉ๋ฒ• 
Member member = Member.builder() 
.name("Jan") 
.email("Jan@Jan.com") 
.build();

์ฐธ๊ณ ์ž๋ฃŒ

https://akku-dev.tistory.com/26 https://velog.io/@gillog/Transfer-Object-Pattern https://wildeveloperetrain.tistory.com/m/101 https://wildeveloperetrain.tistory.com/101 https://velog.io/@pjy05200/DTO%EC%99%80-Entity-Class%EC%9D%98-%EC%B0%A8%EC%9D%B4 https://studyandwrite.tistory.com/402