6_oHji
6_oHji
ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค☺
GitHub   Gmail
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (62)
    • ๐Ÿ’ก DEEP DIVE (17)
      • PATTERN (17)
    • ๐Ÿ“ ๋„์ ๋„์  (4)
    • ๐ŸŒˆ EXPERIENCE (3)
    • ๐Ÿ’ป PROJECT (3)
    • ๐Ÿ“’ STUDY (34)
      • ALGORITHM (1)
      • JAVA (5)
      • FRONT-END (7)
      • BACK-END (10)
      • SPRING (7)
      • NETWORK (3)
      • CLOUD (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ์Šคํ† ๋ฆฌ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ
hELLO ยท Designed By ์ •์ƒ์šฐ.
6_oHji
6_oHji
Deep Dive Into Design Patterns - ๋นŒ๋” ํŒจํ„ด
๐Ÿ’ก DEEP DIVE/PATTERN

Deep Dive Into Design Patterns - ๋นŒ๋” ํŒจํ„ด

2024. 5. 11. 15:31

 

๐Ÿ’ก ๋นŒ๋”(Builder) ํŒจํ„ด์ด๋ž€?

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ์ ์ง„์ ์œผ๋กœ ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ๋ณต์žกํ•œ ๊ฐ์ฒด๋“ค์„ ๋‹จ๊ณ„ ๋ณ„๋กœ ์ƒ์„ฑํ•˜๋Š” ์ƒ์„ฑ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž์— ๋“ค์–ด๊ฐˆ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฐ›์•„๋“ค์ด๊ณ  ๋งˆ์ง€๋ง‰์— ํ†ตํ•ฉ ๋นŒ๋“œํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ, ์ƒ์„ฑ ๊ฐ์ฒด์— ์ดˆ๊ธฐ๊ฐ’์„ ์ฃผ๊ฑฐ๋‚˜ ์ƒ์„ฑํ•  ํด๋ž˜์Šค๋ฅผ ์„ ํƒํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๋ณ€ํ˜•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ์ฒด ์ƒ์„ฑ์„ ํด๋ž˜์Šค ๋กœ์ง ๋ฐ–์œผ๋กœ ์˜ฎ๊ธธ ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ๋นŒ๋” ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

public static void main(String[] args) {

    // ์ƒ์„ฑ์ž ๋ฐฉ์‹
    Hamburger hamburger = new Hamburger(2, 3, 0, 3, 0, 0);

    // ๋นŒ๋” ๋ฐฉ์‹
    Hamburger hamburger = new Hamburger.Builder(10)
        .bun(2)
        .patty(3)
        .lettuce(3)
        .build();
}

 

๐Ÿ’ก ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๋ณธ ๋นŒ๋” ํŒจํ„ด

  1. Builder : ๋ชจ๋“  ์œ ํ˜•์˜ ๋นŒ๋”๋“ค์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ด์€ ์ธํ„ฐํŽ˜์ด์Šค
  2. Concrete Builder : ์ƒ์„ฑ ๋‹จ๊ณ„๋“ค์˜ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„
  3. Product : ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค
  4. Director : ์ƒ์„ฑ ๋‹จ๊ณ„๋“ค์„ ํ˜ธ์ถœํ•˜๋Š” ์ˆœ์„œ๋ฅผ ์ •์˜

 

๐Ÿ’ก ๋นŒ๋” ํŒจํ„ด ๊ตฌํ˜„

class StudentBuilder {
    private int id;
    private String name;
    private String grade;
    private String phoneNumber;

    public StudentBuilder id(int id) {
        this.id = id;
        return this;
    }

    public StudentBuilder name(String name) {
        this.name = name;
        return this;
    }

    public StudentBuilder grade(String grade) {
        this.grade = grade;
        return this;
    }

    public StudentBuilder phoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
        return this;
    }
    
    public Student build() {
        return new Student(id, name, grade, phoneNumber); // Student ์ƒ์„ฑ์ž ํ˜ธ์ถœ
    }
}

// ๋นŒ๋” ํด๋ž˜์Šค ์‹คํ–‰
public static void main(String[] args) {

    Student student = new StudentBuilder()
                .id(2016120091)
                .name("์ž„๊บฝ์ •")
                .grade("Senior")
                .phoneNumber("010-5555-5555")
                .build();

    System.out.println(student);
}

 

๐Ÿ’ก ๋งˆ๋ฌด๋ฆฌ

๋นŒ๋” ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์ œํ’ˆ๋“ค์˜ ๋‹ค์–‘ํ•œ ํ‘œํ˜„์„ ๋งŒ๋“ค ๋•Œ ๊ฐ™์€ ์ƒ์„ฑ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ œํ’ˆ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๋ณต์žกํ•œ ์ƒ์„ฑ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(SRP ์ค€์ˆ˜).

 

 

๋นŒ๋” ํŒจํ„ด

/ ๋””์ž์ธ ํŒจํ„ด๋“ค / ์ƒ์„ฑ ํŒจํ„ด ๋นŒ๋” ํŒจํ„ด ๋‹ค์Œ ์ด๋ฆ„์œผ๋กœ๋„ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค: Builder ์˜๋„ ๋นŒ๋”๋Š” ๋ณต์žกํ•œ ๊ฐ์ฒด๋“ค์„ ๋‹จ๊ณ„๋ณ„๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ƒ์„ฑ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ™์€ ์ œ์ž‘

refactoring.guru

 

๐Ÿ’  ๋นŒ๋”(Builder) ํŒจํ„ด - ์™„๋ฒฝ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ

Builder Pattern ๋นŒ๋” ํŒจํ„ด(Builder Pattern)์€ ๋ณต์žกํ•œ ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๊ณผ์ •๊ณผ ํ‘œํ˜„ ๋ฐฉ๋ฒ•์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ƒ์„ฑ ํŒจํ„ด์ด๋‹ค. ์ƒ์„ฑ์ž์— ๋“ค์–ด๊ฐˆ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฐ›์•„

inpa.tistory.com

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)
    '๐Ÿ’ก DEEP DIVE/PATTERN' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • Deep Dive Into Design Patterns - ์ƒํƒœ ํŒจํ„ด
    • Deep Dive Into Design Patterns - ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด
    • Deep Dive Into Design Patterns - ํ”Œ๋ผ์ด์›จ์ดํŠธ ํŒจํ„ด
    • Deep Dive Into Design Patterns - ์ฑ…์ž„ ์—ฐ์‡„ ํŒจํ„ด
    6_oHji
    6_oHji
    ๋„์ ๋„์ 

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”