Backend

[λ””μžμΈ νŒ¨ν„΄] builderνŒ¨ν„΄

2024. 2. 18. 18:17
λͺ©μ°¨
  1. πŸ€” λΉŒλ” νŒ¨ν„΄(Builder Pattern) ?
  2. βœ” κΈ°μ‘΄ νŒ¨ν„΄
  3. πŸ”Ž μƒμ„±μž νŒ¨ν„΄
  4. πŸ”Ž μžλ°” 빈(Java Beans) νŒ¨ν„΄
  5. βœ” λΉŒλ” νŒ¨ν„΄

 

πŸ€” λΉŒλ” νŒ¨ν„΄(Builder Pattern) ?

λ³΅μž‘ν•œ 객체의 생성 κ³Όμ •κ³Ό ν‘œν˜„ 방법을 λΆ„λ¦¬ν•˜μ—¬ λ‹€μ–‘ν•œ κ΅¬μ„±μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“œλŠ” 생성 νŒ¨ν„΄μ΄λ‹€. μƒμ„±μžμ— λ“€μ–΄κ°ˆ 맀개 λ³€μˆ˜λ₯Ό λ©”μ„œλ“œλ‘œ ν•˜λ‚˜ν•˜λ‚˜ 받아듀이고 λ§ˆμ§€λ§‰μ— 톡합 λΉŒλ“œν•΄μ„œ 객체λ₯Ό μƒμ„±ν•˜λŠ” 방식이닀.

좜처 : Inpa Dev

 

βœ” κΈ°μ‘΄ νŒ¨ν„΄

πŸ”Ž μƒμ„±μž νŒ¨ν„΄

μƒμ„±μžλ₯Ό ν†΅ν•΄μ„œ 값을 μ„€μ •ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€.

μ˜€λ²„λ‘œλ”©μ„ 톡해 ν•„μˆ˜λ‘œ μ„€μ •ν•΄μ•Όν•˜λŠ” κ°’λ“€κ³Ό ν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” 값듀을 μ‘°μ ˆν•˜μ—¬ λ§Œλ“€ 수 μžˆλ‹€.

ν•˜μ§€λ§Œ 클래슀의 ν•„λ“œκ°€ λ§Žμ„κ²½μš° μƒμ„±μžμ˜ λ§€κ°œλ³€μˆ˜ λ˜ν•œ λŠ˜μ–΄λ‚˜κ²Œ 되고 μž…λ ₯ν•œ λ§€κ°œλ³€μˆ˜μ˜ μˆœμ„œμ— 맞게 값듀을 μž…λ ₯ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μˆœμ„œλ₯Ό λͺ¨λ‘ κΈ°μ–΅ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ μ‹€μˆ˜λ₯Ό μœ λ°œν•  수 있고,

μƒλž΅ν•˜κ³ μ‹Άμ€ λ§€κ°œλ³€μˆ˜λ₯Ό μ„ νƒμ μœΌλ‘œ μƒλž΅ν•  수 μ—†λ‹€.

public class Member{

	private String id;
	private String name;
    private String address;
    private String email;
    
    public Member(String id, String name, String address, String email){
        this.id = id;
        this.name = name;
        this.address = address;
        this.email = email;
    }
}

 

πŸ”Ž μžλ°” 빈(Java Beans) νŒ¨ν„΄

Setterλ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 클래슀 ν•„λ“œμ— 값을 μ„€μ •ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€.

μƒμ„±μž νŒ¨ν„΄μ—μ„œμ˜ λ¬Έμ œμ λ“€μ„ setterλ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 직접 μ„€μ •ν•˜κ³ , μƒλž΅ν•˜κ³  싢은 값을 μ„ νƒμ μœΌλ‘œ μƒλž΅ν•  수 μžˆλ‹€.

ν•˜μ§€λ§Œ μ΄λŸ¬ν•œ μœ μ—°ν•œ κ°’ μ„€μ •μœΌλ‘œ 인해 일관성(consistency)κ³Ό λΆˆλ³€μ„±(immutable)에 λŒ€ν•œ λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

