Lombok Annotation ๊ด€๋ จ

2021. 6. 17. 17:59ใ†Back-End ์ž‘์—…์‹ค/Spring Framework

728x90
๋ฐ˜์‘ํ˜•

lombok์ด๋ž€?

Getter์™€ Setter๋ฅผ Annotationํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜์—ฌ Method๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ
Java Compile ์‹œ์ ์—์„œ ํŠน์ • Annotation์œผ๋กœ ํ•ด๋‹น Code๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์— ๋งŽ์€ ๋„์›€์„ ์ฃผ๊ฒŒ๋˜๋‚˜, ์ž˜ ๋ชป ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋†’์€ Library.

 

 

๐Ÿ“Œ @Data ์‚ฌ์šฉ์€ NoNo!!

@Data๋Š” ์•„๋ž˜ Annotation์„ ํ•œ๋ฒˆ์— ํฌํ•จํ•˜๋Š” ๊ฐ•๋ ฅํ•œ Annotation์ธ ๊ฒƒ์ด์—์š”.

@ToString, @EqualseAndHashCode, @Getter, @Setter, @RequiredArgsConstructor

๋ฌธ์ œ๋Š” @Setter๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๊ฒ ์ง€์š”?

 


 

@Setter

๋Š” ๊ทธ ์˜๋„๊ฐ€ ๋ถ„๋ช…ํ•˜์ง€ ์•Š๊ณ , ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ๊ฐ’)๋ฅผ ์–ธ์ œ๋“ ์ง€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ „์„ฑ์„ ๋ณด์žฅ๋ฐ›๊ธฐ ํž˜๋“  ๊ฒƒ์ด์—์š”. ๊ทธ๋Ÿด๊ฑฐ๋ฉด ๊ทธ๋ƒฅ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ private๊ฐ€ ์•„๋‹Œ public์œผ๋กœ ํ•˜๋Š”๊ฒƒ๊ณผ ๋‹ค๋ฅผ๊ฒƒ์ด ์—†๋Š” ๊ฒƒ์ด์—์š”. ๋งŒ์•ฝ ํšŒ์›๊ฐ€์ž… ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, id๋ฅผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ๋งŒ๋“ ๋‹ค๋ฉด id ๊ด€๋ จ setter ๋˜ํ•œ! ์ œ๊ณต ๋˜๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์ด์—์š”.
๊ทธ๊ฒƒ์€ ๋‹จ์ˆœ ์•ˆ์ ํ•จ์„ ๋„˜์–ด ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ์ž์‹ ์„ ๊ฐ€์žฅ ์ž˜ ํ‘œํ˜„ํ•˜๋Š” ๊ตฌ์กฐ๋กœ id์˜ ๋ณ€๊ฒฝ Point๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Œ์œผ๋กœ, id์— ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

@ToString์œผ๋กœ ์ธํ•œ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ์‹œ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฌธ์ œ

 

@Entity
@Table(name = "member")
@Data
public class Member {
    ....
    @OneToMany
    @JoinColumn(name = "member_ship_id")
    private List<MemberShip> ms = new ArrayList<>();
}

@Entity
@Table(name = "memberShip")
@Data
public class MemberShip {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @ManyToOne
    private Member member;

    public Coupon(Member member) {
        this.member = member;
    }
}

๋งŒ์•ฝ Member๋ผ๋Š” ๊ฐ์ฒด์™€ MemberShip ๊ฐ์ฒด๊ฐ€ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€ ๊ด€๊ณ„์ผ ๋•Œ, ToString์„ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด ๋ฌดํ•œ ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”. ์ด๊ฒƒ์€ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ๊ฐ์ฒด๋ฅผ Json์œผ๋กœ ์ง๋ ฌํ™” ํ•˜๋Š” ๊ฐ€์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์™€ ๋™์ผํ•œ ๊ฒƒ์ด์—์š”.

 

 

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์€?

@ToString(exclude = "memberShip")
public Class Member {
  ...
}

์ด๋ ‡๊ฒŒ ํ•ด๋‹น Annotation์„ ์ด์šฉํ•˜์—ฌ ToString ํ•ญ๋ชฉ์—์„œ ์ œ์™ธ ์‹œ์ผœ ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด์—์š”.

