Skip to content

grumpy-sw/Design-Pattern-Practice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

11 Commits
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Design-Pattern-Practice

Strategy Pattern(์ „๋žต ํŒจํ„ด)

์ „๋žต ํŒจํ„ด์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด. ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ตฐ(์ง‘ํ•ฉ)์„ ์ •์˜ํ•˜๊ณ  ์บก์Аํ™”ํ•ด์„œ ๊ฐ๊ฐ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ฌถ์–ด ์บก์Аํ™”ํ•˜๊ณ , ์ด๋“ค์„ ๊ต์ฒดํ•˜๋ฉด์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด์„ ์˜๋ฏธํ•œ๋‹ค.

์Šคํฌ๋ฆฐ์ƒท 2022-11-15 ์˜คํ›„ 2 14 04

์˜ค๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฒŒ์ž„์˜ ์˜ค๋ฆฌ ๊ตฌํ˜„ ์˜ˆ์‹œ. ๊ธฐ์กด ์˜ค๋ฆฌ๋“ค ์ค‘์—์„œ ์ผ๋ถ€ ์˜ค๋ฆฌ์— ๋‚˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์ƒ์† ๋Œ€์‹  ์˜ค๋ฆฌ์˜ ๊ธฐ๋Šฅ๋“ค์„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ผ๊ณ  ํ•˜๊ณ , ์ด๋ฅผ ์ „๋žต(Strategy)์ด๋ผ๊ณ  ๋ฌถ์–ด ํ•„์š”์— ๋”ฐ๋ผ ์ฃผ์ž…์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ•œ๋‹ค. - ์ถœ์ฒ˜: ํ—ค๋“œ ํผ์ŠคํŠธ ๋””์ž์ธ ํŒจํ„ด

์ „๋žต ํŒจํ„ด์€ ๋Ÿฐํƒ€์ž„์—์„œ ์ „๋žต์„ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„์Šทํ•œ ๋ชฉ์ ์„ ๊ฐ€์ง€๋Š” ์—ฌ๋Ÿฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. ๋˜๋Š” ๋น„์Šทํ•˜์ง€๋งŒ ๊ฐ์ž ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. (์˜ˆ - ์ž๋™์ฐจ ๊ฒฝ๋กœ, ๋„๋ณด ๊ฒฝ๋กœ, ์ž์ „๊ฑฐ ๊ฒฝ๋กœ๋ฅผ ๊ฐ๊ฐ ์•Œ๋ ค์ฃผ๋Š” ๋‚ด๋น„๊ฒŒ์ด์…˜)

์ „๋žต ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•ด์„œ ๋…๋ฆฝ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™์„ ์ค€์ˆ˜ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ ๊ธฐ๋Šฅ ํ™•์žฅ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Observer Pattern(์˜ต์ €๋ฒ„ ํŒจํ„ด)

์˜ต์ €๋ฒ„ ํŒจํ„ด์€ ํ–‰๋™ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ A ๊ฐ์ฒด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ A๋ฅผ ๊ด€์ฐฐํ•˜๊ณ  ์žˆ๋Š” B์—๊ฒŒ ์•Œ๋ฆฌ๋Š” ํŒจํ„ด์„ ์˜๋ฏธํ•œ๋‹ค.

  • Subject: ๊ด€์ฐฐ ๋‹นํ•˜๋Š” ๊ฐ์ฒด๋กœ, ์–ด๋– ํ•œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฐ์ฒด์ด๋‹ค.
  • Observer: Subject๋ฅผ ๊ด€์ฐฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋กœ, Subject๊ฐ€ ๋ฐœ์ƒ์‹œํ‚จ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ํŠน์ • ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์˜ต์ €๋ฒ„ ํŒจํ„ด์€ Subject์™€ Observer์‚ฌ์ด์˜ ๋А์Šจํ•œ ์—ฐ๊ฒฐ ๊ตฌ์„ฑ์— ๋ชฉ์ ์ด ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Subject๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ๋‹ค๋ฉด? Subject์˜ ๊ตฌ๋…์ž๋กœ Observer๋ฅผ ์ถ”๊ฐ€ํ•  ๋ฟ, Observer์—๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†๋‹ค.

๋˜ํ•œ ๋А์Šจํ•œ ์—ฐ๊ฒฐ์— ๋”ฐ๋ผ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„์ง€๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™ ์ค‘ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™๊ณผ ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™์„ ์ค€์ˆ˜ํ•˜๊ฒŒ ๋œ๋‹ค.

Publisher-Subscriber Pattern(๋ฐœํ–‰ ๊ตฌ๋… ํŒจํ„ด)

๋ฐœํ–‰ ๊ตฌ๋… ํŒจํ„ด์€ ์˜ต์ €๋ฒ„ ํŒจํ„ด๊ณผ ๋™์ผํ•˜๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” Subject(=Publisher)์™€ ๊ทธ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ธฐ์œ„ํ•ด Subject๋ฅผ ๊ด€์ฐฐํ•˜๋Š” Observer(Subscriber)๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋‘˜ ์‚ฌ์ด์˜ ์ค‘๊ฐ„์— ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋˜ ํ•˜๋‚˜์˜ ๊ณ„์ธต(๋ฏธ๋“ค์›จ์–ด)์ด ์กด์žฌํ•œ๋‹ค.

๋ฐœํ–‰ ๊ตฌ๋… ํŒจํ„ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์ด ์กด์žฌํ•œ๋‹ค.

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

