Factory

Factory๋Š” ํ”Œ๋Ÿฌํ„ฐ์—์„œ ๋ชจ๋ธํด๋ž˜์Šค๋ฅผ ์ •์˜ํ• ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค.

Model Class : ๋‹ค๋ฃจ๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ• ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค. (๊ฐ์ฒด <-> ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜)

์•„๋ž˜๋Š” ๊ณต์‹๋ฌธ์„œ์—์„œ Factory์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์žฅ์ด๋‹ค.

Use the factory keyword when implementing a constructor that doesnโ€™t always create a new instance of its class

ํ•ด์„ํ•˜์ž๋ฉด, ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•ญ์ƒ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ์ƒ์„ฑ์ž๋ฅผ ๊ตฌํ˜„ํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค. ๋ผ๊ณ  ์ ํ˜€์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•ญ์ƒ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ์ƒ์„ฑ์ž๋ฅผ ๊ตฌํ˜„ ์ด๋ผ๋Š” ๋ถ€๋ถ„์„ ์ฃผ๋ชฉํ•ด๋ณด์ž.

์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด ์ค‘, ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•œ๊ฐœ๋งŒ ์ƒ์„ฑํ•ด ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ด ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์„ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ฆ‰, Factory๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์ „์— ๋จผ์ € ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์— ๋Œ€ํ•ด ์ดํ•ดํ•ด์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

Singleton

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์š”์•ฝํ•˜์ž๋ฉด, ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•œ๊ฐœ๋งŒ ์กด์žฌํ•˜๋„๋ก ํ•˜๋Š” ํŒจํ„ด์„ ๋งํ•œ๋‹ค.

์—ฌ๋Ÿฌ๋ฒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ ์ธก๋ฉด์—์„œ ์ด์ ์ด ์žˆ์œผ๋ฉฐ, ์•ฑ ์ „์ฒด์—์„œ ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ• ์ˆ˜ ์žˆ๊ธฐ์—, ์„ค์ •์ด๋‚˜ DB ์ธ์Šคํ„ด์Šค ๋“ฑ์— ์‚ฌ์šฉ๋œ๋‹ค.

class Singleton {
  // ์œ ์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ €์žฅํ•˜๋Š” static ๋ณ€์ˆ˜
  static final Singleton _instance = Singleton._internal();

  // Private ์ƒ์„ฑ์ž (._)
  Singleton._internal();

  // ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” Getter -> ์™ธ๋ถ€์—์„œ instance๋กœ ์ธ์Šคํ„ด์Šค ์ ‘๊ทผ ํ—ˆ์šฉ
  static Singleton get instance => _instance;
  
  void someMethod() {
    print("Singleton Instance Method Called");
  }
}

void main() {
  var obj1 = Singleton.instance;
  var obj2 = Singleton.instance;

  print(obj1 == obj2); // true
  obj1.someMethod();   // "Singleton Instance Method Called"
}

์œ„ ์ฝ”๋“œ๋Š” ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ์ด๋‹ค. ์ „์ฒด์ ์ธ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž๋ฉด

  • static ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด Singleton์ด๋ผ๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ €์žฅ๋  ๋ณ€์ˆ˜์ธ _instance๋ฅผ ์„ ์–ธํ•œ๋‹ค.

static : ๊ฐ์ฒด๋ฅผ ์ •์ ์œผ๋กœ ์„ ์–ธํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋กœ, ๋ผ์ดํ”„์‚ฌ์ดํด๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ณ ์ •๋œ๋‹ค.

  • Singleton._internal() ๋ฅผ ์‚ฌ์šฉํ•ด private ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ด ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋ ์ˆ˜ ์—†๋„๋ก ํ•œ๋‹ค.

  • ์™ธ๋ถ€์—์„œ๋„ private ์ƒ์„ฑ์ž๋กœ ์ธํ•ด ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผ์€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ, getter๋ฅผ ์‚ฌ์šฉํ•ด ์™ธ๋ถ€ ์ ‘๊ทผ์„ ํ—ˆ์šฉ์‹œํ‚จ๋‹ค.

์˜ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š” ์ฝ”๋“œ์ด๋‹ค.

์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœ๋˜๋”๋ผ๋„, ์‹ค์ œ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋Š” 1๊ฐœ์ด๊ณ , ์ตœ์ดˆ ์ƒ์„ฑ๋œ ์ดํ›„์— ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์ตœ์ดˆ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•ด, ๋ถˆํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

Factory

Factory ํ‚ค์›Œ๋“œ (์ •ํ™•ํ•˜๊ฒŒ๋Š” Factory ์ƒ์„ฑ์ž์ด๋‹ค.) ๋Š” ์œ„์ฒ˜๋Ÿผ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ๊ตฌํ˜„ํ• ๋•Œ ์กฐ๊ธˆ๋” ์†์‰ฝ๊ฒŒ ํ• ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ‚ค์›Œ๋“œ์ด๋‹ค. ์—ญ์‹œ๋‚˜ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด์ž.

  class Singleton {
    static final Singleton _instance = Singleton._internal();

    factory Singleton() {
      return _instance;
    }

    Singleton._internal();

    void someMethod() {
      print("This is a singleton method.");
    }
  }

์‹ฑ๊ธ€ํ†ค์„ ์‚ดํŽด๋ณผ๋•Œ ์ž‘์„ฑํ•œ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ factory๋ฅผ ์‚ฌ์šฉํ•ด ์žฌ ์ž‘์„ฑํ•œ ์˜ˆ์‹œ์ด๋‹ค. ๊ธฐ์กด์˜ getter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์ด ์‚ฌ๋ผ์ง€๊ณ  factory ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.

  • static ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด Singleton์ด๋ผ๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ €์žฅ๋  ๋ณ€์ˆ˜์ธ _instance๋ฅผ ์„ ์–ธํ•œ๋‹ค.

  • Singleton._internal() ๋ฅผ ์‚ฌ์šฉํ•ด private ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ด ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋ ์ˆ˜ ์—†๋„๋ก ํ•œ๋‹ค.

  • Factory ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•ด _instance๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Factory๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ๋ฆฌํ„ด ํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์ด๋‹ค. ๋”ฐ๋ผ์„œ, getter๋ฅผ ์‚ฌ์šฉํ•ด Singleton.instance ์ฒ˜๋Ÿผ ์™ธ๋ถ€์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ์ ‘๊ทผํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

์—ฌ๊ธฐ์„œ ์ฐฉ๊ฐํ•˜๊ธฐ ์‰ฌ์šด ๋ถ€๋ถ„์ด ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด == Factory๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, Factory๋Š” ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ ๋˜๋Š” ์ƒ์„ฑ์ž์ผ ๋ฟ์ด๋‹ค.

Last updated