일관성 : 객체 생성 μ‹œμ μ— λͺ¨λ“  값을 μ£Όμž…ν•˜μ§€ μ•Šκ³  생성 이후 κ°œλ°œμžκ°€ setterλ©”μ†Œλ“œλ₯Ό 톡해 μ„€μ •ν•˜κΈ° λ•Œλ¬Έμ— κΌ­ μ„ΈνŒ…λ˜μ–΄μ•Ό ν•  값이 μ„ΈνŒ…λ˜μ§€ μ•Šκ³  μ‚¬μš©ν•˜κ²Œ 되면 일관성이 κΉ¨μ§€κ²Œ λœλ‹€.

λΆˆλ³€μ„± : 객체λ₯Ό μƒμ„±ν• λ•Œ ν•„λ“œ 값을 μ„€μ •ν•˜κΈ° μœ„ν•΄ setterλ©”μ†Œλ“œλ₯Ό λ§Œλ“€μ—ˆμ§€λ§Œ μ™ΈλΆ€μ—μ„œ setterλ©”μ†Œλ“œμ— 접근이 κ°€λŠ₯ν•˜λ‹€ ,μ΄λŠ” μ–΄λ””μ„œ λˆ„κ΅°κ°€ setterλ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ 객체λ₯Ό μˆ˜μ •ν•  수 μžˆλŠ” μ—¬μ§€κ°€ 있기 λ•Œλ¬Έμ— λΆˆλ³€μ„±μ„ 보μž₯ν•  수 μ—†λ‹€.

public class Member{

	private String id;
	private String name;
    private String address;
    private String email;
    
    public void setId(String id){
    	this.id = id;
    }
    public void setName(String name){
    	this.name = name;
    }
    public void setAddress(String address){
    	this.address = address;
    }
    public void setEmail(String email){
    	this.email = email;
    }
}

 

βœ” λΉŒλ” νŒ¨ν„΄

λ³„λ„μ˜ Builder 클래슀λ₯Ό λ§Œλ“€μ–΄ λ©”μ†Œλ“œλ₯Ό 톡해 값을 μž…λ ₯ 받은 ν›„ build()λ©”μ†Œλ“œλ‘œ ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•œλ‹€.

πŸ“Ž κ΅¬ν˜„

public class Member {

    private String id;
    private String name;
    private String address;
    private String email;

    private Member(MemberBuilder builder){
        this.id = builder.id;
        this.name = builder.name;
        this.address = builder.address;
        this.email = builder.email;
    }
    
    public static class MemberBuilder {
        private String id;
        private String name;
        private String address;
        private String email;

        public MemberBuilder id(String id){
            this.id = id;
            return this;
        }
        public MemberBuilder name(String name){
            this.name = name;
            return this;
        }
        public MemberBuilder address(String address){
            this.address = address;
            return this;
        }
        public MemberBuilder email(String email){
            this.email = email;
            return this;
        }
        public Member build(){
            return new Member(this);
        }
    }
}

πŸ“Ž μ‚¬μš©

public static void main(String[] args) {
    Member member = new MemberBuilder()
            .id("test")
            .name("name")
            .address("address")
            .email("email")
            .build();
}

buiderλ©”μ†Œλ“œλ₯Ό 톡해 객체λ₯Ό μƒμ„±ν•˜κ³  ν•„λ“œλͺ…κ³Ό 같은 λ©”μ†Œλ“œλ₯Ό ν†΅ν•΄μ„œ 값을 μ„€μ •ν•˜κΈ° λ•Œλ¬Έμ— 가독성도 ν–₯μƒλœλ‹€.

λ˜ν•œ ν•„λ“œμ˜ 값을 μ„€μ •ν•˜λŠ” λ©”μ†Œλ“œλ“€μ€ this 즉 MemberBuilderλ₯Ό returnν•˜κΈ° λ•Œλ¬Έμ— 체이닝을 μ‚¬μš©ν•˜μ—¬ μˆœμ„œμ™€ 상관 없이 값을 μ„€μ • ν•˜λ©΄μ„œ 기쑴의 μƒμ„±μž νŒ¨ν„΄μ˜ λ¬Έμ œμ λ“€μ„ λ³΄μ™„ν•˜κ³ , build λ©”μ†Œλ“œλ₯Ό 톡해 값을 μ„€μ •ν•˜λ©΄μ„œ μƒμ„±λ˜κ³  κ·Έ ν›„μ—λŠ” μˆ˜μ •ν•  수 μ—†κΈ° λ•Œλ¬Έμ— μžλ°” 빈 νŒ¨ν„΄μ—μ„œμ˜ λ¬Έμ œμ μ΄μ—ˆλ˜ 일관성과 λΆˆλ³€μ„±μ— κ΄€ν•œ λ¬Έμ œλ„ 보완할 수 μžˆλ‹€.