์ข‹์€ ๋ฐฉ๋ฒ•

@NoArgsConstructor ์ ‘๊ทผ ์ตœ์†Œํ™”

JPA์—์„œ๋Š” Proxy ์ƒ์„ฑ์„ ์œ„ํ•ด ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.
์ด ๋•Œ, ์ ‘๊ทผ ๊ถŒํ•œ์ด protected์ด๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค! ๊ตณ์ด ์™ธ๋ถ€์— ์—ด์–ด๋‘˜ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด์ง€์š”.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์žฅ์ ์€ ์ด๋Ÿฌํ•ฉ๋‹ˆ๋‹ค.

@Entity
@Table(name = "product")
@Getter
@NoArgsConstructor(access = AccessLevel.PUBLIC) // ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ž„์‹œ๋กœ Public, ์˜๋„ํ•œ ์ฝ”๋“œ๋Š” PROTECTED
public class Product {

    @Id
    private String id;

    private String name;

    @Builder
    public Product(String name) {
        this.id = UUID.randomUUID().toString();
        this.name = name;
    }
}

์œ„์˜ ์ฝ”๋“œ๋Š” ID์ƒ์„ฑ์„ UUIDํ˜•์‹์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

ID๋Š” ํ•ญ์ƒ NULL์ด ์•„๋‹ˆ๊ธธ ๊ธฐ๋Œ€ํ•˜์ง€๋งŒ, public ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ID์— NULL์ด ๋“ค์–ด์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์•„๋ฌด ์ด์œ  ์—†์ด ์—ด์–ด๋‘๋Š” ๊ฒƒ์€ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ์•ˆ์ „์„ฑ์„ ๋–จ์–ดํŠธ๋ฆฌ๋Š” ์š”์ธ์ด ๋˜๋Š” ๊ฒƒ์ด์ง€์š”.

์ด๋Ÿด ๋•Œ! @NoArgsConstuctor(access = AccessLevel.PUBLIC)์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ์•ˆ์ „์„ฑ์„ ์–ด๋Š ์ •๋„ ๋ณด์žฅ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”!

๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์ ‘๊ทผ์„ protected๋กœ ๋ณ€๊ฒฝ ์‹œ ์™ธ๋ถ€์—์„œ ํ•ด๋‹น ์ƒ์„ฑ์ž๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ธฐ์— ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

@Builder
public Product(String name) {
  this.id = UUID.randomUUID().toString();
  this.name = name;
}

์œ„์™€ ๊ฐ™์ด ํ•  ๊ฒฝ์šฐ UUID์ƒ์„ฑ ์ฝ”๋“œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ID๊ฐ’์ด ๋“ค์–ด์˜ค๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ณด์žฅ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

๊ฐ์ฒด์— ๋Œ€ํ•œ ์ƒ์„ฑ์ž๋ฅผ ํ•˜๋‚˜ ๋‘๊ณ , ๊ทธ๊ฒƒ์„ @Builder๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค!

@Builder(๋นŒ๋” ํŒจํ„ด)๋ž€?
๋ณตํ•ฉ ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๊ณผ์ •๊ณผ ํ‘œํ˜„ ๋ฐฉ๋ฒ•์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋™์ผํ•œ ์ƒ์„ฑ ์ ˆ์ฐจ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํ‘œํ˜„ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํŒจํ„ด.
์ฆ‰, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ์ƒ์„ฑ์ž๋งŒ์„ ํ†ตํ•ด์„œ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์›€์ด ์žˆ๋Š” ๊ฒƒ์ด์—์š”. ๋นŒ๋” ํŒจํ„ด์€ ์ด ๋ฌธ์ œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ ์•ˆ ๋œ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ธ๋ฐ, ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ƒ์„ฑ์ž ์ธ์ž๋กœ ๋„ˆ๋ฌด ๋งŽ์€ ์ธ์ž๊ฐ€ ๋„˜๊ฒจ์ง€๋Š” ๊ฒฝ์šฐ ์–ด๋– ํ•œ ์ธ์ž๊ฐ€ ์–ด๋– ํ•œ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ํž˜๋“ค ์ˆ˜ ์žˆ์ฃ ! ๋˜ ์–ด๋– ํ•œ ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ์—๋Š” ํŠน์ • ์ธ์ž๋งŒ์œผ๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋„ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. ์ด๋Ÿด ๊ฒฝ์šฐ ํŠน์ • ์ธ์ž์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ null๋กœ ์ „๋‹ฌํ•ด์ค˜์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Š” ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ ์ธก๋ฉด์—์„œ ๋งค์šฐ ์ข‹์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

