[Design pattern] Factory method ๐Ÿ–ฒ, (Creational patterns)

7601 ๋‹จ์–ด Design PatternDesign Pattern

Factory method

  • ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ฐ์ฒด๋“ค์„ ์ •์˜ํ•˜๊ณ , ํŒฉํ† ๋ฆฌ๊ฐ€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ




์žฅ์ 

  • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌ์‹œํ‚ด์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์™€ ๊ฒฐํ•ฉ๋„(์˜์กด์„ฑ)๋ฅผ ๐Ÿ‘‡
    ๐Ÿ‘‰ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ, ๊ฐ์ฒด ์ƒ์„ฑ ํด๋ž˜์Šค๋งŒ ์ˆ˜์ • ๊ฐ€๋Šฅ

  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚œ ์ฝ”๋“œ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

  • ๊ฐ์ฒด์˜ ์ž๋ฃŒํ˜•์ด ํ•˜์œ„ ํด๋ž˜์Šค์— ์˜ํ•ด ๊ฒฐ์ •
    ๐Ÿ‘‰ ํ™•์žฅ ์šฉ์ด

  • SOLID ์›์น™ ์ค‘ DIP(Dependency Inversion Principle, ์˜์กด ๊ด€๊ณ„ ์—ญ์ „ ์›์น™) ์„ฑ๋ฆฝ


๋‹จ์ 

  • ์ƒ์„ฑํ•  ๊ฐ์ฒด์˜ ์ข…๋ฅ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก, ํด๋ž˜์Šค ๋˜ํ•œ ๐Ÿ‘†



๊ตฌ์กฐ




Code


public class FactoryPatternEx {
  public static void main(String[] args) {
    
    ShapeFactory shapeFactory = new ShapeFactory();

    Shape shape1 = shapeFactory.getShape("CIRCLE");
    shape1.draw();

    Shape shape2 = shapeFactory.getShape("RECTANGLE");
    shape2.draw();
  }
}

๐Ÿ‘‰ Factory์—์„œ ๋งŒ๋“ค์–ด๋‚ผ ์ƒํ’ˆ๋“ค์„ ์ •์˜

public interface Shape {
  void draw();
}
public class Circle implements Shape {

  @Override
  public void draw() {
    System.out.println("Inside Circle::draw() method.");
  }
}
public class Square implements Shape {

  @Override
  public void draw() {
    System.out.println("Inside Rectangle::draw() method.");
  }
}

๐Ÿ‘‰ ์ƒํ’ˆ๋“ค์„ ๋งŒ๋“ค์–ด ๋‚ด๋ณด๋‚ผ ํŒฉํ† ๋ฆฌ ์ •์˜


public class ShapeFactory {

  public Shape getShape(String shapeType) {
    if (ShapeType.equalsIgnoreCase("CIRCLE"))
      return new Circle();
    else if (ShapeType.equalsIgnoreCase("RECTANGLE"))
      return new Rectangle();
    else
      return null
  }
}

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