이와 같은 μΌκ΄€λœ ν”„λ‘œμ„ΈμŠ€λ‘œ 객체λ₯Ό μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ— μ„€μ • 였λ₯˜μ™€ 같은 μ‹€μˆ˜λ˜ν•œ λ°©μ§€ ν•  수 μžˆλ‹€.

 

ν•˜μ§€λ§Œ 객체의 ν•„λ“œλ“€μ΄ λ§Žμ§€ μ•Šλ‹€λ©΄ μƒμ„±μž νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λŠ”κ²ƒμ΄ 더 λ‚˜μ€ 선택일 수 μžˆλ‹€.

μ™œλƒν•˜λ©΄ 가독성, κ°’ μ„€μ • μˆœμ„œ, κ°’ μƒλž΅ λ“± 같은 μƒμ„±μž νŒ¨ν„΄μ˜ 단점이 ν•„λ“œκ°€ 적음으둜써 극볡 될 수 μžˆλ‹€.

λ˜ν•œ λΉŒλ“œ νŒ¨ν„΄μ€ μ½”λ“œμ˜ λ³΅μž‘μ„±μ΄ μ˜¬λΌκ°„λ‹€λŠ” 단점이 μžˆλ‹€.

(Lombok라이브러리의 @Builder μ–΄λ…Έν…Œμ΄μ…˜μ„ 톡해 λΉŒλ” 클래슀λ₯Ό λ§Œλ“€μ§€ μ•Šκ³  λΉŒλ” νŒ¨ν„΄μ„ μ‚¬μš©ν•  수 μžˆλ‹€.)

 

'Backend' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

ν…ŒμŠ€νŠΈ μ½”λ“œ μ™œ μž‘μ„±ν• κΉŒμš”? (TDD?)  (0) 2024.03.11
  1. πŸ€” λΉŒλ” νŒ¨ν„΄(Builder Pattern) ?
  2. βœ” κΈ°μ‘΄ νŒ¨ν„΄
  3. πŸ”Ž μƒμ„±μž νŒ¨ν„΄
  4. πŸ”Ž μžλ°” 빈(Java Beans) νŒ¨ν„΄
  5. βœ” λΉŒλ” νŒ¨ν„΄
'Backend' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • ν…ŒμŠ€νŠΈ μ½”λ“œ μ™œ μž‘μ„±ν• κΉŒμš”? (TDD?)
μž₯μš©μ„
μž₯μš©μ„
κ³΅λΆ€ν•œ λ‚΄μš©μ„ κΈ°λ‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.
μž₯μš©μ„
dot
μž₯μš©μ„
전체
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (38)
    • Backend (12)
      • JPA (7)
      • Spring (3)
    • CS (2)
    • Algorithm (18)
      • 자료ꡬ쑰 (3)
      • 문제 (10)
    • Project (6)
      • SpringBoot+JPA κ²Œμ‹œνŒ (6)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

인기 κΈ€

νƒœκ·Έ

  • λ°±νŠΈλž˜ν‚Ή
  • Builder
  • Java
  • κ³¨λ“œ
  • ν…ŒμŠ€νŠΈμ½”λ“œ
  • μžλ°”
  • λ°±μ€€
  • DP
  • dfs
  • 1890번
  • CRUD
  • 12865번
  • JPA
  • μ•Œκ³ λ¦¬μ¦˜
  • 자료ꡬ쑰
  • spring
  • ORM
  • κ²Œμ‹œνŒ
  • spring data JPA
  • 싀버

졜근 λŒ“κΈ€

졜근 κΈ€

hELLO Β· Designed By μ •μƒμš°.
μž₯μš©μ„
[λ””μžμΈ νŒ¨ν„΄] builderνŒ¨ν„΄
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.