J1Yun
ZU-TECHLOG
J1Yun
전체 방문자
였늘
μ–΄μ œ
  • πŸ“‘ Category (135)
    • Algorithm (61)
      • πŸ“š Concept (6)
      • πŸ“˜ Baekjoon Judge (53)
      • πŸ“— Programmers (2)
    • Computer Science (42)
      • πŸ”’ Operating System (14)
      • πŸ“‘ Network (15)
      • πŸ’Ύ Database (8)
      • 🧩 Design Pattern (4)
      • πŸ”‘ Security (1)
    • Activities (12)
      • 🦁 λ©‹μŸμ΄μ‚¬μžμ²˜λŸΌ 9κΈ° (6)
      • πŸ’» SWλ§ˆμ—μŠ€νŠΈλ‘œ 13κΈ° (6)
    • Infra (1)
      • ☁️ AWS (1)
    • Languages (1)
      • πŸ’™ Python (1)
    • Backend (7)
      • πŸ”΅ Django (4)
      • 🟒 Node.js (3)
    • Ect. (8)
      • πŸ’¬ Talk (0)
      • πŸ—‚οΈ 개발직ꡰ μ·¨μ—… μ€€λΉ„μžλ£Œ (8)

λΈ”λ‘œκ·Έ 메뉴

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

곡지사항

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

250x250
hELLO Β· Designed By μ •μƒμš°.
J1Yun

ZU-TECHLOG

[λ””μžμΈνŒ¨ν„΄] Factory Method νŒ¨ν„΄ - ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μΈμŠ€ν„΄μŠ€ μž‘μ„±ν•˜κΈ°
Computer Science/🧩 Design Pattern

[λ””μžμΈνŒ¨ν„΄] Factory Method νŒ¨ν„΄ - ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μΈμŠ€ν„΄μŠ€ μž‘μ„±ν•˜κΈ°

728x90
β€» Java μ–Έμ–΄λ‘œ λ°°μš°λŠ” λ””μžμΈ νŒ¨ν„΄ μž…λ¬Έ(μ˜μ§„λ‹·μ»΄) λ„μ„œλ₯Ό λ°”νƒ•μœΌλ‘œ μž‘μ„±λœ λ‚΄μš©μž…λ‹ˆλ‹€.

 

Factory Method(νŽ™ν† λ¦¬ λ©”μ†Œλ“œ) νŒ¨ν„΄ μ†Œκ°œ

  • Template Method νŒ¨ν„΄μ„ μΈμŠ€ν„΄μŠ€ μƒμ„±μ˜ 츑면에 μ μš©ν•œ νŒ¨ν„΄
    • μ•„λž˜μ˜ Factory Method νŒ¨ν„΄ κ΅¬μ‘°μ—μ„œλŠ” Createsκ°€ Template Method에 ν•΄λ‹Ή
  • μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“œλŠ” 방법을 μƒμœ„ ν΄λž˜μŠ€μ—μ„œ κ²°μ •ν•˜μ§€λ§Œ ꡬ체적인 클래슀 μ΄λ¦„κΉŒμ§€ κ²°μ •ν•˜μ§€ μ•ŠμœΌλ©° ꡬ체적인 λ‚΄μš©μ€ λͺ¨λ‘ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μˆ˜ν–‰
  • μƒμœ„ ν΄λž˜μŠ€μ—μ„œλŠ” 곡정(섀계)만 μ„ μ–Έ, ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ κ³΅μ •μ˜ ꡬ체적인 λ™μž‘μ„ κ΅¬ν˜„

ꡐ재 발췌 이미지

 

예제 ν”„λ‘œκ·Έλž¨ - IDμΉ΄λ“œ 곡μž₯

- Product 클래슀 (Product.java)

  • 좔상 클래슀둜 κ΅¬ν˜„λœ Product(μ œν’ˆ)의 μ—­ν• 
package framework;

public abstract class Product {
  public abstract void use();
}

 

- Factory 클래슀 (Factory.java)

  • 곡정을 λ‹΄κ³  μžˆλŠ” Creater(μž‘μ„±μž)의 μ—­ν• 
  • Productλ₯Ό μƒμ‚°ν•˜λŠ” 곡정 과정을 λ‹΄κ³  있음
package framework;

public abstract class Factory {
  public final Product create(String owner) {
    Product p = createProduct(owner);
    registerProduct(p);
    return p;
  }
  protected abstract Product createProduct(String owner);
  protected abstract void registerProduct(Product product);
}

 

