refernece ๐
์ฑ
์ ์ฐ์ ํจํด(Chain Of Responsibility Pattern, COR)
ํด๋ผ์ด์ดํธ์ ์์ฒญ์ ๋ํ ์ธ์ธํ ์ฒ๋ฆฌ๋ฅผ ํ๋์ ๊ฐ์ฒด๊ฐ ๋ชฝ๋
ํ๋ ๊ฒ์ด ์๋, ์ฌ๋ฌ๊ฐ์์ฒ๋ฆฌ ๊ฐ์ฒด๋ค๋ก ๋๋๊ณ , ์ด๋ค์์ฌ์ฌ(chain)์ฒ๋ผ ์ฐ๊ฒฐํด ์งํฉ ์์์ ์ฐ์์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ํ๋ ํจํด์ด๋ค.์ด๋ฌํ ์ฒ๋ฆฌ ๊ฐ์ฒด๋ค์ํธ๋ค๋ฌ(handler)๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ์์ฒญ์ ๋ฐ์ผ๋ฉด ๊ฐ ํธ๋ค๋ฌ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋์ง, ์์ผ๋ฉด ์ฒด์ธ์ ๋ค์ ํธ๋ค๋ฌ๋ก ์ฒ๋ฆฌ์ ๋ํ ์ฑ
์์ ์ ๊ฐํ๋ค. ํ๋ง๋๋ก ์ฑ
์ ์ฐ์๋ผ๋ ๋ง์ ์์ฒญ์ ๋ํ ์ฑ
์์ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ ๋๊ธด๋ค๋ ์๋ฆฌ์ด๋ค. ๋ ๋๊ธด๋ค๊ณ ํ๋๊น ๋ถ์ ์ ์ธ ์๋ฏธ๋ก ๋ค๋ฆด์๋ ์๊ฒ ์ง๋ง, ์ด๋ฌํ ์ฒด์ธ ๊ตฌ์ฑ์ ํ๋์ ๊ฐ์ฒด์ ์ฒ๋ฆฌ์ ๋ํ ์ฑ
์์ ์์ฒญ์ ๋ณด๋ด๋ ์ชฝ(sender)๊ณผ ์์ฒญ์ ์ฒ๋ฆฌํ๋(receiver) ์ชฝ์ ๋ถ๋ฆฌํ์ฌ ๊ฐ ๊ฐ์ฒด๋ฅผ ๋ถํ์ผ๋ก ๋
๋ฆฝ์ํค๊ณ ๊ฒฐํฉ๋๋ฅผ ๋์จํ๊ฒ ๋ง๋ค๋ฉฐ, ์ํฉ์ ๋ฐ๋ผ์ ์์ฒญ์ ์ฒ๋ฆฌํ ๊ฐ์ฒด๊ฐ ๋ณํ๋ ํ๋ก๊ทธ๋จ์๋ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๋ค๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์๋ค. ํนํ๋ ์ค์ฒฉ if-else๋ฌธ๋ค์ ์ต์ ํํ๋๋ฐ ์์ด ์ค๋ฌด์์๋ ๋ง์ด ์ ์ฉ๋๋ ํจํด์ค ํ๋์ด๊ธฐ๋ ํ๋ค.
โ
ย ์ฌ์ฉ์๊ธฐ
- ํน์ ์์ฒญ์ 2๊ฐ ์ด์์ ์ฌ๋ฌ ๊ฐ์ฒด์์ ํ๋ณํ๊ณ ์ฒ๋ฆฌํด์ผ ํ ๋
- ํน์ ์์๋ก ์ฌ๋ฌ ํธ๋ค๋ฌ๋ฅผ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ
- ํ๋ก๊ทธ๋จ์ด ๋ค์ํ ๋ฐฉ์๊ณผ ์ข
๋ฅ์ ์์ฒญ์ ์ฒ๋ฆฌํ ๊ฒ์ผ๋ก ์์๋์ง๋ง ์ ํํ ์์ฒญ ์ ํ๊ณผ ์์๋ฅผ ๋ฏธ๋ฆฌ ์ ์ ์๋ ๊ฒฝ์ฐ โ ์ด๊ฒ ์ ๋ง ์ค์ํ ๊ฒ ๊ฐ๋ค.
- ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฐ์ฒด ์งํฉ์ด ๋์ ์ผ๋ก ์ ์๋์ด์ผ ํ ๋ (์ฒด์ธ ์ฐ๊ฒฐ์ ๋ฐํ์์์ ๋์ ์ผ๋ก ์ค์ )
โ
ย ์ฅ์
- ํน์ ์์ฒญ์ 2๊ฐ ์ด์์ ์ฌ๋ฌ ๊ฐ์ฒด์์ ํ๋ณํ๊ณ ์ฒ๋ฆฌํด์ผ ํ ๋
- ํน์ ์์๋ก ์ฌ๋ฌ ํธ๋ค๋ฌ๋ฅผ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ
- ํ๋ก๊ทธ๋จ์ด ๋ค์ํ ๋ฐฉ์๊ณผ ์ข
๋ฅ์ ์์ฒญ์ ์ฒ๋ฆฌํ ๊ฒ์ผ๋ก ์์๋์ง๋ง ์ ํํ ์์ฒญ ์ ํ๊ณผ ์์๋ฅผ ๋ฏธ๋ฆฌ ์ ์ ์๋ ๊ฒฝ์ฐ
- ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฐ์ฒด ์งํฉ์ด ๋์ ์ผ๋ก ์ ์๋์ด์ผ ํ ๋ (์ฒด์ธ ์ฐ๊ฒฐ์ ๋ฐํ์์์ ๋์ ์ผ๋ก ์ค์ )
- ํด๋ผ์ด์ธํธ๋ ์ฒ๋ฆฌ ๊ฐ์ฒด์ ์ฒด์ธ ์งํฉ ๋ด๋ถ์ ๊ตฌ์กฐ๋ฅผ ์ ํ์๊ฐ ์๋ค.
- ๊ฐ๊ฐ์ ์ฒด์ธ์ ์์ ์ด ํด์ผํ๋ ์ผ๋ง ํ๊ธฐ ๋๋ฌธ์ย ์๋ก์ด ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๊ฐ์ฒด ์์ฑ์ดย ํธ๋ฆฌํด์ง๋ค.
- ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ํธ๋ค๋ฌ๋ฅผ ์ฒด์ธ์ ๋์ ์ผ๋ก ์ถ๊ฐํ๊ฑฐ๋ ์ฒ๋ฆฌ ์์๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ญ์ ํ ์ ์์ด ์ ์ฐํด์ง๋ค
- ์์ฒญ์ ํธ์ถ์(invoker)์ ์์ ์(receiver) ๋ถ๋ฆฌ์ํฌ ์ ์๋ค.
- ์์ฒญ์ ํ๋ ์ชฝ๊ณผ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ชฝ์ ๋์ปคํ๋ง ์์ผ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ค
- ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋๋๋ผ๋ ํธ์ถ์ ์ฝ๋๋ ๋ณ๊ฒฝ๋์ง ์๋๋ค.