public Studnet(long id, String name, String major, int age, String address) {
  this.id = id;
  this.name = name;
  this.major = major;
  this.age = age;
  this.address = address;
}

์œ„์™€ ๊ฐ™์ด ํ•™์ƒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š”

Student student = new Student(123456, "java", "hihi", 21, "secho");

์ด๋Ÿฐ์‹์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”. ๊ทธ๋Ÿฐ๋ฐ, ๋งŒ์•ฝ ํ•™๋ฒˆ๊ณผ ์ด๋ฆ„๋งŒ ์•„๋Š” ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

Stuent stuent = new Student(123456, "java", null, 0, null);

์œ„์™€ ๊ฐ™์ด Garbage Data๋‚˜, Null๊ฐ’์„ ๋„ฃ์–ด ํ•ด๊ฒฐํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋Ÿด ๊ฒฝ์šฐ ํŠน์ • ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์–ด๋– ํ•œ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ํž˜๋“ค์–ด ์ง€๋Š” ๊ฒƒ์ด์—์š”.

๋งŒ์•ฝ Setter๋ฅผ ํ†ตํ•ด Java Bean์„ ์ƒ์„ฑํ•œ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”?

Student student = new Studnet();
student.setId(123456);
student.setName("java");
student.setAge(21);
student.setMajor("hihi");
student.setAddress("secho");

ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ์ด๋Ÿฐ์‹์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ํ•จ์ˆ˜ ํ˜ธ์ถœ 1ํšŒ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ผ๊ด€์„ฑ์ด ์ผ์‹œ์ ์œผ๋กœ ๊นจ์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. ๋˜ํ•œ, immutable ๊ฐ์ฒด๋„ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์ง€์š”!

์ ์ธต์  ์ƒ์„ฑ์ž ํŒจํ„ด๊ณผ ์ž๋ฐ” ๋นˆ ํŒจํ„ด์˜ ์žฅ์ ์„ ๊ฒฐํ•ฉํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ๋นŒ๋” ํŒจํ„ด์ด๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์—์„œ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹ , ๊ทธ ์ „์— ํ•„์ˆ˜ ์ธ์ž๋“ค์„ ์ „๋‹ฌํ•˜์—ฌ ๋นŒ๋” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“  ๋’ค, ๋นŒ๋” ๊ฐ์ฒด์— ์ •์˜๋œ ์„ค์ • Method๋“ค์„ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

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

public interface Buildable<T> {
  T build();
}

์ผ๋‹จ, interface๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ๋‹ค๋ฅธ builder์—๋„ ์ ์šฉํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

public class Studnet {
  private long id;
  private String name;
  private String major;
  private int age;
  private String address;

  public Studnet() {

  }

  public static class Builder implements Buildable {
    // ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ ํ•ญ๋ชฉ
    private final long id;
    private final String name;

    // ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ํ•ญ๋ชฉ
    private String major = "";
    private int age = 0;
    private String address = "";

    public Builder major(String major) {
      this.age = age;
      return this;
    }

    public Builder address(String address) {
      this.address = address;
      return this;
    }

    public Student build() {
      return new Student(this);
    }
  }

  private Student(Builder builder) {
    this.id = builder.id;
    this.name = builder.name;
    this.major = builder.major;
    this.age = builder.age;
    this.address = builder.address;
  }
}

Studnet Class์•ˆ์— Builder๋ผ๋Š” ์ •์  Member Class๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ , interface๋ฅผ ๊ตฌํ˜„ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
์ตœ์ข…์ ์œผ๋กœ build()๋ผ๋Š” Method๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๊ฒƒ์ธ๋ฐ์š”. Studnet Class์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ id์™€ name์„ ํ•„์ˆ˜ ์ธ์ž๋กœ ์„ ํƒํ•˜์—ฌ final์ด๋ผ๋Š” keyword๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , Builder๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ธ์ž๋กœ ๋„˜๊ฒจ ๋ฐ›๊ฒŒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€ ์„ ํƒ์  ์ธ์ž๋“ค์€ Builder๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•˜์—ฌ Chaining์„ ํ†ตํ•ด ์ธ์ž๋ฅผ ๋„˜๊ฒจ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

Student student = new Student.Builder(123456, "java")
                              .major("hihi")
                              .age(21)
                              .address("secho")
                              .build();

์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌํ•จ์—๋„ ์–ด๋– ํ•œ ๊ฐ’์ด ์–ด๋– ํ•œ ์˜๋ฏธ์ธ์ง€ ํŒŒ์•…๋  ์ˆ˜ ์žˆ๊ณ , ํ•„์ˆ˜ ์ธ์ž์™€ ์„ ํƒ ์ธ์ž๋„ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋ณธ๋ก ์œผ๋กœ ๋Œ์•„์™€์„œ ๊ตณ์ด ID์— ๊ตญํ•œ ๋˜์–ด ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ , ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ๋ฐ˜๋“œ์‹œ ์ƒ์„ฑ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ๋“ค์— ๋Œ€ํ•œ ์•ˆ์ „์„ฑ์„ ๋†’์ด๋Š” ์‹œ๊ฐ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ฒ ์ง€์š”?

ํด๋ฆฐ์ฝ”๋“œ, ์œ ์ง€๋ณด์ˆ˜ ํ•˜๊ธฐ ์ข‹์€ ์ฝ”๋“œ๋“ค์„ ์ด๋Ÿฐ ์‚ฌ์†Œํ•œ ๊ฐ์ฒด ์ƒ์„ฑ๋ถ€ํ„ฐ ์ƒ์„ฑํ•ด๋ณด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.

Builder ์‚ฌ์šฉ ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ตœ์†Œํ™” ํ•˜์ž


@Builder
pubilc class Member {
  ...
}

Class ์œ„์— @Builder ์‚ฌ์šฉ ์‹œ @AllArgsConstuctor Annotation์„ ๋ถ™์ธ ํšจ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด์—์š”.
(๋ชจ๋“  ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š” ์ƒ์„ฑ์ž ์ƒ์„ฑ)

Member์˜ ID ์ƒ์„ฑ ์ „๋žต์€ DB์˜ Auto_Increament๋ฅผ ์˜์กดํ•œ๋‹ค๊ณ  ๊ฐ€์ • ํ–ˆ์„ ๋•Œ, ID๋ฅผ ๋„˜๊ฒจ ๋ฐ›์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”. ๋˜, createAt, updateAt ๊ฐ™์€ ๊ฒฝ์šฐ @CreationTimestamp, @UpdateTimestamp ๊ฐ๊ฐ ํ•ด๋‹น ์ผ์„ ๋‹ด๋‹นํ•˜๋Š” Annotation์ด ์žˆ๋Š” ๊ฒƒ์ด์—์š”. ์ด์ฒ˜๋Ÿผ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ๋ฐ›์ง€ ์•Š์•„์•ผ ํ•  Data๋“ค์ด Class tkdeks @Builder๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด์—์š”.

public class Member {

  @Builder
  public Member(String email, String name) {
    this.email = email;
    this.name = name;
  }
}

์œ„์™€ ๊ฐ™์ด ๋ฐ›์•„์•ผ ํ•˜๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ•„์š” ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ง€์ •ํ•˜๊ณ , ๊ทธ ์œ„์— @Builder๋ฅผ ๋ถ™์ด๋Š”๊ฒŒ ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ๋งค๊ฐœ๋ณ€์ˆ˜ name๊ณผ email๋งŒ ๋„˜๊ฒจ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

728x90
๋ฐ˜์‘ํ˜•