- IDCard 클래슀 (IDCard.java)

  • ConcreteProduct(ꡬ체적인 μ œν’ˆ)의 μ—­ν• 
  • Productλ₯Ό 상속 λ°›μ•„ ꡬ체적으둜 κ΅¬ν˜„
package idcard;
import framework.*;

public class IDCard extends Product {
  private String owner;
  public IDCard(String owner) {
    System.out.println(owner + "의 μΉ΄λ“œλ₯Ό λ§Œλ“­λ‹ˆλ‹€.");
    this.owner = owner;
  }
  @Override
  public void use() {
    System.out.println(owner + "의 μΉ΄λ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.");
  }
  public String getOwner() {
    return owner;
  }
}

 

- IDCardFactory 클래슀 (IDCard.java)

  • ConcreteFactory μ—­ν• 
  • Factoryλ₯Ό 상속받아 ꡬ체적으둜 곡정 λ‚΄μš©μ„ κ΅¬ν˜„
package idcard;
import framework.*;
import java.util.*;

public class IDCardFactory extends Factory {
  private List owners = new ArrayList();
  @Override
  protected Product createProduct(String owner) {
    return new IDCard(owner);
  }
  @Override
  protected void registerProduct(Product product) {
    owners.add(((IDCard)product).getOwner());
  }
  public List getOwners() {
    return owners;
  }
}

 

- Main 클래슀 (Main.java)

import framework.*;
import idcard.*;

public class Main {
  public static void main(String[] args) {
    Factory factory = new IDCardFactory();
    Product card1 = factory.create("홍길동");
    Product card2 = factory.create("박길동");
    Product card3 = factory.create("이길동");
    card1.use();
    card2.use();
    card3.use();
  }
}

 

μž₯점과 단점

μž₯점

  • framework νŒ¨ν‚€μ§€λŠ” idcard νŒ¨ν‚€μ§€μ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • OCP 객체지ν–₯ 원칙을 λ”°λ₯Έλ‹€.
  • Client(Main)의 μž…μž₯μ—μ„œ ꡬ체적인 곡정이 μΆ”κ°€λ˜μ–΄λ„ Template Method(Creates)만 μ•Œλ©΄ λ˜μ–΄ κ°„νŽΈν•˜λ‹€.

단점

  • 좔상 λ©”μ†Œλ“œ μ‚¬μš© μ‹œ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ ν•΄λ‹Ή λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•ŠμœΌλ©΄ 컴파일 λ¬Έμ œκ°€ 생긴닀.
    → λ””ν΄νŠΈμ˜ κ΅¬ν˜„ μ€€λΉ„, μ—λŸ¬ 이용
  • Provider(제곡자) μž…μž₯μ—μ„œ μ œν’ˆ 곡정이 λŠ˜μ–΄λ‚¨μ— 따라 μΆ”κ°€λ˜λŠ” ν΄λž˜μŠ€κ°€ λ§Žμ•„μ§„λ‹€.
728x90

'Computer Science > 🧩 Design Pattern' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ””μžμΈνŒ¨ν„΄] Template Method νŒ¨ν„΄ - ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ ꡬ체적으둜 μ²˜λ¦¬ν•˜κΈ°  (0) 2022.08.18
[λ””μžμΈνŒ¨ν„΄] Adapter νŒ¨ν„΄ - λ°”κΏ”μ„œ μž¬μ΄μš©ν•˜κΈ°  (0) 2022.08.18
[λ””μžμΈνŒ¨ν„΄] Iterator νŒ¨ν„΄ - μˆœμ„œλŒ€λ‘œ μ§€μ •ν•΄μ„œ μ²˜λ¦¬ν•˜κΈ°  (0) 2022.08.17
    'Computer Science/🧩 Design Pattern' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ 글이닀
    • [λ””μžμΈνŒ¨ν„΄] Template Method νŒ¨ν„΄ - ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ ꡬ체적으둜 μ²˜λ¦¬ν•˜κΈ°
    • [λ””μžμΈνŒ¨ν„΄] Adapter νŒ¨ν„΄ - λ°”κΏ”μ„œ μž¬μ΄μš©ν•˜κΈ°
    • [λ””μžμΈνŒ¨ν„΄] Iterator νŒ¨ν„΄ - μˆœμ„œλŒ€λ‘œ μ§€μ •ν•΄μ„œ μ²˜λ¦¬ν•˜κΈ°
    J1Yun
    J1Yun
    개발 κ΄€λ ¨ 기술 및 곡뢀 λ‚΄μš© 기둝μž₯

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