์น ๊ธฐ๋ฐ ๊ทธ๋ํฝ ํธ์ง๊ธฐ์ ๊ตฌ์กฐ์ 7๊ฐ์ง ๋์์ธ ํจํด
์น ๊ธฐ๋ฐ ๊ทธ๋ํฝ ํธ์ง๊ธฐ์ ๊ตฌ์กฐ์ 7๊ฐ์ง ๋์์ธ ํจํด ๊ด๋ จ
[FEConf2023์์ ๋ฐํํ ์น ๊ธฐ๋ฐ ๊ทธ๋ํฝ ํธ์ง๊ธฐ์ ๊ตฌ์กฐ์ 7๊ฐ์ง ๋์์ธ ํจํด][1]๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ๋ฐํ ๋ด์ฉ์ 2ํ๋ก ๋๋์ด ๋ฐํํฉ๋๋ค. 1ํ์์๋ ์น ๊ธฐ๋ฐ ๊ทธ๋ํฝ ํธ์ง๊ธฐ์ ๊ธฐ์ด์ ์ธ ์ํคํ ์ฒ์ ์ด ๊ณผ์ ์ ๋ น์์๋ ๋์์ธ ํจํด์ ๋ํด ์ดํด๋ด ๋๋ค. 2ํ์์๋ ์ค์ ๊ทธ๋ํฝ ํธ์ง๊ธฐ๋ฅผ ๊ตฌํํ๊ณ ๋ฌธ์ ์ ์ ์์ ํด ๋ณด๋ฉด์ ๋์์ธ ํจํด์ ๋ํด ๊น๊ฒ ์์๋ด ๋๋ค. ๋ณธ๋ฌธ์ ์ฝ์ ๋ ์ด๋ฏธ์ง์ ์ถ์ฒ๋ ๋ชจ๋ ์ด ์ฝํ ์ธ ์ ๊ฐ์ ์ ๋ชฉ์ ๋ฐํ ์๋ฃ๋ก, ๋ฐ๋ก ์ถ์ฒ๋ฅผ ํ๊ธฐํ์ง ์์์ต๋๋ค. ๋ฐํ ์๋ฃ๋ FEConf2023 ํํ์ด์ง์์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
์๋ ํ์ธ์. ์ ๋ ๋ค์ด๋ฒ์์ ํ๋ซํผ ๊ฐ๋ฐ์ ์ฐธ์ฌํ๊ณ ์๋ ํ๋ก ํธ ์์ง๋์ด ์ฌํฅ์ด์ ๋๋ค. ์ด๋ฒ ๊ธ์์๋ ์น ๊ธฐ๋ฐ ๊ทธ๋ํฝ ํธ์ง๊ธฐ์ ๋์์ธ ํจํด์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
์ ๋ ์ด์ ํ์ฌ์ ํ์ฌ ํ์ฌ์์ 5๋ฒ์ ๊ทธ๋ํฝ ํธ์ง๊ธฐ ๊ฐ๋ฐ ํ๋ก์ ํธ์ ์ฐธ์ฌํ์ต๋๋ค. ์ ๊ฐ ์ฐธ์ฌํ ํ๋ก์ ํธ๋ UI ํ๋กํ ํ์ดํ ๋๊ตฌ, ๊ทธ๋ํฝ ์๋ํฐ ํ๋ ์์ํฌ, ๋นํธ๋งต ์ด๋ฏธ์ง ํธ์ง๊ธฐ ๊ทธ๋ฆฌ๊ณ ๋จธ์ ๋ฌ๋ ํ์ต ๋ฐ์ดํฐ ์์ฑ์ ์ํ ์ด๋ ธํ ์ด์ ํด์ ๋๋ค. ์ ๊ฐ ์งํํ 5๊ฐ์ง์ ํ๋ก์ ํธ๋ค์ ํ ๋ฟ๋ฆฌ์์ ํ์๋ ํ๋ก์ ํธ๋ค์ ๋๋ค. ๋ฐ๋ก Eclipse(์ดํ ์ดํด๋ฆฝ์ค)์ ํ์ ํ๋ก์ ํธ์ธ GEF์ ๋๋ค.
GEF๋ 2000๋ ๋ ์ด๋ฐ์ ์์๋ ์ญ์ฌ๊ฐ ์ค๋๋ ํ๋ก์ ํธ์ ๋๋ค. ์ด ํ๋ก์ ํธ๋ ์ดํด๋ฆฝ์ค์ ํตํฉ๋์ด ์๊ณ , ์ดํด๋ฆฝ์ค์ ๊ฐ์ข ๋ชจ๋ธ์ GUI๋ฅผ ํ์ฉํด ํธ์งํ ์ ์๋๋ก ๋์์ค๋๋ค. ๋น์ ์ ํฌ ํ์ GEF ์ํคํ ์ฒ๋ฅผ ์ธ๋ถ๋ก ์ฎ๊ฒจ์ ํ๋ก์ ํธ๋ฅผ ์ํํ๋๋ฐ, ๊ทธ ๊ณผ์ ์์ ๊ทธ๋ํฝ ํธ์ง๊ธฐ๊ฐ ๋งค์ฐ ๋ค์ํ ๋์์ธ ํจํด์ ํ๊ณ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์ต๋๋ค. ์น์ ์ํ๊ณ๊ฐ ๋ณํํ๋ฉด์ ์ด์ ๋ง๊ฒ ๋ณํํ๊ณ ๊ฐ์ ํ๋ ๊ณผ์ ์ ์งํํ์ง๋ง, ์ฌ์ ํ ๊ทธ ์์ ๋ด๊ฒจ์๋ ๋์์ธ ํจํด์ ์ ํจํ์ต๋๋ค.
์ค๋ฌด ๊ด์ ์์ ๋์์ธ ํจํด์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ ๊ฐ์ ๋ง์ ๋ถ๋ค์๊ฒ ์๊ฐํ๊ณ ์ ์ด ๋ด์ฉ์ ๊ณต์ ํฉ๋๋ค. ์ด ๋ด์ฉ์ด ์น ๊ธฐ๋ฐ ๊ทธ๋ํฝ ํธ์ง๊ธฐ ๊ฐ๋ฐ ํ๋ก์ ํธ๋ฅผ ์ํ ์์ ์์ด๋์ด๊ฐ ๋ ์ ์๊ธฐ๋ฅผ ๊ธฐ๋ํ๊ณ ๋์์ธ ํจํด์ ์ค๋ฌด์ ์ ์ฉํ๊ณ ์ถ์ ๋ถ๋คํํ ์ข์ ๊ณ๊ธฐ๊ฐ ๋ ์ ์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค.
์ด๋ฒ ๊ธ์์ ์ดํด๋ณผ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์น ๊ธฐ๋ฐ ๊ทธ๋ํฝ ํธ์ง๊ธฐ์ ๊ธฐ์ด์ ์ธ ์ํคํ ์ฒ
- ์ด ๊ณผ์ ์ ๋ น์์๋ ๋์์ธ ํจํด๊ณผ ๋์์ธ ํจํด์ด ํด๊ฒฐํด ์ฃผ๋ ๊ฒ
๋์์ธ ํจํด ๋์๋ณด๊ธฐ
ํจํด์ด๋ ์์, ๋ฌด๋ฌ, ๊ฒฌ๋ณธ ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ฒ์ด๋ผ๋ ๋ป์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ํ๋์ค์ด โํํตโ์์ ์ ๋๋ ๋ง๋ก ๋ํ์ด๋๋ ์ฌ๊ฑด์ด๋ ๋ฌผ์ฒด์ ํํ๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ฒ์ง, ๊ฑด์ถ ๋ฑ์์์ ๊ธฐํํ์ ์ธ ๋ฐ๋ณต์ด ์ฌ์ด ์๊ฐ ๋ ์ ์์ต๋๋ค.
๊ฑด์ถ๊ณผ ํจํด
์์ง๋์ด๋ง ๊ด์ ์์ ํจํด์ด๋ ๊ฐ๋ ์ ๊ฑด์ถ๊ฐ ํฌ๋ฆฌ์คํ ํผ ์๋ ์ฐ๋๊ฐ ์งํํ โํจํด ๋ญ๊ท์ง - ๋์, ๊ฑด์ถ, ์๊ณต'์ด๋ผ๋ ์ฑ ์์ ์ฒ์ ์๊ฐ๋์์ต๋๋ค. ์ด ์ฑ ์ ์ฐ๋ฆฌ๊ฐ ์ด์๊ฐ๋ ํ๊ฒฝ์ ๊ตฌ์ฑํ ๋ ๊ทธ ๊ตฌ์ฑ ์์๋ค์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ๊ธฐ ์ํ 253๊ฐ์ง ํจํด์ ์๊ฐํ๊ณ ์์ต๋๋ค. ์๋ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋, ํ ํด๋ก์ง, ๋คํธ์ํฌ ๋ฑ์ ์ต์ํ ๊ฐ๋ ์ด์ง ์๋์?
์ฐ๋ฆฌ๊ฐ ์ฝ๋์์ ๋์์ธ ํจํด์ ๋ฐ๊ฒฌํ ๋์ฒ๋ผ ์๊ฐ๋ ๊ณต๊ฐ์ด๋ ๊ฑด์ถ๋ฌผ์์ ๋ฐ๋ณต๋๋ ์์๋ฅผ ๊ด์ฐฐํ๊ณ ๋ค๋ฅธ ์์๋ค๊ณผ์ ๊ด๋ จ์ฑ์ ๋ํด ๊ณ ์ฐฐํ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์์ฃผ ์ฌ์ฉํ๋ โํฌํธ'์ด๋ผ๋ ์ฉ์ด๊ฐ ๊ฑด์ถ์์ ์ ๋๋ ๋ง์ธ ๊ฒ์ ์์๋์? โ๊ฑด์ถ์ ๋ค๋ฐ๊พผ ์์ด๋์ด 100โ์ด๋ผ๋ ์ฑ ์ ๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ์์ฃผ ์ฌ์ฉํ๋ ์ฉ์ด๋ค์ด ๋ง์ด ๋ณด์ ๋๋ค.
๋ชจ๋, ๋ ์ด์ด, ์ปดํฌ์ง์ , ์คํ์ผ, ํ๋ซํผ, ์ปจํ ์คํธ ๋ฑ ๊ทธ ์๋ฏธ๋ ์ถ์์ ์ธ ๋งฅ๋ฝ์์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ์ฉ์ด์ ๊ต์ฅํ ์ ์ฌํฉ๋๋ค. ์ด์ฒ๋ผ ๊ฑด์ถ๊ณผ ํ๋ก๊ทธ๋๋ฐ์ ๋น์ทํ ๋งฅ๋ฝ์ ๋ง์ด ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฐ ์๋ฏธ์์ ๊ฑด์ถ๊ฐ๊ฐ ๋ฌผ๋ฆฌ์ ๊ณต๊ฐ์ ์ค๊ณํ๋ ์ฌ๋์ด๋ผ๋ฉด ํ๋ก๊ทธ๋๋จธ, ํนํ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค์ ์ ์ ์ ๊ณต๊ฐ์ ์ค๊ณํ๋ ๊ฑด์ถ๊ฐ๊ฐ ์๋๊น๋ผ๋ ์๊ฐ์ด ๋ญ๋๋ค.
ํ๋ก๊ทธ๋๋ฐ๊ณผ ํจํด
์๋์ ์ฑ ์ ์ฌ๋ฌ๋ถ๋ค์ด ์ ์๋ โ๋์์ธ ํจํด'์ด๋ผ๋ ์ฑ ์ ๋๋ค. ์ดํด๋ฆฝ์ค์ ๋น์ฅฌ์ผ์คํ๋์ค ์ฝ๋์ ์ค๊ณ์์ด๊ธฐ๋ ํ ์๋ฆญ ๊ฐ๋ง, ์กด ๋ธ๋ผ์๋์ค, ๋ํ ์กด์จ, ๋ฆฌ์ฒ๋ ํฌ๋ฆ์ ์ํด 1994๋ ๋ฐ๊ฐ๋์์ต๋๋ค. ์ด ์ฑ ์ ์ํด ํ๋ก๊ทธ๋๋ฐ ์ค๊ณ์์์ ํจํด์ ๋ํ ๊ฐ๋ ์ด ๋๋ฆฌ ์๋ ค์ก์ต๋๋ค.
์ด ์ฑ ์ ์ํํธ์จ์ด์ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ค๊ณํ๊ธฐ ์ํ 23๊ฐ์ง ํจํด์ ์๊ฐํ๊ณ ์๊ณ , ์ด ์ฑ ์ ํตํด ํจํด ์ ๊ทผ๋ฒ์ด ์ธ๊ธฐ๋ฅผ ๋๋ฉฐ ์ดํ์ ๋ค์ํ ํจํด๋ค์ด ๋ฐ๊ฒฌ๋๊ณ ๊ณ ์๋์์ต๋๋ค.
๋์์ธ ํจํด
๊ทธ๋ ๋ค๋ฉด ๋์์ธ ํจํด์ ์ ํํ๊ฒ ๋ฌด์์ผ๊น์? ์ํคํผ๋์์ ๋์จ ์ ์์ ๋ฐ๋ฅด๋ฉด โ์ํํธ์จ์ด ๊ฐ๋ฐ ๊ณผ์ ์์ ๋ฐ๊ฒฌ๋ ์ค๊ณ ๋ ธํ์ฐ๋ฅผ ์ถ์ ํ๊ณ ์ด๋ฆ์ ๋ถ์ฌ์ ์ฌ์ฌ์ฉํ๊ธฐ ์ข์ ํํ๋ก ์ ๋ฆฌํ ๊ฒ'์ด๋ผ๊ณ ํฉ๋๋ค. ๋ ๊ฐ๊ฒฐํ๊ฒ ํํํ๋ฉด ํน์ ์ํฉ์์ ๋ฐ๋ณต์ ์ผ๋ก ์ผ์ด๋๋ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ๋๋ค.
๋์์ธ ํจํด์ ๋ฐ๋ช ๋๊ธฐ๋ณด๋ค๋ ๊ฒฝํ์ ์ํด ๋ฐ๊ฒฌ๋ฉ๋๋ค. DRY (Do not repeat yourself)๊ฐ ์ฝ๋์ ์ฌ์ฌ์ฉ์ ์๋ฏธํ๋ ๋ฐ๋ฉด, DP (Design pattern)์ ๊ฒฝํ์ ์ฌ์ฌ์ฉ์ ์๋ฏธํฉ๋๋ค.
์ํํธ์จ์ด ๋์์ธ ํจํด์ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ฅํ ์ ์์ต๋๋ค.
- ์ํคํ ์ฒ ํจํด : MVC / PUB-SUB / DAO / DTO / Broker
- GoF (Gang of four) ํจํด : Creational / Structural / Behavioral
- Concurrency ํจํด : Event-based / Scheduler / Reactor
์ด์ธ์๋ ๋ง์ ๋์์ธ ํจํด์ด ์์ต๋๋ค. ์ค๋ ๊ธ์์๋ ์๋์ ํ์ํ 7๊ฐ์ง ํจํด์ ๋ํด ์๊ฐํฉ๋๋ค.
๋์์ธ ํจํด์ ์ฅ์
1. ์ข์ ์ค๊ณ๋ ๊ตฌํ์ ์ฝ๊ฒ ํ๋ค
์ค๊ณ ์์ด ๊ตฌํํ๋ฉด ์ฒ์์๋ ๋น ๋ฅธ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์๊ฐ์ด ๊ฐ์๋ก ๋นํจ์จ๊ณผ ๋ณต์ก๋๊ฐ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํฉ๋๋ค.
2. ํจ์จ์ ์ธ ์์ฌ์ํต ๊ฐ๋ฅ
์์คํ ์ ์ค๋ช ํ ๋ ํจํด์ ํ์ฉํด ์ค๋ช ํ๋ฉด ๊ฐ๋จํ๊ณ ์ ํํ๊ฒ ์ ๋ฌํ ์ ์์ต๋๋ค. ์คํด๋ฅผ ์ค์ด๊ณ ํจ์จ์ ์ผ๋ก ์์ ํ ์ ์์ต๋๋ค.
3. ๊ฐ์ฒด ์งํฅ ์์น์ ์ ์งํฌ ์ ์๋ค
์ํํธ์จ์ด ํ์ง์ ๊ธฐ๋ฐ์ด ๋๋ SOLID ์์น์ ๋ชฉ์ ์ ์ฌ์ฌ์ฉ์ฑ, ํ์ฅ์ฑ ๊ทธ๋ฆฌ๊ณ ๊ด๋ฆฌ์ ์ฉ์ด์ฑ์ ๋์ด๋ ๊ฒ์ธ๋ฐ, ๋์์ธ ํจํด์ ๊ธฐ๋ณธ์ ์ผ๋ก SOLID ์์น์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋์์ธ ํจํด์ ์ ์ตํ๋๋ฉด ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
4. ์ค๊ณ ์ฐ์ ์ฃผ์
๋์์ธ ํจํด์ ์ฌ๋ฌ๋ถ์ ๋จธ๋ฆฟ์์ผ๋ก ๋จผ์ ๋ค์ด๊ฐ๋๋ค. ๋ฌธ์ ๋ฅผ ๊ฐ์ง ๋๊ท๋ชจ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ ๋ ๋์์ธ ํจํด์ ์๊ณ ์์ผ๋ฉด ๋ฐ๋์งํ ํจํด์ด๋ ๊ตฌ์กฐ๋ก ์ ์ฒด ํ๋ฆ์ ์ฌ์ค๊ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
5. ํ์ด๋ ๋ฒจ ๋ทฐ
ํ์ด ๋ ๋ฒจ ๋ทฐ๋ฅผ ํตํด ํฐ ๊ทธ๋ฆผ์ ๋ณผ ์ ์์ต๋๋ค. ๋์์ธ ํจํด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ๋ณด๋ค ๋ ๋์ ๊ด์ ์ ๋ฐ๋ผ๋ณด๋ ๊ฐ๋ ์ ๋๋ค. ๋ฐ๋ผ์ ๋์์ธ ํจํด์ ๋ํ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก ํ๋ ์์ํฌ๋ ์ฝ๋ ๋ฑ์ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ๋ด๊ฒจ ์๋ ์๋๋ฅผ ๋ ๋ช ํํ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
๋์์ธ ํจํด์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ
๋์์ธ ํจํด์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง๋ก ์๊ฐํด ๋ณผ ์ ์์ต๋๋ค.
1. ์ฝ๊ฒ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ ์ ๊ณต
๋์์ธ ํจํด์ ์์น์ ์ํํธ์จ์ด์ ๋ณ๊ฒฝ๊ณผ ๊ด๋ จ์ด ๊น์ต๋๋ค. ๊ทธ๋์ ์์คํ ์ผ๋ถ๋ฅผ ์ฝ๊ฒ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
2. ์ถ์ํ์ ์์
์ฝ๊ฒ ๋ณ๊ฒฝํ๊ธฐ ์ํด์๋ ๋ณ๊ฒฝ๋๋ ๋ถ๋ถ์ ์ฒ๋ฆฌ๋ฅผ ์ ๋ฌธ๊ฐ์๊ฒ ์์ํ๋ ๋ฐฉ๋ฒ์ ์๋๋ค. ์์คํ ์์ ๋ณ๊ฒฝ๋๋ ๋ถ๋ถ์ ๋ถ๋ฆฌํด์ ์ถ์ํํ๊ณ ์ธํฐํ์ด์ค๋ฅผ ํตํด์ ์ ๋ฌธ์ฑ์ ๊ฐ์ง ๋ชจ๋์๊ฒ ์์ ์ ์์ํฉ๋๋ค.
3. ์์ ๋ณด๋ค ๊ตฌ์ฑ
๊ทธ๋ฆฌ๊ณ ์์๋ณด๋ค๋ ๊ตฌ์ฑ(์ปดํฌ์ง์ )์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ๊ทธ ์ด์ ๋ ์์์ ์ปดํ์ผ ํ์์ ๊ฒฐ์ ๋์ง๋ง ๊ตฌ์ฑ(์ปดํฌ์ง์ )์ ๋ฐํ์์ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ๋์ฑ ์ ์ฐํฉ๋๋ค. ์ด๋ฐ ์ด์ ๋ก ์๋ ๊ทธ๋ฆผ์ฒ๋ผ GoF์ ๋๋ถ๋ถ์ ํจํด์ด ๊ตฌ์ฑ(์ปดํฌ์ง์ ) ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
์ธ์ ๋์์ธ ํจํด์ ์ฌ์ฉํ๋ฉด ์ข์๊น?
ํน์ ๋ถ๋ถ์ด ๊ณ์ ๋ณ๊ฒฝ๋ ๊ฒ์ด๋ผ๊ณ ์์๋๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค. ๊ทธ๋์ ํ๋ ์์ํฌ์์ ๋์์ธ ํจํด์ด ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ํ๋ ์์ํฌ๋ ๊ธฐ๋ฐ์ด ์๊ณ ๋ณ๊ฒฝ๋๋ ๋ถ๋ถ์ ๊ต์ฒดํ๋ฉด์ ๊ฐ๋ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋์ if ๋ฌธ์ด ๊ณ์ ์์ ๋์ด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด ์ฐ์ ๊ณ ๋ คํด๋ณผ ์ ์์ต๋๋ค.
์ด๋ป๊ฒ ๋์์ธ ํจํด์ ์ฌ์ฉํ๋ฉด ์ข์๊น?
๊ฐ๋จํ๊ฒ KISS ์์น์ ๋ฐ๋ฅด๋ฉด ๋ฉ๋๋ค. ์ด ์์น์ ๋ฏธ ํด๊ตฐ์์ ๊ฐ๋ฐ๋ ์์น์ ๋๋ค. Keep it small and simple. ์ฆ, ๋์์ธ ํจํด์ ํตํด์ ๋ฌธ์ ๊ฐ ๊ฐ๋จํด์ง ๋ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ต์ ์์ต๋๋ค. ๋์์ธ ํจํด์ โ๋ฐ๋์งํ ๊ฒฝํโ์ด๊ธฐ ๋๋ฌธ์ ์ํฉ์ ๋ง๊ฒ ์ ์ฐํ๊ฒ ์ ์ฉํ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ์ ๋์์ธ ํจํด
์ด๋ฒ์๋ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ์ ๋ด๊ธด ๋์์ธ ํจํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ์ฐ์ ๋ํ์ง์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ํธ์ง ์์ ์ ๋ํด ์๊ฐํด๋ณด๊ฒ ์ต๋๋ค. ๋ํ์ง์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ์์ ์ ์๋์ ๊ฐ์ ์์๋ฅผ ๋ฐ๋ผ ์งํ๋ฉ๋๋ค.
- ์ฐํ์ ์์ง์ธ๋ค.
- ํ์ฐ์ด ๋ํ์ง์ ์ ๋ฌ๋๋ค.
- ๋ํ์ง์ ์ํ๊ฐ ๋ณํ๋ค.
๊ทธ๋ ๋ค๋ฉด ํ๋ก๊ทธ๋จ์ด ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ๊ณผ์ ์ ์ด๋จ๊น์?
- ์ ๋ ฅ ์ฅ์น๋ฅผ ์์ง์ธ๋ค.
- ์ด๋ฒคํธ๊ฐ ์ ๋ฌ๋๋ค.
- ํ๋ฉด์ ์ํ๊ฐ ๋ณํ๋ค.
์ฆ, ํธ์ง ์์ ์ ์ด๋ฒคํธ๋ฅผ ์ํ ๋ณํ๋ก ์ ํํ๋ ๊ณผ์ ์ ๋๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉ์๊ฐ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ฉด ๋ํ์ง๋ ๋ชจ๋ํฐ์ ํ๋ฉด์ด ๋ฐ๋ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ฌ์ฉ์์ ๋ฉํ ๋ชจ๋ธ์ ๋๋ค.
๋ฐ๋ผ์ ์ด ๊ณผ์ ์ ๋ค์ ์ ๋ฆฌํ๋ฉด, ํธ์ง ์์ ์ ์ด๋ฒคํธ๋ฅผ ํตํด ์ฌ์ฉ์์ ์๋์ธ ๋ฉํ ๋ชจ๋ธ์ ์ปดํจํฐ ๋ชจ๋ธ๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
MVC ํจํด
์์ ์ค๋ช ํ ๊ณผ์ ์ ์ํด ๊ณ ์๋ ๊ตฌ์กฐ๊ฐ ์์ต๋๋ค. ๋ฐ๋ก 1976๋ ์ ๋ก์ค ํ๋ก์ํ ์ฐ๊ตฌ์์์ ๋ ธ๋ฅด์จ์ด ์ปดํจํฐ ๊ณตํ์ ํธ๋ฆฌ๋ฒ ๋ฆฐ์ค์นด์ฐ๊ทธ๊ฐ ์ฐฝ์ํ MVC ํจํด์ ๋๋ค. ์ด ๋ชจ๋ธ์์ ๋ฉํ ๋ชจ๋ธ์ ๋ทฐ๊ฐ ๋ด๋นํ๊ณ ํธ์ง ์ฅ์น๋ ์ปจํธ๋กค๋ฌ๊ฐ ๋ด๋นํ๊ณ ์ปดํจํฐ ๋ชจ๋ธ์ ๋ชจ๋ธ์ด ๋ด๋นํฉ๋๋ค.
ํ๋ก์ํ ์ฐ๊ตฌ์๋ ํ์ฌ ์ฐ๋ฆฌ๊ฐ ๋๋ฆฌ๊ณ ์๋ ์๋ง์ IT ์ฅ์น๋ค์ ์ํ์ ๊ฐ๋ฐํ ๊ณณ์ ๋๋ค. ๋น์ ๊ทธ๋ ์์ดํจ๋์ ๋จผ ์กฐ์์ด๋ผ๊ณ ํ ์ ์๋ ๋ค์ด๋๋ถ์ ๊ฐ๋ฐํ๋ ํ์์ ์ผํ๊ณ ์์์ต๋๋ค. ์ด ํ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ GUI ๋ถ์ผ์ ์ ๊ตฌ์์ด๋ฉฐ ์ค๋ชฐํ ํฌ(๊ฐ์ฒด ์งํฅ ์ธ์ด์ ์์ด) ๊ฐ๋ฐ์ ์ฃผ๋ํ๋ ์จ๋ฐ ์ผ์ด๊ฐ ์ด๋๋ ํ์ด์์ต๋๋ค.
์ด ํ์ ์ฌ์ฉ์๋ค์ด GUI๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ๊ฒ ํ๊ธฐ ์ํด ๊ฐ์ ํ๋ ๋ฐ ์ง์คํ์ต๋๋ค. ์ด ๊ณผ์ ์์ ํธ๋ฆฌ๋ฒ ๋ฆฐ์ค์นด์ฐ๊ทธ๋ ํ ๊ฐ์ง๋ฅผ ๊นจ๋ซ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ก ์ฌ์ฉ์์ ๋ฉํ ๋ชจ๋ธ๊ณผ ์ปดํจํฐ์ ์ ๋ณด ์ฒ๋ฆฌ ๋ฐฉ์์ด ๋ค๋ฅด๋ค๋ ๊ฒ์ด์์ต๋๋ค.
๊ทธ๋์ ํธ๋ฆฌ๋ฒ ๋ฆฐ์ค์นด์ฐ๊ทธ๋ ๋ฉํ ๋ชจ๋ธ์ ์ปดํจํฐ ๋ชจ๋ธ๋ก ๋ณํํ๋ ๊ณผ์ ์ ์ํ ๊ตฌ์กฐ๋ก MVC๋ฅผ ๊ณ ์ํฉ๋๋ค. ์๋ ๊ทธ๋ฆผ์ ๋ฆฐ์ค์นด์ฐ๊ทธ๊ฐ MVC์ ๋ํด ์์ฑํ ๋ ผ๋ฌธ์ ์ผ๋ถ์ ๋๋ค. ์ด ๋ ผ๋ฌธ์๋ ์ด๋ฐ ๊ตฌ์ ์ด ์์ต๋๋ค. โ์ด ์ด์ผ๊ธฐ๋ ์ธ๊ฐ๊ณผ ๊ธฐ๊ณ์ ๊ฐ๊ทน์ ์ด์ด์ฃผ๋ ๊ฒ์ ํฌ์ปค์คํ๊ณ ์๋ค.โ
MVC์ ๋ณธ์ง๊ณผ MVC๊ฐ ํด๊ฒฐํ๋ ๊ฒ
๊ทธ๋ โMVC์ ๋ณธ์ง์ ์ธ ๋ชฉ์ ์ ์ฌ์ฉ์์ ์ ์ ๋ชจ๋ธ๊ณผ ์ปดํจํฐ์ ์กด์ฌํ๋ ๋์งํธ ๋ชจ๋ธ ์ฌ์ด์ ๊ฒฉ์ฐจ๋ฅผ ํด์ํ๋ ๊ฒโ, โ์ด์์ ์ธ MVC ์๋ฃจ์ ์ ๋๋ฉ์ธ ์ ๋ณด๋ฅผ ์ง์ ๋ณด๊ณ ์กฐ์ํ๋ ์ฌ์ฉ์์ ํ์์ ์ง์ํ๋ค.โ, โ์ด ๊ตฌ์กฐ๋ ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ๊ด์ ์์ ๋์ผํ ๋ชจ๋ธ์ ๋์์ ๋ณด์์ผ ํ๋ ๊ฒฝ์ฐ์๋ ์ ์ฉํ๋ค.โ๋ผ๊ณ ๋งํฉ๋๋ค.
MVC ํจํด์ ๊ด์ฌ ๋ถ๋ฆฌ
์ด ํจํด์ ํต์ฌ์ ์ญํ ์ ๋ฐ๋ผ ๋ชจ๋์ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ์ฆ, ๊ด์ฌ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํด์ MVC ํจํด์ ๋ฉํ๋ชจ๋ธ์ ์ปดํจํฐ ๋ชจ๋ธ๋ก ์ ๋ณํํ ์ ์๊ณ , MVC์ ๊ทธ ํ์ ํจํด๋ค์ด 40๋ ์ด ์ง๊ฐ ์ง๊ธ๋ ๋ค์ํ ์ํคํ ์ฒ์ ๋ฐํ์ผ๋ก ํ์ฉ๋๊ณ ์์ต๋๋ค.
ํ์ฌ์ MVC๋ ์ฃผ์ด์ง ์ํฉ์ ๋ง๊ฒ ์ฝ๊ฐ์ฉ ๋ณํ๋ ํํ๋ก ๊ตฌ์ฑ๋์ง๋ง ํ์ค์ ์ธ ๊ตฌ์ฑ์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค. ์ปจํธ๋กค๋ฌ๊ฐ ๋ทฐ๋ฅผ ํตํด์ ์ฌ์ฉ์ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌ๋ฐ์ผ๋ฉด ๋ชจ๋ธ์ ์์ ํ๊ธฐ ์ํ ๋ช ๋ น์ ์์ฑํ๊ณ ์ ๋ฌํฉ๋๋ค. ๋ชจ๋ธ์ด ์์ ๋๋ฉด ๋ณ๊ฒฝ์ ํ ๋๋ก ๋ทฐ๊ฐ ๊ฐฑ์ ๋ฉ๋๋ค. ์ด MVC ํจํด์ ์ฌ์ค ์ฌ๋ฌ ํจํด์ด ๊ฒฐํฉ๋ ๋ณตํฉ ํจํด์ ๋๋ค.
๋ชจ๋ธ์ ์ ํ์ ์ธ ์ต์ ๋ฒ ํจํด์ ์๋ธ์ ํธ์ ์์ ๋๋ค. ๋ทฐ๋ ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ์ ๋ณ๊ฒฝ ์ํ์ ๊ท๋ฅผ ๊ธฐ์ธ์ด๊ณ ์์ง๋ง ๋ชจ๋ธ์ ์ด ๋์ ์กด์ฌ๋ฅผ ๋ชฐ๋ผ์ผ ํฉ๋๋ค. ๋ํ ๋ฐํ์์ ๋ทฐ๋ ์ปจํธ๋กค๋ฌ๊ฐ ๋ผ์ดํ ์ฌ์ดํด์ ์ํด์ ์ฌ๋ผ์ง ๋ ๊ตฌ๋ ์ด ํด์ง๋ ์ ์์ด์ผ ํฉ๋๋ค.
๋ทฐ๋ฅผ ์ด๋ฃจ๊ณ ์๋ GUI ๊ตฌ์ฑ ์์๋ ํํ ์ค์ฒฉ๋ ๊ตฌ์กฐ์ ์๋์ฐ, ํจ๋, ๋ ์ด๋ธ, ๋ฒํผ ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ปดํฌ์งํธ ํจํด์ ์ด๋ฌํ ์ค์ฒฉ ๊ตฌ์กฐ๋ฅผ ๋จ์ผ ๊ฐ์ฒด์ฒ๋ผ ๋ค๋ฃจ๋ ํจํด์ผ๋ก ์ค์ฒฉ์ ์ถ์ํํฉ๋๋ค.
์ ๋ต ํจํด์ ์ปจํธ๋กค๋ฌ์ ์ ํ์ ์ธ ํจํด์ ๋๋ค. ๋ทฐ๋ ์ปจํธ๋กค๋ฌ์๊ฒ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ ๋ฟ ๋ชจ๋ธ์ ๋ณ๊ฒฝ์๋ ๊ด์ฌํ์ง ์์ต๋๋ค. ์ปจํธ๋กค๋ฌ์ ๋ก์ง์ด ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๋๊ฐ์ ๋ฐ๋ผ์ ๋ชจ๋ธ์ด ๋ณ๊ฒฝ๋๋ ๋ฐฉ์์ด ๊ฒฐ์ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ทฐ์ ์ฐ๊ฒฐ๋ ์ด๋ฌํ ์ปจํธ๋กค๋ฌ๋ ๋ฐํ์์ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
์ ํจํด๋ค์ ๋ํด์๋ ๋ท์ฅ์์ ๋ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ํฝ ํธ์ง๊ธฐ ์ํคํ ์ฒ
์ด๋ฒ์๋ ๊ทธ๋ํฝ ํธ์ง๊ธฐ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์๋ ๊ทธ๋ฆผ์ ๊ทธ๋ํฝ ํธ์ง๊ธฐ์ ์ธ๋ถ ๊ตฌ์กฐ์ ๋๋ค. ๋ฐ๊นฅ์ ๊ฐ์ธ๊ณ ์๋ ์ํฌ๋ฒค์น๊ฐ ์๊ณ , ๋ฉ๋ด์ ํด๋ฐ ๊ทธ๋ฆฌ๊ณ ์ผ์ชฝ์ ํด์ด ์์ต๋๋ค. ์ค์์๋ ์บ๋ฒ์ค๊ฐ ์๊ณ ์ค๋ฅธ์ชฝ ์์์ ์๋๋ก ๋ณด๋ฉด ํ๋กํผํฐ, ํ๋ ํธ, ํ์คํ ๋ฆฌ, ๋ ์ด์ด๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ผ ํ๋จ์ ์คํ ์ดํฐ์ค๊น์ง ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ฒ ์ฅ์์๋ ์ ๊ทธ๋ฆผ์ ์ฃผํฉ์์ผ๋ก ํ์๋ ํด, ์บ๋ฒ์ค ๊ทธ๋ฆฌ๊ณ ํ์คํ ๋ฆฌ ์์ญ์ ๊ตฌํํ๋ฉด์ ๋์์ธ ํจํด์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๋ด๋ถ ์ฅ์น
๋ด๋ถ ๊ตฌ์กฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ง๋ค ๋ฌ๋ผ์ ์ผ๋ฐํํ๊ธฐ ์ด๋ ต์ง๋ง ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๋ค๋ ์ ์ฌํ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ก์ ๊ฒ์ด๋ผ ์๊ฐ๋ฉ๋๋ค. ๊ทธ๋ํฝ ์๋ํฐ๋ ๋ด๋ถ์ ์ผ๋ก ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
- ๋ชจ๋ธ: ํธ์ง๊ธฐ๊ฐ ํธ์งํ ์ ์๋ ๊ณ ์ ํ ๋๋ฉ์ธ ๋ชจ๋ธ
- ๊ทธ๋ํฝ ๋ทฐ์ด: ๊ทธ๋ํฝ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํธ์ง์ด ์ผ์ด๋๋ ๊ณต๊ฐ
- ์ด๋ฒคํธ ๋์คํจ์ฒ: ์น๋ธ๋ผ์ฐ์ ์ ์ ์์ค ์ด๋ฒคํธ๋ฅผ ์ด๋ฒคํธ ์๋ํฐ ์์ค์ ๊ณ ์์ค ์ด๋ฒคํธ๋ก ์ ํ
- ์ปค๋งจ๋ ์คํ: ํ์คํ ๋ฆฌ์ undo, redo๋ฅผ ์ง์
- ๋ฃจํธ ํํธ: ํธ์ง์ ์ํ ์ต์ ๋จ์๋ ํํธ๋ก ๊ตฌ์ฑ๋์ด ์๊ณ , ํํธ๊ฐ ํธ์ง ํ์๋ฅผ ์ํ
- ํด: ์ธ๋ถ ๊ตฌ์กฐ์ ํด์ ๊ตฌํ
- ์ก์ ๋ ์ง์คํธ๋ฆฌ: ๋จ์ถํค ์ฒ๋ฆฌ
- ๋ฆฌํ์คํธ: ์ด๋ฒคํธ๋ฅผ ์ถ์ํํ ๊ฒ
- EditPolicy: ์ค์ ํธ์ง์ ์งํํ๋ ๋ง์ดํฌ๋ก ์ปจํธ๋กค๋ฌ
๋ค์ ๊ธ์์๋ ์ ๋ด๋ถ ์ฅ์น๋ค์ ๋ํ ์์ธํ ์๊ฐ์ ํจ๊ป ๊ฐ์์ ๊ทธ๋ํฝ ํธ์ง๊ธฐ๋ฅผ ๊ตฌํํด ๋ณด๋ฉด์ ๋์์ธ ํจํด์ ์ด๋ป๊ฒ ์ ์ฉํ ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ํฝ ํธ์ง๊ธฐ ๊ตฌํ๊ณผ ๋์์ธ ํจํด ์ ์ฉ
์ด๋ฒ ์ฅ์์๋ ๊ฐ์์ ๊ทธ๋ํฝ ํธ์ง๊ธฐ๋ฅผ ๊ตฌํํด ๋ณด๋ฉด์ 5๊ฐ์ง ๋์์ธ ํจํด์ ์ด๋ป๊ฒ ์ ์ฉํ ์ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์์ธํ ๊ตฌํ๋ณด๋ค๋ ์ ์ฒด์ ์ธ ํ๋ฆ๊ณผ ๊ฐ๋ ์ ์ง์คํด์ ๋ฐ๋ผ์ค์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
1. ์ ์ฅ๋ ๋ชจ๋ธ๋ก๋ถํฐ ์ปจํธ๋กค๋ฌ (Part) ์์ฑํ๊ธฐ
์ฐ๋ฆฌ๊ฐ ๋ง๋ค ๊ฐ์์ ๊ทธ๋ํฝ ํธ์ง๊ธฐ๋ ์ ํ ํด, ์ฌ๊ฐํ ํด, ํ ํด์ ์ง์ํ๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด ๊ทธ๋ํฝ ํธ์ง๊ธฐ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ฌ๊ฐํ, ์, ๊ทธ๋ฆฌ๊ณ ๊ฒฝ๋ก๋ก ๊ตฌ์ฑ๋ ์๋์ ๊ฐ์ JSON์ผ๋ก ํํํ ์ ์์ต๋๋ค.
์ด์ ์ฐ๋ฆฌ์ ์ฒซ ๋ฒ์งธ ๋ชฉํ์ธ โ๋ชจ๋ธ๋ก๋ถํฐ ์ปจํธ๋กค๋ฌ ์์ฑํ๊ธฐ"์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์์ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ตฌํ๋์ด ์๋ค๊ณ ๋ง์๋๋ ธ์ต๋๋ค. ์๋ ๊ทธ๋ฆผ์์ ๊ฐ์กฐํ ๋ถ๋ถ์ด ์์ฑ์ ๊ด์ฌํ๋ ๊ตฌ์กฐ๋ฌผ์ ๋๋ค. ๊ทธ๋ํฝ ์๋ํฐ๋ ๋ชจ๋ธ์ ์ฝ์ด์ ๊ทธ๋ํฝ ๋ทฐ์ด์ ๋ํ๋ ๋๋ค. ๊ทธ๋์ ๋ชจ๋ธ์ด ๊ทธ๋ํฝ ์๋ํฐ์ ๋ค์ด๊ฐ๋ฉด ๊ทธ๋ํฝ ๋ทฐ์ด์ ๋ํ๋๊ฒ ๋ฉ๋๋ค.
์ด ๊ณผ์ ์ ์๋ ์ฝ๋๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ผ์ชฝ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๊ทธ๋ํฝ ์๋ํฐ๊ฐ ๊ทธ๋ํฝ ๋ทฐ์ด์๊ฒ ๋ชจ๋ธ์ ํ๋ผ๋ฏธํฐ๋ก ๋์ง๋ฉด์ ํํธ๋ฅผ ๋ง๋ค๋ผ๊ณ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ทธ๋ํ ๋ทฐ์ด๋ createParts
๋ฅผ ํธ์ถํ๋ฉด์ ๋ชจ๋ธ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๊ณ ๋ฐฐ์ด์ธ ๋ชจ๋ธ์ ์ํํ๋ฉด์ ๋ฐฐ์ด์ ์์ดํ
๋ค์ ํ์
์ ๋ฐ๋ผ ๊ฐ๊ฐ์ ํํธ๋ฅผ ๋ง๋ญ๋๋ค. ํํธ๋ฅผ ๋ง๋ค๊ณ ๋์ addPart
๋ฅผ ํตํด ๋ ๋๋ง์ ํ๊ณ ํ๋ฉด์ ๋ํ๋
๋๋ค.
๊ทธ๋ฐ๋ฐ ํํธ๋ฅผ ์์ฑํ๋ ๋ถ๋ถ์ด ์ด๋๊ฐ ์ด์ํ์ง ์๋์? ์๋ ํ์ํ ๋ถ๋ถ์ ์ฝ๋๋ ๋ํ์ด ์ถ๊ฐ๋ ๋๋ง๋ค ์์ ๋์ด์ผ ํฉ๋๋ค. ์์ ์ฐ๋ฆฌ๋ ๋์์ธ ํจํด์ ์ด์ฉํด ๋ณํํ๋ ๋ถ๋ถ์ ๋ถ๋ฆฌํ ์ ์๋ค๊ณ ํ์ต๋๋ค. ์ฌ๊ธฐ์๋ ์ฌํ ํฉํ ๋ฆฌ๋ฅผ ์ด์ฉํด์ ๋ณํํ๋ ๋ถ๋ถ์ ๋ถ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
ํฉํ ๋ฆฌ ์ผํ์
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์์๋ณด๊ธฐ ์ ์ ํฉํ ๋ฆฌ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ํฉํ ๋ฆฌ์๋ ์ธ ๊ฐ์ง ์ข ๋ฅ๊ฐ ์์ต๋๋ค.
- ์ฌํ ํฉํ ๋ฆฌ: ์๋ ํจํด๋ค์ ๋ง๋ค๊ธฐ ์ํ ๊ธฐ๋ณธ ํด๋์ค
- ํฉํ ๋ฆฌ ๋ฉ์๋ ํจํด: ์ถ์ ํด๋์ค๋ฅผ ์์๋ฐ๊ณ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ํจํด
- ์ถ์ ํฉํ ๋ฆฌ ํจํด: ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ๊ตฌ์ฑ(์ปดํฌ์ง์ )์ผ๋ก ์ ํ๊ตฐ์ ๊ตฌํํ๋ ํจํด
์ด๋ฒ ์์ ๋ ์ฌํ ํฉํ ๋ฆฌ๋ง์ผ๋ก ํด๊ฒฐํ๋ ๋ฐ ์ถฉ๋ถํ๊ธฐ ๋๋ฌธ์ ์ฌํ ํฉํ ๋ฆฌ๋ฅผ ์ด์ฉํ๊ฒ ์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ - ๋ณํํ๋ ๋ถ๋ถ ๋ถ๋ฆฌํ๊ธฐ
์์ ํ์ํ ์ฝ๋์์ if-else ์กฐ๊ฑด๋ฌธ์ ๋ถ๋ฆฌํด์ PartFactory
๋ก ์ฎ๊น๋๋ค. ๊ทธ๋ฆฌ๊ณ PartFactory
๋ ๋ถ๋ฆฌ๋์๊ธฐ ๋๋ฌธ์ PartFactory
๋ฅผ ํธ์ถํ๋ GraphicViewer
์์๋ ๋ ์ด์ ํ์
์ ์ ํ์๊ฐ ์์ด์ง๋๋ค. ๋ฐ๋ผ์ createParts
ํจ์๋ ๋ชจ๋ธ์ ์ํํ๋ฉด์ PartFactory
์๊ฒ ํํธ๋ง ๋ง๋ค์ด ๋ฌ๋ผ๊ณ ํธ์ถํ๋ฉด ๋ฉ๋๋ค. ์ฆ, ํ์
์ด ๋์ด๋๊ฑฐ๋ ๋ณ๊ฒฝ๋์ด๋ GraphViewer
๋ ๋ณ๊ฒฝ๋ ํ์ ์๊ณ , ์ค๋ก์ง PartFactory๋ง ์์ ํ๋ฉด ๋ฉ๋๋ค.
์ ๋ฐฉ๋ฒ์ ํตํด ์ป์ ์ ์๋ ์ฅ์ ์ 2๊ฐ์ง๊ฐ ์์ต๋๋ค.
- ๊ฐ๋ฐฉ-ํ์ ์์น (OCP, Open-Closed Principle)
- ์์กด์ฑ ์ญ์ ์์น (DIP, Dependency Inversion Principle)
์ฌํ ํฉํ ๋ฆฌ๋ฅผ ์ด์ฉํด์ ํ์ฅ์๋ ์ด๋ ค ์๊ณ , ์์ ์๋ ๋ซํ ์๋ OCP ์์น์ ์งํค๊ฒ ๋ฉ๋๋ค. ๋ํ, ์์กด์ฑ์ ์ฌํ ํฉํ ๋ฆฌ๋ก ๋ณด๋ด๊ณ ํํธ๋ผ๋ ์ถ์์ ์์กดํ๊ฒ ๋๋ DIP ์์น๋ ์งํฌ ์ ์์ต๋๋ค.
2. ์ปจํธ๋กค๋ฌ๋ก๋ถํฐ ๋ทฐ(Figure) ์์ฑํ๊ธฐ
์ด๋ฒ์๋ ๋ทฐ ์์ฑํ๊ธฐ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์์ ์ดํด๋ณธ ๋ชจ๋ธ์ 1์ฐจ์ ๋ชจ๋ธ์ด์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ 1์ฐจ์ ๋ชจ๋ธ๋ง ํธ์งํ์ง ์๊ณ ์ค์ฒฉ ๊ตฌ์กฐ๋ ๋ ์ด์ด, ๊ทธ๋ฃน ๋ฑ๋ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ๋ค์ฐจ์ ๊ตฌ์กฐ๋ฅผ ํํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ์ค์ฒฉ๋ ๋ชจ๋ธ์ ์๊ฐํด ๋ณด๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
์ค์ฒฉ๋ ๋ชจ๋ธ์ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋ ํจํด์ด ์์ต๋๋ค. ๋ฐ๋ก ์ปดํฌ์งํธ ํจํด์ ๋๋ค. ์ปดํฌ์งํธ ํจํด์ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ๋ณ ๊ฐ์ฒด์ ๋ณตํฉ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ค๋ฃฐ ์ ์๊ฒ ํฉ๋๋ค.
์ด ์ปดํฌ์งํธ ํจํด์ด๋ผ๋ ๊ฐ๋ ์ ๋ถ๋ถ-์ ์ฒด ๊ณ์ธต ๊ตฌ์กฐ๋ผ๋ ๊ฐ๋ ์์ ์ถ๋ฐํฉ๋๋ค. ํ๋์ ํธ๋ฆฌ ๋ ธ๋๋ฅผ ๋จ์ผ ๊ฐ์ฒด์ธ ๊ฒ์ฒ๋ผ ๋ค๋ฃน๋๋ค. ์ฆ, ์๋ ๊ทธ๋ฆผ์ ํ์์ผ๋ก ์น ํด์ง ๊ทธ๋ฃน ์์ญ์ด ํ๋์ ๋ ธ๋ ๊ฐ์ฒด์ ๋์ผํ ๊ฒ์ฒ๋ผ ๋ค๋ฃจ๋ ๊ตฌ์กฐ์ ๋๋ค.
๊ทธ๋์ ์ด ํจํด์ ๊ทธ๋ํฝ ์ ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ ๋ง์ด ์ฌ์ฉ๋๊ณ , ๋ฆฌ์กํธ์ ๋ ๋๋ง ๊ณผ์ ๊ณผ๋ ๊ต์ฅํ ์ ์ฌํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ด ํจํด์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ณ ๋ทฐ๋ ์ค์ฒฉ๋ ๋ทฐ๋ฅผ ๊ฐ์ ํ์
์ผ๋ก ์ทจ๊ธํด์ ๋ ๋๋ง ํ ์ ์์ต๋๋ค. ์๋ ์ผ์ชฝ ์ฝ๋๋ฅผ ๋ณด๋ฉด addChild
ํจ์๋ ํํธ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ฐ, ์ด ํํธ๋ ๋จ์ผ ๊ฐ์ฒด์ผ ์๋ ์๊ณ ๋ณตํฉ ๊ฐ์ฒด์ผ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ๊ณผ ์๊ด์์ด ์์์ผ๋ก ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ค์์ผ๋ก render()
์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ชจ๋ธ์ ์ฒ์ ์ฝ์ด๋๋ ธ๊ฑฐ๋ ๋ณ๊ฒฝ๋์์ ๋ ํํธ๊ฐ ๋ ๋๋ง์ ํธ์ถํฉ๋๋ค. ์ฆ, ์์ ์ ๋ ๋๋งํ๊ณ ์์์ ์ํํ๋ฉด์ ๋ ๋๋ง ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด ๋ถ๋ถ์ ๋ฌธ์ ๊ฐ ํ๋ ์์ต๋๋ค. ํ
์คํธ ํํธ๊ฐ์ด ์์์ ๊ฐ์ง ๋ชปํ๋ ๊ตฌ์ฑ ์์์ธ ๊ฒฝ์ฐ์๋ ์ค๋ฅธ์ชฝ ์ฝ๋์ ๊ฐ์ด addChild
๊ฐ ํธ์ถ๋์์ ๋ ์๋ฌ๋ฅผ ๋์ง๋ ์ฝ๋๊ฐ ํ์ํฉ๋๋ค.
์ ๋ฆฌํ๋ฉด, ์ค์ฒฉ๋ ๋ทฐ์ ๋ ๋๋ง๊ณผ ๊ฐ์ ์์ ์ ๊ฐ๋จํ ์ฝ๋๋ฅผ ํตํด ์ ์ฒด ๊ตฌ์กฐ๋ฅผ ๋์์ผ๋ก ๋ฐ๋ณตํด์ ์ ์ฉํ ์ ์์ต๋๋ค.
์ปดํฌ์งํธ ํจํด์ ํน์ง
์์ ์์ ๋ SRP(Single Responsibility Principle: ๋จ์ผ ์ฑ ์ ์์น)๋ฅผ ์๋ฐฐํ์ต๋๋ค. ๊ทธ๋์ ์ปดํฌ์งํธ ํจํด์ SRP๋ฅผ ๋ฒ๋ฆฌ๊ณ ํฌ๋ช ์ฑ์ ์ทจ๊ธํ๋ ํจํด์ผ๋ก ์๋ ค์ ธ ์์ต๋๋ค. ์ฌ๊ธฐ์ ํฌ๋ช ์ฑ์ด๋ ๊ฐ๋ณ ๊ฐ์ฒด์ ๋ณตํฉ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ํ์ ์ผ๋ก ๋ฐ๋ผ๋ณด๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด ๋๋ฌธ์ ํ์ ์์ ์ฑ์ด ๋จ์ด์ง๋๋ค. ์ด์ ์์ ์ ํ ์คํธ ํํธ์ฒ๋ผ ๋ ผ๋ฆฌ์ ๋ง์ง ์๋ ๋์์ด ์๊ธธ ์๋ ์๊ณ , ์ด๊ฒฝ์ฐ ์ด๋ฅผ ๋ง์์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ํจํด์ ์ค๊ณํ ๋ ํฌ๋ช ์ฑ๊ณผ ์์ ์ฑ์ ๊ท ํ์ด ํ์ํ ํจํด์ด๋ผ๊ณ ๋งํฉ๋๋ค.
3. ํด์ ์ด์ฉํด ๋ชจ๋ธ ์์ ํ๊ธฐ
๋ค์์ผ๋ก ํด์ ์ด์ฉํด ๋ชจ๋ธ์ ์์ ํ๋ ๊ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ํธ์ง ๊ณผ์ ๊ณผ ๊ด๋ จ๋ ๊ตฌ์กฐ๋ ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ์ด๋ฒคํธ ๋์คํจ์ฒ, ์ปค๋งจ๋ ์คํ, ๋ฃจํธ ๋ฆฌํฌํธ, ํด, ๋ฆฌํ์คํธ, EditPolicy
๊ฐ ์์ต๋๋ค.
์์์ ํธ์ง ์์ ์ โ์ด๋ฒคํธ๋ฅผ ์ํ๋ณํ๋ก ์ ํํ๋ ๊ณผ์ "์ด๋ผ๊ณ ํ์ต๋๋ค. ์ด ๊ณผ์ ์๋ ํน๋ณํ ์ฅ์น๊ฐ ํ๋ ์์ต๋๋ค. ๋ฐ๋ก โํดโ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ณผ์ ์ ์์ ์๊ฐ ๋๋ฆฐ ๊ตฌ์กฐ๋ฅผ ๊ณ๋ค์ฌ ์์ธํ ์ดํด๋ณด๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
์ด๋ฒคํธ ๋์คํจ์ฒ๋ ๋ธ๋ผ์ฐ์ ์ ์ ์์ค ์ด๋ฒคํธ๋ฅผ ์๋ํฐ์ ๊ณ ์์ค ์ด๋ฒคํธ๋ก ๋ณํํ๋ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฒคํธ ๋์คํจ์ฒ๊ฐ ๋ง์คํน ๋ ์ด์ด๋ฅผ ํตํด ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ณ , ์ด๋ฒคํธ๋ฅผ ๊ฐ๊ณตํด์ ์บ๋ฒ์ค๋ก ์ ๋ฌํ๋ ๊ณผ์ ์ ๋๋ค.
ํด์ ํน์ง
์์ ์ค๋ช ํ ํด์ โ๊ฐ์ ์ด๋ฒคํธ๋ผ๋ ์ ํ์ ๋ฐ๋ผ์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์์ผ ํ๋คโ๋ ํน์ง์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ๊ฐํ ํด์ ์ ํํ ์ํ๋ผ๋ฉด ๋๋๊ทธํ์ ๋ ์ฌ๊ฐํ์ด ๊ทธ๋ ค์ ธ์ผ ํ๊ณ , ํ ํด์ ์ ํํ ์ํ๋ผ๋ฉด ํ์ด ๊ทธ๋ ค์ ธ ํฉ๋๋ค. ์ฆ, ๊ทธ๋ํฝ ์๋ํฐ๋ ํ ๋ฒ์ ํ ๊ฐ์ ์ํ๋ฅผ ๊ฐ์ง๋๋ค.
ํด ๊ตฌํํ๊ธฐ
์ผ์ชฝ ์ฝ๋๋ ์ด๋ฒคํธ ๋์คํจ์ฒ์ ์ฝ๋์
๋๋ค. ์ด๋ฒคํธ๋ฅผ ๋ฆฌ์ค๋ ํ๋ ๋ถ๋ถ์ ์๋์ฝ๋๋ก ํํํ์ต๋๋ค. ์๋ฅผ ๋ค์ด mousemove
์ด๋ฒคํธ๋ฅผ ๋ฐ์์ transmitMouseMove
๋ฅผ ํธ์ถํฉ๋๋ค. transmitMouseMove
์์๋ ๋ทฐ์ด์๊ฒ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํฉ๋๋ค. ์ค๋ฅธ์ชฝ์ ๋ทฐ์ด ์ฝ๋์์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ํด์ ์ํ์ ๋ฐ๋ผ ์ฌ๊ฐํ, ์, ํ ๋ฑ์ ๊ฐ๊ฐ์ ๋ง๋ ์์๋ฅผ ํ๋ฉด์ ๊ทธ๋ฆฝ๋๋ค.
์ ์ฝ๋์์๋ ๋ฌธ์ ์ ์ด ์์ต๋๋ค. ํด์ด ์ถ๊ฐ๋ ๋๋ง๋ค ์ค๋ฅธ์ชฝ์ ํ์๋ if-else ๋ฌธ์ด ๊ณ์ ๋์ด๋์ผ ํฉ๋๋ค. ์ฆ, GraphicViewer
์ฝ๋๊ฐ ๋ซํ ์์ง ์์ ์ํ๊ฐ ๋ฉ๋๋ค. ๋ํ, ์ ์ฌํ ์ฝ๋๊ฐ ๋ฐ๋ณต๋๊ณ ์์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ - ์ํ ํจํด
์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ์ํ ํจํด์
๋๋ค. ์ค๋ฅธ์ชฝ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด if-else ๋ฌธ์ ์ ๊ฑฐํ๊ณ receiveEvent
๋ถ๋ถ์์ ํด์๊ฒ ๋ฐ๋ก ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ์ต๋๋ค. ์ด ํด์ ์ถ์ ํด๋์ค๊ฐ ๋๋๋ฐ ํน์ ์ํ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํน์ ํด๋์ค์๊ฒ ๋ชจ๋ ์์ํฉ๋๋ค. ์ฆ, ํ์ฌ ์ํ๋ฅผ ํ๋์ ํด๋์ค๋ก ๋ํ๋ด๋ ๊ฒ์ด ๋ฐ๋ก ์ํ ํจํด์
๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํน์ ์ํ์์์ ํ๋์ ๊ณ ๋ฆฝ์ํฌ ์ ์์ด ์ฝ๋ ๊ด๋ฆฌ๊ฐ ์ฌ์์ง๊ณ , ์์์ ํตํด ๋ฐ๋ณต๋๋ ์ฝ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์ํ ํจํด์ ํตํด ํด๊ฒฐํ ์ฝ๋์์ GraphicViewer
๋ ํ์ฅ์ ์ด๋ ค์๊ฒ ๋๊ณ , ํด์ ๋ณ๊ฒฝ์ ๋ซํ ์๊ฒ ๋์ด OCP๋ฅผ ๊ตฌํํ ์ ์๊ฒ ๋์ต๋๋ค.
์ ๋ฆฌํ๋ฉด, ์์ ์์ ์ ์ฌ๊ฐํ, ์, ํ ํด์ ์ ๋ ์ ํด์ด๋ผ๋ ํด๋์ค์๊ฒ ํน์ ์ํ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ชจ๋ ์์ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ค์ ๊ธฐ๋ฅ์ ์ํด ์ ๋ ์ ํด์ ์์๋ฐ์ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
4. MVC ๊ตฌ์กฐ๋ฅผ ์์ฑํ์
์ด๋ฒ์๋ ์ง๊ธ๊น์ง์ ์ด๋ฒคํธ ํ๋ฆ์ ๋ค์ ์ดํด๋ณด๋ฉฐ MVC ๊ตฌ์กฐ๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ๋ฐฉ๊ธ ํด์ ๋ํด ์์๋ดค๋๋ฐ, ๊ทธ๋ ๋ค๋ฉด ์กฐ๊ธ ์ ์์ ์ ๊ฐ์ด ํด์ด ์ง์ ๋ชจ๋ธ์ ์์ ํ๋ ๊ฒ์ด ๋ฐ๋์งํ ๊น์? MVC ๊ตฌ์กฐ์์ ๋ชจ๋ธ ์์ ๋ฐฉ๋ฒ์ ๋๊ฐ ์๊ณ ์์ด์ผ ํ ๊น์?
์๋ฅผ ๋ค์ด ๋นํธ๋งต์ ์ง์ฐ๋ ์ง์ฐ๊ฐ ๋๊ตฌ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ์ด ๋นํธ๋งต ์ง์ฐ๊ฐ๋ ๋นํธ๋งต๋ง ์ง์ฐ๋ ๋๊ตฌ์ด๊ธฐ ๋๋ฌธ์ ์ผ์ชฝ์ ๋นํธ๋งต ๊ทธ๋ฆผ์ ์ง์ธ ์ ์์ด์ผ ํ๊ณ , ์ค๋ฅธ์ชฝ์ ๋ฒกํฐ ๊ทธ๋ฆผ์ ์ง์ธ ์ ์์ด์ผ ํฉ๋๋ค.
์ด๋ฐ ์ํ์์ ์ง์ฐ๊ฐ ๋๊ตฌ๊ฐ ์ง์ ๋ชจ๋ธ์ ์์ ํ๋ ค๋ฉด ์ง์ธ ์ ์๋ ํํธ์ ์ง์ธ ์ ์๋ ํํธ๋ฅผ ๋ชจ๋ ์๊ณ ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์์ผ๋ก ํํธ๊ฐ ๋์ด๋ ๋๋ง๋ค ์ง์ธ ์ ์๋ ์์์ธ์ง ์๋์ง ๋ค ์๊ณ ์์ด์ผ ํฉ๋๋ค. ์ฆ, ์์๋ค์ด ๋์ด๋ ๋๋ง๋ค ์ฝ๋๋ฅผ ๊ณ์ ์์ ํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ง์ฐ๊ฐ ๋๊ตฌ์ ๊ฐ๋ฐฉ ํ์ ์์น์ ์ด๊ธฐ๊ฒ ๋ฉ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ํํธ ์ค์ค๋ก ์ด๋ฒคํธ์ ๋ํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ด๋ป๊ฒ ํด์ํด์ผ ํ๋์ง ์๊ณ ์์ด์ผ ํฉ๋๋ค. ์ง์ฐ๊ฐ๊ฐ ์์๋ฅผ ์ง์ฐ๋ผ๊ณ ์์ฒญํ๋ฉด ํํธ๊ฐ ์ด ์ด๋ฒคํธ๋ฅผ ๋ฐ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด์ฃ .
๋ ๊ทผ๋ณธ์ ์ผ๋ก ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. MVC๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ชจ๋ธ์ ๋๊ฐ ์์ ํ ๊น์? ๋ฐ๋ก ์ปจํธ๋กค๋ฌ์ ๋๋ค. ์ฐ๋ฆฌ์ ์์ ์์๋ ํํธ๊ฐ ์ปจํธ๋กค๋ฌ๋ผ๊ณ ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํํธ๋ ์ด๋ฒคํธ๋ฅผ ์ด๋ป๊ฒ ํด์ํ๋์ง ์๊ณ ์์ด์ผ ํ๊ณ ๋ชจ๋ธ์ ์์ ํ ์ ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํด์ ํํธ์ ์ด๋ฒคํธ๋ฅผ ๋ฐ๋ก ์ ๋ฌํ๋ ๊ฒ์ด ์๋๋ผ ๋ฆฌํ์คํธ๋ผ๋ ํํ๋ก ๊ฐ๊ณตํด์ ๋ชจ๋ธ ์์ ์ ์์ฒญํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ค์ํ ํธ์ง ์์ฒญ์ ๋ฆฌํ์คํธ์ ๋ด์ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ฆฌํ์คํธ๋ ํ์ด๋ ๋ฒจ ์ด๋ฒคํธ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๊ทธ๋ผ ํํธ ๋ด๋ถ์ ๋ชจ๋ธ ์์ ๋ก์ง์ ์ง์ ๋ฃ์ผ๋ฉด ๋ ๊น์? ์ด๊ฒ๋ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ์๋ํ๋ฉด ์ ์ฌํ ํธ์ง ๋ก์ง์ด๋ผ๋ฉด ํํธ ์์์๋ ์ค๋ณต ๋ก์ง์ด ๋ฐ์ํ ์๋ ์์ต๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ํํธ ์์์ ๋๋ค์ ๊ฐ๋ฐฉ ํ์ ์์น์ด ๋ฌด๋์ง๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ - EditPolicy ํจํด
์ ๋ฌธ์ ๋ฅผ ์ค๋งํธํ๊ฒ ํด๊ฒฐํ๋ ๊ตฌ์กฐ๊ฐ ๋ฐ๋ก EditPolicy์ ๋๋ค. EditPolicy๋ ํํธ๊ฐ ์๊ณ ์์ด์ผ ํ๋ ๋ชจ๋ธ ์์ ๋ก์ง์ ํํธ๊ฐ ์ฌํ์ฉํ ์ ์๊ฒ ์์ ํ ๋ถ๋ฆฌํด์ ๋ง์ดํฌ๋ก ์ปจํธ๋กค๋ฌ๋ก ๋ง๋ ๊ฒ์ ๋๋ค.
์๋ ์ฝ๋๋ ํด์ ๋๋๊ทธ ๋์์ ๋ํ๋ด๋ ์ฝ๋์
๋๋ค. ๋ง์ฐ์ค ๋ค์ด ์ด๋ฒคํธ๊ฐ ์ผ์ด๋๋ฉด ๋๋๊ทธ๊ฐ ์์๋๊ณ ๋ง์ฐ์ค ์
์ด๋ฒคํธ๊ฐ ์ผ์ด๋๋ฉด ๋๋๊ทธ ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค. ๋๋๊ทธ ์ค๋์์๋ ๋ชจ๋ธ์ ๋ฐ๊พธ๋ผ๊ณ changeModel
ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ResizeTool
์ changeModel
์ด ์๋์ ๊ฐ์ด ํน์ ์์
์ ์งํํฉ๋๋ค.
์ด์ ResizeTool
์์ Policy๋ฅผ ๋ถ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค. ๋ชจ๋ธ ์์ ์ฝ๋๋ฅผ ResizeTool
์์ ResizePolicy
๋ก ์ด๋์ํต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ResizeTool
์ chnageModel
์ ์ถ์ํ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํํธ์ installPolicy
ํจ์๋ฅผ ์ถ๊ฐํด์ policy๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์ ์๊ฒ ํ์ฌ ๋ค์ค ์ ์ฑ
์ ์ฒ๋ฆฌํ ์ ์๊ฒ ํฉ๋๋ค. ์ฆ policy๊ฐ ๋ฐฐ์ด์ด ๋๊ณ ์ฌ๋ฌ ๊ฐ์ง ์ปจํธ๋กค๋ฌ ๋ก์ง์ ๋ฐ์ ์ ์์ต๋๋ค.
์ฆ, ResizeTool
์ ์์ฒญ๋ง ๋ณด๋ด๋ฉด ๋๊ณ ResizeTool
์์ ํ๋ changeModel
๋ถ๋ถ์ด ์์ด์ง๊ณ , ์์ ํด๋์ค์ธ ํด์์ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
์ ๋ต ํจํด
๋ฐฉ๊ธ ์ดํด๋ณธ EditPolicy
๋ ์ ๋ต ํจํด์
๋๋ค. ๋ณํ๋ ๋ถ๋ถ์ ์ฐพ์๋ด์ ํด๊ณผ ํํธ์ ๊ฐ์ด ๋ณํ์ง ์๋ ๋ถ๋ถ์ ๋ถ๋ฆฌํ๊ณ ๋ชจ๋ธ ์์ ์์
์ Policy์ ์์ํฉ๋๋ค. ํํธ๋ Policy๋ฅผ ์ ํํด์ ๋ฐํ์์ ํฌํจํด ๋ค์ํ ์ํฉ์์ ์๋ ๋ฐฉ์์์์ ๋กญ๊ฒ ๋ฐ๊ฟ ์ ์์ต๋๋ค. ๋ํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฌ์ฉํ๊ธฐ ์ฝ์ต๋๋ค.
5. ์์ ํ์คํ ๋ฆฌ ๊ด๋ฆฌํ๊ธฐ
์ด ๋ถ๋ถ์ ํ์คํ ๋ฆฌ๋ฅผ ๊ตฌํํ๋ undo
, redo
์ ๊ด๋ จ๋ ๋ถ๋ถ์
๋๋ค. ์ง๊ธ๊น์ง ์ดํด๋ณธ ์ด๋ฒคํธ ํ๋ฆ์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ด๋ฒคํธ ๋์คํจ์ฒ์์ ๊ทธ๋ํ ๋ทฐ์ด, ๊ทธ๋ฆฌ๊ณ ํด๊ณผ ํํธ๋ฅผ ํตํด EditPolicy
๊ฐ ๋ชจ๋ธ์ ์์ ํฉ๋๋ค.
์์์ ๋ดค๋ EditPolicy
๊ณผ์ ์ ํ ๋ฒ ๋ ๊ฐ์ ํ๋ฉด, EditPolicy
๊ฐ ๋ชจ๋ธ์ ์ง์ ์์ ํ๋ ๊ฒ์ด ์๋๋ผ EditPolicy
๋ ์ปค๋งจ๋๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ์ด ์ปค๋งจ๋๋ ์ปค๋งจ๋ ์คํ ์์ ๋ด๊ฒจ ์ ๋ฌ๋๊ณ ์ปค๋งจ๋ ์คํ์ด ๋ชจ๋ธ์ ๋ณ๊ฒฝํฉ๋๋ค. ์ปค๋งจ๋ ์คํ ์์๋ undo
, redo
์ ๊ฐ์ ๋ชจ๋ธ์ ์์ ํ๊ธฐ ์ํ ๋ช
๋ น๋ค์ด ์บก์ํ๋ผ์ ํ๋์ฉ ์์ฌ์์ต๋๋ค.
์ง๊ธ๊น์ง์ ํ๋ฆ์ ์ต์ข
์ ์ผ๋ก ์ ๋ฆฌํ๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค. ํด์์ ์ด๋ฒคํธ๋ฅผ ๋ฐ๊ณ ํํธ์ EditPolicy
์์ ์ปค๋งจ๋๋ฅผ ๋ง๋ค๋ผ๊ณ ์์ฒญํ๊ณ ์ด ์ปค๋งจ๋๋ก ๋ชจ๋ธ์ ์์ ํฉ๋๋ค. ๋ชจ๋ธ์ด ์์ ๋๋ฉด ๋ค์ ํํธ์์ ๋ฆฌํ๋ ์๋ฅผ ์์ฒญํ๊ณ ๋ทฐ์์ ๊ฐฑ์ ๋ฉ๋๋ค.
๋งบ์๋ง
์ง๊ธ๊น์ง ์น ๊ธฐ๋ฐ ๊ทธ๋ํฝ ํธ์ง๊ธฐ์ ๊ตฌ์กฐ๋ฅผ ํตํด 7๊ฐ์ง ๋์์ธ ํจํด์ ๋ํด ์์๋ดค์ต๋๋ค. ๋, ์ค์ ๊ตฌํ ์ฝ๋๋ฅผ ์ง์ ๊ฐ์ ํ๋ฉฐ ๋์์ธ ํจํด์ ๋ํด ์๊ฐํด ๋ดค์ต๋๋ค.
์ค๋ ์๊ฐํ ๋ด์ฉ์ ๋์์ธ ํจํด์ ๋ํ ํ ๊ฐ์ง ๊ฒฝํ์ผ ๋ฟ์ ๋๋ค. ์ ๊ฐ ๊ณต์ ๋๋ฆฐ ๊ฒฝํ์ด ๊ทธ๋ํฝ ํธ์ง๊ธฐ๋ฅผ ๋ง๋ค ๋ ์๋ฏธ ์๋ ๋ด์ฉ์ด ๋๊ธฐ๋ฅผ ๋ฐ๋ผ๊ณ , ์ค์ ๋์์ธ ํจํด์ ์ ์ฉํ๋ ๋ฐ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋ค์ํ ์ํฉ์์ ๊ฒฝํ์ ํตํด ๋ ๋์ ํจํด์ ์ฐพ๊ณ ์ด๋ฅผ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๊ณต์ ํ๊ณ ํจ๊ป ์ ์ฉํด ๋ณด์๊ธธ ๋ฐ๋๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
FEConf2023์์ ๋ฐํ๋ โ์น ๊ธฐ๋ฐ ๊ทธ๋ํฝ ํธ์ง๊ธฐ์ ๊ตฌ์กฐ์ 7๊ฐ์ง ๋์์ธ ํจํดโ/์ฌํฅ์ด ๋ค์ด๋ฒ ํ๋ก ํธ์๋ ์์ง๋์ด โฉ๏ธ