์˜ต์ €๋ฒ„ ํŒจํ„ด๊ณผ์˜ ์ฐจ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ์˜ต์ €๋ฒ„ ํŒจํ„ด์€ Observer์™€ Subject ๊ฐ„ ์„œ๋กœ๋ฅผ ์•Œ๊ณ  ์žˆ์œผ๋‚˜, ๋ฐœํ–‰ ๊ตฌ๋… ํŒจํ„ด์—์„œ๋Š” ์„œ๋กœ๋ฅผ ๋ชฐ๋ผ๋„ ์ƒ๊ด€์—†๋‹ค.

    ์˜ต์ €๋ฒ„ ํŒจํ„ด์€ ๋‘ ๊ฐ์ฒด๊ฐ„์˜ ์ง์ ‘์ ์ธ ์†Œํ†ต์ด ์ด๋ฃจ์–ด์ ธ์•ผ ํ•œ๋‹ค. (Subject์—์„œ Observer์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ)

    ๋ฐ˜๋ฉด ๋ฐœํ–‰ ๊ตฌ๋… ํŒจํ„ด์€ Publisher ๊ฐ์ฒด์™€ Subscriber ๊ฐ์ฒด ์‚ฌ์ด์— ์ง์ ‘์ ์ธ ์†Œํ†ต์„ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ์†Œํ†ต์˜ ์—ญํ• ์„ Event Channel์ธ ์ œ 3์ž๊ฐ€ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  2. ๋ฐœํ–‰ ๊ตฌ๋… ํŒจํ„ด์ด ์˜ต์ €๋ฒ„ ํŒจํ„ด๋ณด๋‹ค ๋” ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

    1์˜ ๋‚ด์šฉ์—์„œ ์‚ดํŽด๋ดค๋“ฏ์ด, ์„œ๋กœ์˜ ์กด์žฌ๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋‘˜ ์‚ฌ์ด์— ๋”์šฑ ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

    ์˜ต์ €๋ฒ„ ํŒจํ„ด๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ฐœํ–‰ ๊ตฌ๋… ํŒจํ„ด์—์„œ๋Š” ๊ตฌ๋…, ์ด๋ฒคํŠธ ์ „๋‹ฌ ๋“ฑ ๋ชจ๋‘๋ฅผ ์ค‘๊ฐ„ ๊ณ„์ธต์— ์œ„์ž„ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋”์šฑ ๋ถ„๋ฆฌ๋œ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

  3. ์˜ต์ €๋ฒ„ ํŒจํ„ด์€ ์ฃผ๋กœ ๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ๋ฐœํ–‰ ๊ตฌ๋… ํŒจํ„ด์€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

    ๋ฐœํ–‰๊ตฌ๋… ํŒจํ„ด์—์„œ๋Š” Publisher, Subscriber ์‚ฌ์ด์˜ ์ค‘๊ฐ„ ๋ธŒ๋กœ์ปค์—๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ๋˜์ง€๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ์ž‘์—…์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ

Mediator Pattern(์ค‘์žฌ์ž ํŒจํ„ด)

์ค‘์žฌ์ž ํŒจํ„ด์€ ํ–‰๋™ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ ๊ฐ์ฒด ๊ฐ„ ๋ณต์žกํ•œ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด์ด๋‹ค. ๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ ๋กœ์ง์„ ์บก์Аํ™”ํ•˜์—ฌ Mediator์—๊ฒŒ ๋งก๊น€์œผ๋กœ์จ ์ƒํ˜ธ ์ž‘์šฉ ๋กœ์ง์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์ƒํ˜ธ ์ž‘์šฉ ์ฃผ์ฒด์ธ ๋‘ ๊ฐ์ฒด ์‚ฌ์ด์˜ ์ข…์†์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

  • Mediator: ๊ฐ์ฒด๋“ค๊ณผ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์ƒํ˜ธ ์ž‘์šฉ์— ๋Œ€ํ•œ ๋กœ์ง์„ ์ค‘์•™ ์ œ์–ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด
  • Component(Collague): Mediator ๊ฐ์ฒด์— ์˜ํ•ด ์ค‘์žฌ๋˜๋Š” ํด๋ž˜์Šค(Object)

ํ•˜๋‚˜์˜ ๊ฐ์ฒด์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ์— ๋Œ€ํ•˜์—ฌ ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ์‘๋‹ต์„ ํ•  ๋•Œ ์ค‘์žฌ์ž ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๋•Œ ๊ฐ์ฒด๋“ค์€ ์„œ๋กœ ๋…๋ฆฝ์ ์ด๊ณ  ์ƒํ˜ธ ์ž‘์šฉ์€ Mediator ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ํ•œ๋‹ค.

์ค‘์žฌ์ž ํŒจํ„ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.

์žฅ์ :

  • ์ƒํ˜ธ ์ž‘์šฉ์˜ ๋กœ์ง์ด Mediator์—๊ฒŒ ์ค‘์•™ ์ง‘์ค‘ ์ œ์–ด๋œ๋‹ค.
  • ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ ์ค€์ˆ˜: Component ์ž์ฒด์˜ ์ž‘์—…๊ณผ ๋‹ค๋ฅธ ๊ฐ์ฒด์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฑ…์ž„์ด ๋ถ„๋ฆฌ๋˜์–ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฝ๋‹ค.
  • ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™ ์ค€์ˆ˜: ๊ฐ์ฒด๋“ค์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ Mediator์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ๋ฐ˜๋Œ€๋„ ์„ฑ๋ฆฝํ•œ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ์˜ component ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ :

  • ์‹œ๊ฐ„์ด ์ง€๋‚˜๊ณ  ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๋ฉด Mediator ๊ฐ์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ด ๋ณต์žกํ•œ ๊ตฌ์กฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages