MVP The Taligent Programming Model - ChoDragon9/posts GitHub Wiki


title: MVP The Taligent Programming Model sidebar: auto

์ด ๋ฌธ์„œ๋Š” MVP๋ฅผ ์ตœ์ดˆ๋กœ ์–ธ๊ธ‰๋œ ๋…ผ๋ฌธ์ธ MVP: Model-View-Presenter The Taligent Programming Model for C++ and Java๋ฅผ ๋ฒˆ์—ญํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

๋ณธ๋ฌธ์š”์•ฝ

  • ์Šค๋ชฐํ† ํฌ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ธ MVC๋Š” ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ์ถ”์ƒํ™”๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ, ๋ทฐ๋Š” ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๋Š” ๋ฐฉ๋ฒ•, ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์‚ฌ์šฉ์ž ์ œ์Šค์ฒ˜ ๋ฐ ์ด๋ฒคํŠธ
  • ํ…”๋ฆฌ์ „ํŠธ์˜ ์ „๋ฐ˜์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹ ๋ชจ๋ธ์€ ๋ชจ๋ธ๊ณผ ๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ ๊ฐ„์˜ ๋ถ„๋ฆฌ๋ฅผ ๊ณต์‹ํ™”ํ•œ๋‹ค. ๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ, ๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ์€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์„ธ๋ถ„ํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋‹ค๋ค„์•ผ ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋‘ ๊ฐ€์ง€ ๋””์ž์ธ ๋ฌธ์ œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜์ง€?
    • ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ์™€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜์ง€?
  • ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ Model/Selection/Command๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • Model : ์บก์Šํ™”๋œ ๋ฐ์ดํ„ฐ, ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์•ก์„ธ์Šค ๋ฐฉ๋ฒ•
    • Selection : ๋ฐ์ดํ„ฐ ์„ ํƒ ๋ฐฉ๋ฒ•, Model ๋ฐ์ดํ„ฐ์˜ ์—ฌ๋Ÿฌ ํ•˜์œ„ ์„ธํŠธ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ถ”์ƒํ™”
    • Command : ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•, Model์˜ Selection์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ถ”์ƒํ™”
  • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์„ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ View/Interactor/Presenter๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • View : ๋ฐ์ดํ„ฐ ํ‘œ์‹œ
    • Interactor : ์ด๋ฒคํŠธ์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์š”์ฒญ
    • Presenter : Interactor์— ๋”ฐ๋ฅธ ์ ์ ˆํ•œ Command๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
  • ๊ธฐ์กด์˜ Controller์˜ ๊ธฐ๋Šฅ์ด์ง€๋งŒ Interactor์™€ Command๋ฅผ ๋งคํ•‘ํ•˜๋Š” ์—ญํ• ์„ ๊ณ ๋ คํ•ด์„œ Presenter๋ผ๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ MVP์˜ ์–ด์›์ด ํƒ„์ƒํ•œ๋‹ค.

Abstract

IBM์˜ 100% ์†Œ์œ  ์žํšŒ์‚ฌ์ธ Taligent๋Š” ๊ณ ์ „์  MVC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์˜ ์ผ๋ฐ˜ํ™”๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ C++ ๋ฐ Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ชจ๋ธ์ธ Model-View-Presenter ๋˜๋Š” MVP๋ฅผ ์œ„ํ•œ ์ฐจ์„ธ๋Œ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. MVP๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ๊ตฌ์„ฑ์š”์†Œ ๊ฐœ๋ฐœ ์ž‘์—…์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์„ค๊ณ„ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. Taligent์˜ ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜ ๊ฐœ๋… ๊ตฌํ˜„์€ MVP๋ฅผ ๊ณ ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž ํ”„๋กœ๊ทธ๋žจ์— ํฐ ๊ฐ€์น˜๋ฅผ ๋”ํ•œ๋‹ค. ๋˜ํ•œ MVP๋Š” ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ๋ฐ ๋‹ค์ค‘ ๊ณ„์ธต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜์— ๊ฑธ์ณ ์ ์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MVP๋Š” IBM์ด ๋ชจ๋“  ์ฃผ์š” ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด ํ™˜๊ฒฝ์— ๊ฑธ์ณ ํ†ตํ•ฉ๋œ ๊ฐœ๋… ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Smalltalk Programming Model

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์˜ ๊ฐ€์žฅ ์ต์ˆ™ํ•œ ์˜ˆ๋Š” 1970๋…„๋Œ€ ํ›„๋ฐ˜ ์ œ๋ก์Šค ํŒŒํฌ์—์„œ ๊ฐœ๋ฐœ๋œ ์†Œํ˜•ํ† ํฌ ๋ชจ๋ธ1 ์ด๋‹ค. MVC๋Š” Smalltalk์—์„œ ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(GUI) ๊ฐœ์ฒด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ์„ค๊ณ„ ํŒจํ„ด์ด๋ฉฐ, ์ดํ›„ ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ GUI ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋‹ค์–‘ํ•œ ์ˆ˜์ค€์œผ๋กœ ์žฌ์‚ฌ์šฉ ๋ฐ ์ฑ„ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Smalltalk๋Š” MVC์˜ ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ์ถ”์ƒํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฒดํฌ๋ฐ•์Šค ๋˜๋Š” ํ…์ŠคํŠธ ์ž…๋ ฅ ํ•„๋“œ์™€ ๊ฐ™์€ GUI ๊ฐœ์ฒด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ๊ฐœ์ฒด์˜ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ทฐ๋Š” ๋ชจ๋ธ์—์„œ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋ชจ๋ธ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์Šค์ฒ˜ ๋ฐ ์ด๋ฒคํŠธ ํ˜•์‹์˜ ๋ณด๊ธฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜์—ฌ ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ์˜ˆ: ํ™•์ธ๋ž€์˜ ์ผœ๊ธฐ ์ƒํƒœ ๋˜๋Š” ํ…์ŠคํŠธ ์ž…๋ ฅ ํ•„๋“œ์˜ ํ…์ŠคํŠธ ๋ฌธ์ž์—ด
  • ๋ทฐ ์˜ˆ: ์‹ค์ œ ์„ ํƒ ๋˜๋Š” ์„ ํƒ ์ทจ์†Œ๋จ
  • ์ปจํŠธ๋กค๋Ÿฌ ์˜ˆ: ํ™•์ธ๋ž€์„ ํด๋ฆญํ•˜์—ฌ ์ผœ๊ธฐ ์ƒํƒœ๋ฅผ ์ „ํ™˜ํ•˜๊ฑฐ๋‚˜ ํ…์ŠคํŠธ ์ž…๋ ฅ ํ•„๋“œ์— ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•˜์—ฌ ๊ธฐ๋ณธ์ด ๋ณ€๊ฒฝ๋จ

๋ชจ๋ธ์€ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฉฐ ๋ณด๊ธฐ๋ฅผ ๋‹ค์‹œ ๊ทธ๋ ค์•ผ ํ•จ์„ ๋ทฐ์— ํ†ต๋ณดํ•˜์—ฌ ๋ฃจํ”„๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค. SmallTalk์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” SmallTalk ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณต๋˜๋Š” ๋ชจ๋ธ, ๋ณด๊ธฐ ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ ์ถ”์ƒํ™”์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ์„ธ๋ถ„ํ™”ํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜์—ฌ GUI ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Smalltalk ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋‹จ์ผ GUI ๊ฐœ์ฒด ๋‚ด์—์„œ ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ MVC ๊ฐœ๋… ์ค‘ ์‚ฌ์ „ ์ •์˜๋œ ๊ธด๋ฐ€ํ•œ ๊ด€๊ณ„๋ฅผ ์ƒ์†ํ•จ์œผ๋กœ์จ ์ด์ ์„ ๋ˆ„๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์—ฌ๋Ÿฌ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๋Œ€ํ™” ์ƒ์ž์™€ ๊ฐ™์€ ๋ณด๋‹ค ๋ณต์žกํ•œ GUI ๊ฐœ์ฒด๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ GUI ๊ฐœ์ฒด ์ธ์Šคํ„ด์Šค๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ๋ชจ๋‘ MVC ํด๋ž˜์Šค๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ถ๊ทน์ ์œผ๋กœ ์ „์ฒด ๋Œ€ํ™”ํ˜• ๊ทธ๋ž˜ํ”ฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ MVC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค.

Building the Taligent / Open Class Programming Model

Taligent๋Š” IBM์˜ VisualAge ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์„ ์œ„ํ•œ Open Class ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋ชจ๋“  ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด Smalltalk์˜ MVC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์กฐ์ • ๋ฐ ์ผ๋ฐ˜ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ง„ํ™”๋Š” Taligent์˜ ์›๋ž˜ CommonPoint ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์Šคํ…œ์—์„œ ์‹œ์ž‘๋˜์—ˆ์œผ๋ฉฐ, VisualAge์šฉ Open Class์˜ ํ˜„์žฌ ๋ฐ ํ–ฅํ›„ ๋ฒ„์ „์„ ํ†ตํ•ด ๊ณ„์†๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Taligent์˜ ์ „๋ฐ˜์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ธฐ๋ณธ MVC ๊ฐœ๋…์„ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ถ„ํ•ดํ•˜๊ณ  ๋”์šฑ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ณด๋‹ค ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ๋ชจ๋ธ๊ณผ View-Controller ๊ฐ„์˜ ๋ถ„๋ฆฌ๋ฅผ ๊ณต์‹ํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ”„๋กœ๊ทธ๋žจ ๋ฌธ์ œ๋ฅผ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ฐœ๋…์œผ๋กœ ์„ธ๋ถ„ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋‹ค๋ค„์•ผ ํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋‘ ๊ฐ€์ง€ ๋””์ž์ธ ๋ฌธ์ œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์˜ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋‹ตํ•˜๋Š” ์งˆ๋ฌธ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜์ง€?์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชจ๋ธ ๋‚ด์—์„œ ๋‹จ์ง€ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ํ‘œํ˜„์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์–ด๋–ค ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ, ์•ก์„ธ์Šค ๋ฐฉ๋ฒ•, ํ”„๋กœํ† ์ฝœ ๋ณ€๊ฒฝ, ์ง€์†์„ฑ, ๊ณต์œ ์„ฑ, ๋ถ„์‚ฐ์„ฑ ๋“ฑ์„ ์ฑ„ํƒํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋„ ํฌํ•จํ•œ๋‹ค.

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ์™€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜์ง€?๋ผ๊ณ  ๋Œ€๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ™”๋ฉด์ƒ์˜ ๊ฐ์ฒด ๊ทธ๋ฆฌ๊ธฐ, ๋งˆ์šฐ์Šค ๋ฐ ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉํ•  ์˜๋ฏธ ์ž‘์—…, ์‚ฌ์šฉ์ž ์ž‘์—… ์ธ์‹, ์‚ฌ์šฉ ์ค‘์ธ ์ œ์Šค์ฒ˜ ์–ธ์–ด ๋ฐ ์ œ๊ณต๋˜๋Š” ํ”ผ๋“œ๋ฐฑ๋„ ๊ทธ ์ด์ƒ์ž…๋‹ˆ๋‹ค.

IBM์˜ VisualAge 3.0์šฉ Open Class์˜ ์ด์ „ ๋ฆด๋ฆฌ์Šค์—์„œ IBM์˜ ICLUI ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ธก๋ฉด์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. Taligent๋Š” 3.5 ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์ธก๋ฉด์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณตํ•ฉ ๋ฌธ์„œ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „์„ Open Class์— ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ์žˆ์„ 4.0 ์˜คํ”ˆ ํด๋ž˜์Šค ๋ฆด๋ฆฌ์Šค์—์„œ ์ด ๋‘ ๊ฐ€์ง€ ์ธก๋ฉด์ด ์–ด๋–ป๊ฒŒ ์ผ๋ฐ˜ํ™”๋˜๊ณ  ๊ฐœ์„ ๋  ๊ฒƒ์ธ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ์€ ์บก์Šํ™” ๊ฐ€๋Šฅํ•˜๋‹ค

๋ชจ๋ธ ๊ฐœ๋…์„ ์ผ๋ฐ˜ํ™”ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ๋ชจ๋ธ๊ณผ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์„ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ์ „ํ™” ๋ชฉ๋ก ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๋‚ด ๋ชจ๋ธ์€ ๋ชจ๋“  ์ด๋ฆ„๊ณผ ์ „ํ™” ๋ฒˆํ˜ธ ์Œ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ์™€ ์ฟผ๋ฆฌ ๋ฐ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ์บก์Šํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ œ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์€ ์ „ํ™” ๋ชฉ๋ก ๋ฐ์ดํ„ฐ์˜ ๋Œ€ํ™”ํ˜• ์ „ํ™”๋ฒˆํ˜ธ๋ถ€ ํ‘œ์‹œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ด๋Ÿฌํ•œ ์ด์ ์€ ๋ช…๋ฐฑํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋†€๋ž„ ๋งŒํ•œ ์ˆ˜์˜ ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ๊ทธ๋Ÿฌํ•œ ๋ช…ํ™•ํ•œ ๋ถ„ํ•ด๋‚˜ ์ ‘์ ์„ ์ฑ„ํƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋žจ์€ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰, ํ‘œ์‹œ, ์ €์žฅ, ๋ณ€ํ™˜ํ•˜๋Š” ์—ฌ๋Ÿฌ ์œ„์น˜์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ•œ ์‚ฌ๋žŒ์ด ๋ชจ๋“  ๊ฒƒ์„ ๋˜‘๋ฐ”๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์€ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ๋ฐ˜๋“œ์‹œ ํ•ด๋กœ์šธ ํ•„์š”๋Š” ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ฐฐ์šฐ๋Š” ๋ฐฉ์‹์ธ ์ด ์Šคํƒ€์ผ์€ ์‰ฝ๊ฒŒ ์Šค์ผ€์ผ์—…ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์˜ ์ „๋ถ€ ๋˜๋Š” ์ผ๋ถ€๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋˜๋Š” ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋ž˜๋จธ์— ์˜ํ•ด ์ž‘์—…๋  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์‚ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ชจ๋ธ์€ ์ง€์†๊ฐ€๋Šฅํ•˜๋‹ค

์ด์ „ ์˜ˆ์—์„œ ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋ธ ์ž์ฒด์— ์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์‹คํ–‰ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ ํด๋ž˜์Šค ๋‚ด์— ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ํ• ๋‹น๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชจ๋ธ์ด ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ชจ๋ธ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์˜ˆ์—์„œ ๋ชจ๋ธ์€ ์˜๊ตฌ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์—์„œ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ”„๋ก์‹œ๋ฅผ ์ œ์™ธํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๋ชจ๋ธ์— ์ด๋ฆ„, ์ „ํ™” ๋ฒˆํ˜ธ ์Œ์„ ์ €์žฅํ•˜๋Š” ์›๊ฒฉ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ด๋™ํ•˜๋Š” ์ฟผ๋ฆฌ ์—”์ง„ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ์•ก์„ธ์Šค ์ œ์–ด ๋ฐ ์ธ์ฆ(๋กœ๊ทธ์ธ)์„ ๊ตฌํ˜„ํ•˜๊ณ , ํšŒ๊ณ„ ๋˜๋Š” ์ถฉ์ „ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๋ฉฐ, ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์„ ์บ์‹œํ•˜๊ณ , ๋‹ค๋ฅธ ๊ณต๊ธ‰์—…์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณต์ œ ๋ฐ ์ด์ค‘ํ™” ๋“ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์€ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์— ํˆฌ๋ช…ํ•˜๊ฒŒ ์ˆ˜ํ–‰๋˜๋ฉฐ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋˜๋Š” ๋‹ค๋ฅธ ์„ค์น˜๋ฅผ ์œ„ํ•ด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ์€ ๊ณต์œ  ๊ฐ€๋Šฅํ•˜๋‹ค

๋ชจ๋ธ์„ ์ถ”์ƒํ™”ํ•˜๋ฉด ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž ๊ฐ„์— ๋ณด๋‹ค ์œ ์—ฐํ•œ ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ ๋ชจ๋ธ์ด ๋™์ผํ•œ ์›๊ฒฉ ๋ฐ์ดํ„ฐ๋ฅผ ์บก์Šํ™”ํ•˜๋ฉด ํšŒ์‚ฌ ์ „ํ™”๋ฒˆํ˜ธ๋ถ€์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์œ  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์—์„œ ์ƒˆ ์ „ํ™”๋ฒˆํ˜ธ๋ถ€๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ชจ๋‘๊ฐ€ ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ์ด๋ฉฐ, ๋ชจ๋ธ์ด ์ž์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ํ˜‘์—…ํ•˜๊ณ  ๋™์ผํ•œ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ๊ธฐ ์ „์šฉ ์ „ํ™”๋ฒˆํ˜ธ๋ถ€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž, ์ „ํ™” ๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€๋ฆฌ์ž, ๊ฐœ์ธ ์ •๋ณด์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์‚ฌ ๊ด€๋ฆฌ์ž ๋“ฑ ์‚ฌ์šฉ์ž๋งˆ๋‹ค ๋‹ค๋ฅธ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3๊ฐ€์ง€ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์งˆ๋ฌธ

Taligent๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(๋ชจ๋ธ-ํ”„๋ ˆ์  ํ…Œ์ด์…˜) ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•œ ๊ด‘๋ฒ”์œ„ํ•œ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์˜ ์ ˆ๋ฐ˜์— ๋Œ€ํ•œ ํ•ต์‹ฌ ์ถ”๊ฐ€ ๊ฐœ์„  ์‚ฌํ•ญ์„ ํŒŒ์•…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐœ์„ ์€ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฌธ์ œ๋ฅผ ์„ธ ๊ฐ€์ง€ ํ•˜์œ„ ํ‰๊ฐ€๋กœ ๋ถ„ํ•ดํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์งˆ๋ฌธ์€ ๋‚ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ญ์ง€?์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ๋ณธ ์†Œํ˜• ํ† ํฌ ๋ชจ๋ธ์— ํ•ด๋‹นํ•˜๋Š” ์ ์ ˆํ•œ Model์ด๋ฉฐ, ์บก์Šํ™”๋œ ๋ฐ์ดํ„ฐ, ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์•ก์„ธ์Šค ๋ฐฉ๋ฒ• ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์งˆ๋ฌธ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜์ง€?์ž…๋‹ˆ๋‹ค. Selection์ด๋ผ๊ณ  ํ•˜๋Š” Model ๋ฐ์ดํ„ฐ์˜ ์—ฌ๋Ÿฌ ํ•˜์œ„ ์„ธํŠธ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ถ”์ƒํ™”์ž…๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์งˆ๋ฌธ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝํ•˜์ง€?์ž…๋‹ˆ๋‹ค. Model์˜ Selection์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ถ”์ƒํ™”์ž…๋‹ˆ๋‹ค. Command๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Model, View, Selections, Commands

์ด ๊ฐœ๋…๋“ค์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค. ์šฐ๋ฆฌ์˜ ๋ชจ๋ธ์ด 2์ฐจ์› ์ •์ˆ˜์˜ ๋ฐฐ์—ด์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด Model์˜ View๋Š” ๋ˆ„์  ๋ง‰๋Œ€ ์ฐจํŠธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ Model์— ๋Œ€ํ•œ ๋ณด๊ธฐ๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์ค‘ ์„  ๊ทธ๋ž˜ํ”„ ๋˜๋Š” ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ ํ…Œ์ด๋ธ”์€ ์ด Model์˜ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ View์ž…๋‹ˆ๋‹ค. View๋Š” ๊ทธ๋ž˜ํ”ฝ์ผ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ View๋Š” ํ”ผ์•„๋…ธ ํ‚ค๋ณด๋“œ์— ๋ฉ”๋ชจ๋ฅผ ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ๊ณต์žฅ์—์„œ ๋ฐธ๋ธŒ ์„ค์ •์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ View ์—†๋Š” Model์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ View๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Model์—์„œ ์„ ํƒํ•œ ๊ฒƒ์€ ๋ฐ์ดํ„ฐ์—์„œ ์š”์†Œ ์—ด์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ จ์˜ ๋ฐ์ดํ„ฐ, ๋‹จ์ผ ์š”์†Œ ๋˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ Selection์ž…๋‹ˆ๋‹ค. ํ…์ŠคํŠธ Model์—์„œ๋Š” ์ผ๋ถ€ ํ…์ŠคํŠธ ์œ„์— ๋งˆ์šฐ์Šค๋ฅผ ๋†“์œผ๋ฉด ์„ ํƒ ํ•ญ๋ชฉ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‹จ์ผ ๋ฌธ์ž, ๋‹จ์–ด, ๋ฌธ์žฅ ๋˜๋Š” ์ „์ฒด ํ…์ŠคํŠธ์ผ ์ˆ˜ ์žˆ๋‹ค. ์„ ํƒ ํ•ญ๋ชฉ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ถˆ์—ฐ์† ์„ธ๊ทธ๋จผํŠธ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‹ฌ์ง€์–ด ์‚ฝ์ž…์ ์„ 0 ๊ธธ์ด ์„ ํƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Command์€ ๋‚ด Model์—์„œ Selection์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

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

์„ธ ๊ฐ€์ง€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์งˆ๋ฌธ

์ด์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋Œ€ํ™”ํ˜• ์ธก๋ฉด์— ์ดˆ์ ์„ ๋งž์ถ”๊ฒ ์Šต๋‹ˆ๋‹ค. ์‘์šฉํ”„๋กœ๊ทธ๋žจ์—์„œ ๋Œ€ํ™”ํ˜• ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•ฉ๋‹ˆ๊นŒ? ์ด๋ฅผ ์„ธ ๊ฐ€์ง€ ์งˆ๋ฌธ์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์งˆ๋ฌธ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ํ‘œ์‹œํ•˜์ง€?์ž…๋‹ˆ๋‹ค. ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ View๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ View๊ฐ€ ๋น„์ฃผ์–ผํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์งˆ๋ฌธ์€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์–ด๋–ป๊ฒŒ ๋งคํ•‘๋˜์ง€?์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ Interactor์œผ๋กœ ๋ถ€๋ฆ…๋‹ˆ๋‹ค. Interactor ์ด๋ฒคํŠธ๋ž€ ๋งˆ์šฐ์Šค ์ด๋™ ๋ฐ ํด๋ฆญ, ํ‚ค๋ณด๋“œ ํ‚ค ์ž…๋ ฅ ๋˜๋Š” ์Šค์œ„์น˜ ๋’ค์ง‘๊ธฐ, ๋‹ค์ด์–ผ ๋ณ€๊ฒฝ ๋˜๋Š” ๋””์Šคํฌ ์‚ฝ์ž…๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์‹œ์ž‘ ๋™์ž‘์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒ ์ปดํ“จํ„ฐ์—๋Š” ๋ฉ”๋‰ด ์„ ํƒ, ๋Œ์–ด์„œ ๋†“๊ธฐ, ๋‹จ์ถ” ๋ฐ ํ™•์ธ๋ž€ ํด๋ฆญ, ๊ทธ๋ฆฌ๊ธฐ ์ž‘์—…, ํŽœ, ํ•„๊ธฐ ๋ฐ ์Œ์„ฑ ์ž…๋ ฅ์œผ๋กœ ํ™•์žฅ ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ๋งˆ์šฐ์Šค ์ธํ„ฐ๋ ‰ํ„ฐ ์„ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์งˆ๋ฌธ์€ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋‹ค ํ•ฉ์น  ์ˆ˜ ์žˆ์ง€?์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ์กด์˜ Smalltalk Controller์˜ ๊ธฐ๋Šฅ์„ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ๋กœ ์ƒ์Šนํ•˜์—ฌ Selection, Command ๋ฐ Interactor ๊ฐœ๋…์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง•์„ ํฌ์ฐฉํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ Controller๋ฅผ Presenter๋ผ ๋ถ€๋ฅธ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ, ์šฐ๋ฆฌ๋Š” ์ „์ฒด์ ์ธ ๊ฒฐ๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ Model View-Presenter ๋˜๋Š” MVC์˜ ์ผ๋ฐ˜ํ™”๋œ ํ˜•ํƒœ๋กœ์„œ ๊ทธ๊ฒƒ์˜ ๊ธฐ์›์„ ์ธ์ •ํ•˜๋ฉด์„œ ์–ธ๊ธ‰ํ•œ๋‹ค. MVP์—์„œ ํ”„๋ฆฌ์  ํ„ฐ์˜ ์—ญํ• ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์ž‘ํ•œ ์ด๋ฒคํŠธ์™€ ๋™์ž‘์„ ํ•ด์„ํ•˜๊ณ  Model์„ ์˜๋„๋œ ๋ฐฉ์‹์œผ๋กœ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์ ์ ˆํ•œ Command์— ์ด๋“ค์„ ๋งคํ•‘ํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ธํ„ฐ๋ž™ํ„ฐ์™€ ํ”„๋ฆฌ์  ํ„ฐ

์ด์ „ ๋ง‰๋Œ€ ์ฐจํŠธ ์˜ˆ์ œ๋ฅผ ์™„๋ฃŒํ•˜๋ฉด ๋Œ€ํ™” ์ƒ์ž๊ฐ€ ๋งˆ์šฐ์Šค ์ถ”์  ๋ฐ ์ด๋ฒคํŠธ, ์„ ํƒ ์‚ฌ์–‘, ๋ฉ”๋‰ด ์„ ํƒ ๋ฐ ํ‚ค๋ณด๋“œ ๋“ฑ๊ฐ€๋ฌผ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

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

MVP: Model-View-Presenter

์š”์•ฝํ•˜์ž๋ฉด, ์„ธ ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์งˆ๋ฌธ

  1. ๋‚ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ญ์ง€? (Model)
  2. ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜์ง€?(Selection)
  3. ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝํ•˜์ง€?(Command)

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์งˆ๋ฌธ ์„ธ ๊ฐ€์ง€ 4) ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ํ‘œ์‹œํ•˜์ง€?(View) 5) ์ด๋ฒคํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์–ด๋–ป๊ฒŒ ๋งคํ•‘๋˜์ง€?(Interactor) 6) ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋‹ค ํ•ฉ์น  ์ˆ˜ ์žˆ์ง€?(Presenter) ๊ฐœ๋ฐœ์ž๊ฐ€ ์ „์ฒด MVP ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ๋•Œ ๋‹ต๋ณ€ํ•˜๋Š” 6๊ฐ€์ง€ ์งˆ๋ฌธ์„ ๊ตฌ์„ฑํ•œ๋‹ค.

Programming Model Frameworks

MVP ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์˜ ์ง„ํ™”ํ•˜๋Š” Taligent์˜ ๊ฐœ๋ฐœ์—์„œ, ์ด๋Ÿฌํ•œ ์ถ”์ƒํ™”์˜ ์„ค๊ณ„์™€ ๊ตฌํ˜„์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ œ๊ณต๋˜์–ด ๊ฐœ๋ฐœ์ž๋“ค์ด ์ž์‹ ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ํŠน์ • ๋ฒ„์ „์˜ ์š”์†Œ๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•˜์œ„ ๋ถ„๋ฅ˜ํ•˜๊ณ  ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Taligent ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋ณ„๋„๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค๊ณ„์™€ ๊ตฌํ˜„์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ „์ฒด์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ํ•จ๊ป˜ ์ œ์ž‘๋ฉ๋‹ˆ๋‹ค.

Taligent๋Š” IBM VisualAge 4.0์šฉ Open Class์˜ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ชจ๋ธ์„ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋ชจ๋ธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ๊ณตํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Taligent๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ ํƒ ํ•ญ๋ชฉ ๋ฐ ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ๊ณผ ๋ช…๋ น์€ ํ”ํžˆ ํ•จ๊ป˜ ์„ค๊ณ„๋˜๋ฉฐ, ํ˜„์žฌ ์ด๋Ÿฌํ•œ ์ถ”์ƒํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋‹จ์ผ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ ์ ˆํ•œ ์„ค๊ณ„ ์„ ํƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

MVP ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…๋ฆฝํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, ์ ์  ๋” ๋งŽ์€ ์˜ค๋Š˜๋‚ ์˜ ์†Œํ”„ํŠธ์›จ์–ด์—๋Š” ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•จ๊ป˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์„ฑ ์š”์†Œ ๋˜๋Š” ๋” ์ž‘์€ ํ”„๋กœ๊ทธ๋žจ ๋‹จ์œ„๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ MVP ๋ชจ๋ธ์€ ๊ตฌ์„ฑ์š”์†Œ ์•„ํ‚คํ…์ฒ˜์˜ ๋งจ ์œ„์— ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋ธ, ๋ณด๊ธฐ ๋ฐ ์ด๋ฒคํŠธ๋Š” ๊ธฐ๋ณธ ๊ตฌ์„ฑ์š”์†Œ ๋Ÿฐํƒ€์ž„์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

Taligent๋Š” OS/2 ๋˜๋Š” AIX์™€ ๊ฐ™์€ OpenDoc ํ”Œ๋žซํผ์—์„œ OpenDoc์— ๋งคํ•‘๋˜๋Š” ๊ตฌํ˜„๊ณผ ํ•จ๊ป˜ ๋‹จ์ผ ๊ตฌ์„ฑ์š”์†Œ ํ”„๋ ˆ์ž„์›Œํฌ API๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, Windows์™€ ๊ฐ™์€ OLE ํ”Œ๋žซํผ์—์„œ OLE๋กœ ๋งคํ•‘๋˜๋Š” ๊ตฌํ˜„์€ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— Java๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ด API๊ฐ€ ๋งคํ•‘๋œ ๊ตฌ์„ฑ ์š”์†Œ ๋ชจ๋ธ n๊ฐœ. ๊ทธ๋Ÿฌ๋‚˜ CommonPoint ๊ตฌ์„ฑ์š”์†Œ ๋Ÿฐํƒ€์ž„์ด ์ทจ์†Œ๋˜์—ˆ์œผ๋ฉฐ Open Class์˜ ๋ชจ๋“  ๋ฒ„์ „์˜ Taligent ๊ธฐ์ˆ ์ด ์ด์ œ OpenDoc ๋˜๋Š” OLE๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์š”์†Œ ๋Ÿฐํƒ€์ž„์— ์š”๊ตฌ๋˜๊ณ  ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.) CommonPoint์— ๋‚˜ํƒ€๋‚œ Taligent Compound Document Framework์—๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ํ”„๋ ˆ์ž„์›Œํฌ, ๋ชจ๋ธ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๊ตฌ์„ฑ์š”์†Œ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ฒฐํ•ฉ๋œ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. VisualAge 3.5์šฉ Open Class์— ๋‚˜ํƒ€๋‚œ Compound Document Framework์—๋Š” Model Framework์™€ Component Framework ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ VisualAge 4.0์šฉ Open Class์—์„œ ๋‹ค์‹œ ์†Œ๊ฐœ๋  ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

CommonPoint์— ๋‚˜ํƒ€๋‚œ Taligent Presentation Framework๋Š” CommonPoint์˜ ์ž์ฒด ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋ฆฌ์  ํ„ฐ ๋ฐ ๋Œ€ํ™”์ž ๋ฐ ๋ทฐ ์ถ”์ƒํ™”์˜ ์กฐํ•ฉ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. VisualAge 4.0์šฉ Open Class๋Š” IBM์˜ ICLUI ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋Œ€ํ™”ํ˜• ์‚ฌ์šฉ์ž ๋ฐ ์ถ”์ƒํ™”๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฏ€๋กœ VisualAge 4.0์šฉ Open Class์—์„œ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํ”„๋ฆฌ์  ํ„ฐ ์ถ”์ƒํ™”๋กœ๋งŒ ์ถ”์ƒํ™”๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, MVP ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์— ๊ธฐ์ดˆํ•˜๋Š” ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์€ ์ด๋ฒคํŠธ, ์ด๋ฒคํŠธ ์†ก์‹ ์ž ๋ฐ ์ˆ˜์‹ ๊ธฐ, ์ด๋ฒคํŠธ ์œ ํ˜• ๊ฒ€์‚ฌ, ๋ชจ๋“  ๋ชจ๋ธ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ค‘์žฌํ•˜๊ธฐ ์œ„ํ•œ ์ด๋ฒคํŠธ ์œ ํ˜• ๊ฒ€์‚ฌ ๋“ฑ์„ ์ œ๊ณตํ•˜๋Š” ์•Œ๋ฆผ ํ”„๋ ˆ์ž„์›Œํฌ์— ๊ตฌํ˜„๋œ๋‹ค.

Programming Model Classes

MVP ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์— ๋Œ€ํ•œ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์šฐ๋ฆฌ๊ฐ€ ๋…ผ์˜ํ•ด์˜จ ํด๋ž˜์Šค ๊ตฌ์กฐ์™€ ๊ฐœ๋…์˜ ์ง์ ‘์ ์ธ ์ผ์น˜์„ฑ์„ ๋ณด์—ฌ์ค€๋‹ค. ์ด ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์ด๋Ÿฌํ•œ ๊ด€๊ณ„์˜ ๋‹จ์ˆœํ•˜์ง€๋งŒ ์‹ค๋ก€๊ฐ€ ๋˜๋Š” ๊ฐœ์š”๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๊ฐ MVP ๊ฐœ๋…์—๋Š” IModel, IView, ISelection, ICommand, IInteractor ๋ฐ IPresenter์˜ ๊ธฐ๋ณธ ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ ํ•˜์œ„ ๋ถ„๋ฅ˜ํ•˜๊ณ  ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์„ ์žฌ์ •์˜ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ถ”์ƒํ™”์˜ ํŠน์ • ๋ฒ„์ „์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ˜•์‹์—์„œ IMyModel์€ myData๋ฅผ ๊ฐœ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ์›์œผ๋กœ ์ •์˜ํ•˜๊ณ  IModel์˜ getData๋ฅผ ์žฌ์ •์˜ํ•˜๊ณ  myData๋ฅผ ์ฝ๊ณ  ์“ฐ๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๋ฐฉ๋ฒ•์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. IMyView๋Š” IView์˜ drawContents ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜์—ฌ ํ™”๋ฉด์— myData ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์—ฌ myData ๋„๋ฉด์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. IMySelection์€ myData์˜ ๊ฐ„๋‹จํ•œ ์„ ํƒ์„ ์ •์˜ํ•˜๊ณ  ํ•˜์ด๋ผ์ดํŠธ์„ ํƒ์„ ๊ตฌํ˜„ํ•˜์—ฌ ํ™”๋ฉด์—์„œ ์„ ํƒ์„ ๋ช…ํ™•ํžˆ ํ•ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋ช…๋ น์–ด(์˜ˆ: ๊ฐ ๋ช…๋ น์–ด/๋ณต์‚ฌ๋ณธ)์™€ ๋ช…๋ น์–ด๋ณ„๋กœ ICommand์˜ ๋ณ„๋„ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ์™„๋ฒฝํ•œ ๊ตฌํ˜„์˜ ๊ฒฝ์šฐ ๊ฐ ๋ช…๋ น์—๋Š” doCommand, unchCommand ๋ฐ redoCommand์˜ ๋ฐฉ๋ฒ•์ด ์žˆ์–ด ์‹œ์Šคํ…œ์ด ๋ช…๋ น์–ด ์‹คํ–‰ ์ทจ์†Œ ๋ฐ ์žฌ์‹คํ–‰ ๋“ฑ์˜ ์—ฌ๋Ÿฌ ์ˆ˜์ค€์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ผ๋ฐ˜์ ์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์€ ๊ทธ๋“ค ์ž์‹ ์˜ ์ƒํ˜ธ์ž‘์šฉ๊ธฐ๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ฐœ๋ฐฉํ˜• ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” IMenu Interactor ๋˜๋Š” IButton Interactor์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ๋ฅผ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฏธ๋ฆฌ ์ •์˜๋œ IInteractor ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ IMenuInteractor์™€ ๊ฐ™์€ ๊ธฐ์กด ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ณ , ํŠน์ • ๋ ˆ์ด๋ธ”๋กœ IMenuItem ๊ฐœ์ฒด๋ฅผ ํŠน์ • ์ˆœ์„œ๋กœ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ณ , ํ˜„์žฌ ์„ ํƒ ์‹œ ํ•ด๋‹น ๋ช…๋ น์„ ํ˜ธ์ถœํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ด€๊ณ„์˜ ๋Œ€๋ถ€๋ถ„์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์„ค์ •๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ ์ ˆํ•œ ๊ฐœ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ณ  ์ •์˜ํ•˜๋Š” ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ• ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ๊ฐœ๋ฐœ์ž๋“ค์€ IPresenter์—์„œ ๊ทธ๋“ค์˜ IMyPresenter๋ฅผ ํ•˜์œ„ ๋ถ„๋ฅ˜ํ•œ๋‹ค. IPresenter๋Š” MFC, OWL ๋˜๋Š” MacApp๊ณผ ์œ ์‚ฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. IMyPresenter๋Š” ํŠน์ • ๋ชจ๋ธ, ๋ณด๊ธฐ, ์„ ํƒ, ๋ช…๋ น ๋ฐ ์ธํ„ฐ๋ž™ํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ์ด๋“ค์„ ๋ชจ๋‘ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ๊ธฐ๋Šฅ์„ฑ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Building An Application

MVP ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์˜ ์žฅ์ ์€ ์ง๊ด€์ ์ธ ์ถ”์ƒํ™” ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐœ๋ฐœ์ž์˜ ์ฝ”๋“œ์™€ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋œ ํ’๋ถ€ํ•œ ๊ธฐ๋ณธ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์ ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์‚ฐ๊ธฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ„๋‹จํ•œ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ์˜ˆ๋Š” MVP ๊ฐœ๋…์ด ๋ชจ๋‘ ๋™์‹œ์— ํ•™์Šต๋  ํ•„์š”๋Š” ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ทธ๋ณด๋‹ค๋Š” ๊ธฐ์กด์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐœ์ „ํ•จ์— ๋”ฐ๋ผ MVP ์ถ”์ƒํ™”๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ์งธ, ํ”„๋ฆฌ์  ํ„ฐ ์ถ”์ƒํ™”๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ณ„์‚ฐ๊ธฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ธฐ์กด์˜ ๋ฉ”์ธ ๋ฃจํ‹ด๊ณผ ์ด๋ฒคํŠธ ๋ฃจํ”„์— ์†์œผ๋กœ ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ํ•˜๋“œ์ฝ”์–ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ "์ž์‹ ๋“ค๋งŒ์˜ ๊ฒƒ์„" ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ MFC์™€ ๊ฐ™์€ OO ํˆด์— ์ต์ˆ™ํ•œ ๊ฐœ๋ฐœ์ž๋“ค์€ ํ”„๋ฆฌ์  ํ„ฐ์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ•˜์œ„ ๋ถ„๋ฅ˜ํ•˜๊ณ  ๊ทธ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ๋ฉ”์ธ ๋ฐ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ์ƒ์†๋ฐ›๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ข‹์€ ํ”„๋ฆฌ์  ํ„ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ ๊ธฐ๋Šฅ, ๊ธฐ๋ณธ ๋ฉ”๋‰ด ๋ชจ์Œ ๋ฐ ๊ฒน์น˜๋Š” ์ฐฝ, ๋„์›€๋ง ๊ธฐ๋Šฅ, ๊ธฐ๋ณธ ๋งˆ์šฐ์Šค ๋ฐ ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๊ณ„์‚ฐ๊ธฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ Presenter์˜ ๋ฐฉ๋ฒ• ๋‚ด์— ์“ธ ์ˆ˜ ์žˆ๊ณ , ์›์‹œ ๊ทธ๋ž˜ํ”ฝ ํ˜ธ์ถœ๋กœ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ , ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๋งˆ์šฐ์Šค ์ถ”์ , ๊ณ„์‚ฐ๊ธฐ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  MVP ์ถ”์ƒํ™”๋Š” ๋ฌด์‹œ๋  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณ„์‚ฐ๊ธฐ ์žฌ์ž‘์„ฑ์„ ์š”๊ตฌํ•˜๋Š” ๊ทธ๋ž˜ํ”ฝ ํ˜ธ์ถœ์„ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด IView๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, IView๋Š” ์ฐฝ์˜ ํฌ๊ธฐ ์กฐ์ •๊ณผ ๋…ธ์ถœ์— ๋Œ€ํ•œ ์žฌ์ž‘์„ฑ ๊ด€๋ฆฌ, ๊ธฐ๋ณธ ์ธ์‡„, ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ž‘์„ฑ๊ธฐ์™€ ํ˜‘๋ ฅํ•˜์—ฌ ํŠน์ • ๊ณ„์‚ฐ๊ธฐ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑ ๋˜๋Š” ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

Presenter์™€ View๋งŒ ์žˆ์œผ๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์›์‹œ ๊ณ„์‚ฐ๊ธฐ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ View ๋‚ด์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ์›์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ ๊ทธ ๊ณ„์‚ฐ๊ธฐ์˜ ์‹คํ–‰์˜ ์ผ์ƒ ๋™์•ˆ ์žˆ์„ ๊ฒƒ์ด๊ณ  ๊ณ„์‚ฐ๊ธฐ๊ฐ€ ๋ฉˆ์ถ”๋ฉด ๊ฒฐ๊ณผ๋Š” ์‚ฌ๋ผ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณ„์‚ฐ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ธฐ ์œ„ํ•ด IModel์„ ํ•˜์œ„ ํด๋ž˜์Šค์ธ ๊ฒฝ์šฐ, ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๊ธฐ ์ข…์ด ํ…Œ์ดํ”„์™€ ์œ ์‚ฌํ•œ ๊ณ„์‚ฐ๊ธฐ "๋ฌธ์„œ"๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ์ƒˆ๋กœ ์ž‘์„ฑ๋˜์–ด ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ๊ธฐ๋กํ•˜๊ณ  ํŒŒ์ผ์— ์ €์žฅํ•œ ํ›„ ๋‹ซ์€ ๋‹ค์Œ ๋‹ค์‹œ ์—ด์–ด์„œ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋ธ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ตฌ์„ฑ์š”์†Œ ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์ด์˜ Taligent์˜ ์—ฐ๊ฒฐ๋กœ ์ธํ•ด ์ „์ฒด ๊ณ„์‚ฐ๊ธฐ๋Š” OpenDoc ๋˜๋Š” OLE ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ๊ฐ ๋‹ค๋ฅธ OpenDoc ๋˜๋Š” OLE ๋ฌธ์„œ์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ๋ชจ๋ธ์— ๋Œ€ํ•œ ์ž‘์—…์€ ์„ธํŠธ์™€ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง์ ‘์—ฐ๊ฒฐ์ž…๋‹ˆ๋‹ค. ์ด์ œ Selection์„ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ข…์ด ํ…Œ์ดํ”„์—์„œ ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ ์š”์†Œ๋ฅผ ๊ฐ•์กฐ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์„ ํƒํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ž˜๋ผ๋‚ด๊ธฐ, ๋ณต์‚ฌ ๋ฐ ๋ถ™์—ฌ๋„ฃ๊ธฐ ๋ช…๋ น์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Selection(์ „์ฒด ๋ฌธ์„œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ)์€ OpenDoc ๋˜๋Š” ์–‘์‹ ํ•„๋“œ๋ฅผ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’์„ ์ œ๊ณตํ•˜๋Š” ๋‹ค๋ฅธ ๋ฌธ์„œ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด์ œ ์‚ฝ์ž… ์ง€์ ์ด OpenDoc ๋˜๋Š” OLE ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์ข…์ด ํ…Œ์ดํ”„์— ๋‚ด์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ์‹œ์ ๊นŒ์ง€, ํ‚ค์ž‰์˜ ์‹ค์ œ ์šด์˜์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ „์ ์œผ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์ด ๋ช…๋ น๊ณผ ํ•จ๊ป˜ ๊ตฌํ˜„๋˜๋ฉด ๊ณ„์‚ฐ๊ธฐ ์ž‘์—…์ด ์‹คํ–‰ ์ทจ์†Œ ๋ฐ ๋‹ค์‹œ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ข…์ด ํ…Œ์ดํ”„๊ฐ€ ๋’ค๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ๋‚˜์ค‘์— ๋‹ค์‹œ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ๋„๋ก ์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์„ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ํ—ˆ์šฉํ•˜๋Š” ์ผ์‹œ ์ค‘๋‹จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ช…๋ น์„ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ๊ณ„์‚ฐ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ๋กœ ๋ถ„์‚ฐํ•˜์—ฌ ๋‘ ๋ช… ์ด์ƒ์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ณต๋™ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋‚˜ ํ‚ค๋ฅผ ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ๊ณ  ๋ชจ๋‘๊ฐ€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋” ๋งŽ์€ Interactor๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ฑฐ๋‚˜ ์‹ฌ์ง€์–ด ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค๋ฉด, ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‚ค๋ณด๋“œ ๋“ฑ๊ฐ€๋ฌผ์€ ํ‚ค๋ณด๋“œ์˜ ์ˆซ์ž ํ‚คํŒจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๋ฒ„ํŠผ๊ณผ ๊ธฐ๋Šฅ์€ ๊ณผํ•™ ๋˜๋Š” ์žฌ๋ฌด ๊ณ„์‚ฐ๊ธฐ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”๋‰ด ํ•ญ๋ชฉ์€ ๊ณ„์‚ฐ๊ธฐ ๋ฒ ์ด์Šค๋ฅผ 10์ง„์ˆ˜์—์„œ 16์ง„์ˆ˜ ๋˜๋Š” 8์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฉ”๋‰ด ํ•ญ๋ชฉ์€ ๊ณ„์‚ฐ๊ธฐ์˜ ๋กœ์ผ€์ผ์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋‹ค๋ฅธ ์ˆซ์ž ๋˜๋Š” ํ†ตํ™” ์‹œ์Šคํ…œ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(Taligent์˜ International Frameworks ์‚ฌ์šฉ). ์ด๋Š” ์ˆซ์ž ๋˜๋Š” ํ†ตํ™” ์ž…๋ ฅ ๋˜๋Š” ํ‘œ์‹œ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ฝ”๋“œ ์—†์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ๋” ์ „๋ฌธ์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์ž๋ฅผ ๋งŒ๋“ค์–ด ์•ผ์‹ฌ์ฐฌ ๊ฐœ๋ฐœ์ž๋“ค์€ ํŽœ ์ž…๋ ฅ๊ณผ ์†์œผ๋กœ ์“ด ์ˆซ์ž ์ž…๋ ฅ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ๊ฒƒ์ด ๋‹จ์ˆœํ•œ ๊ณ„์‚ฐ๊ธฐ์— ๋น„ํ•ด ์ง€๋‚˜์นœ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๊ธฐ๋Šฅ์ด ๋งค์šฐ ์ƒํ˜ธ ์ž‘์šฉ์ ์ด๊ณ  ๋ฌธ์„œ ์ค‘์‹ฌ์ ์ด๋ฉฐ, ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•˜๊ณ , ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•˜๊ณ , ์Šคํฌ๋ฆฝํŒ…์ด ๊ฐ€๋Šฅํ•˜๊ณ , ํ˜‘์—…์ด ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์„ ๋งŒ๋“ค ๋•Œ ์–ผ๋งˆ๋‚˜ ๊ฐ•๋ ฅํ•œ์ง€ ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. MVP ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ๊ณผ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Client/Server

ํ•œ ๊ฐ€์ง€ ๋” ๋…ผ์˜ํ•  ์ฃผ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, MVP ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ๋ฒ„์ „์€ ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ์„œ๋ฒ„์—์„œ ๊ตฌํ˜„๋˜๋Š” MVP ์ถ”์ƒํ™” ์ค‘ ์ „์ฒด ๋˜๋Š” ์ผ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•œ๋‹ค. ๊ฐ€์žฅ ์ „ํ†ต์ ์ธ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ๋ถ„ํ• ์€ Presenter๋ฅผ ๊ฐ์•ˆํ•˜์—ฌ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๋ชจ๋ธ, ์„ ํƒ ๋ฐ ๋ช…๋ น์€ ์ผ๋ฐ˜์ ์ธ ์„œ๋ฒ„์ธก ๊ธฐ๋Šฅ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ณด๊ธฐ ๋ฐ ์ƒํ˜ธ ์ž‘์šฉ๊ธฐ๋Š” ์ผ๋ฐ˜์ ์ธ ํด๋ผ์ด์–ธํŠธ ์ธก ๊ธฐ๋Šฅ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Presenter๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๊ฒฝ๊ณ„๋ฅผ "์ŠคํŠธ๋ž˜๋”ฉ"ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ฝ”๋“œ๊ฐ€ ์–‘์ชฝ ์ธก๋ฉด์— ๋ชจ๋‘ ๋‚˜ํƒ€๋‚˜ ํ•˜๋‚˜์˜ ๊ฐœ๋…์  Presenter๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ Presenter ์ฝ”๋“œ๋Š” "fat client"์—์„œ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ„๋‹จํ•œ ์„œ๋ฒ„์ธก Presenter์—๊ฒŒ SQL์„ ์ „๋‹ฌํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ๋Œ€๋ถ€๋ถ„์˜ Presenter ์ฝ”๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ "์”ฌ" GUI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ธก์— ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„ํ• ์˜ ํŠน์„ฑ์€ ๋ถ€๋ถ„์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฒฝ๊ณ„๋ฅผ ๊ฐ€๋กœ์งˆ๋Ÿฌ ์–ด๋–ค ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ์„ ํƒํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด RPC, DCE, SQL, CORBA ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณด๋‹ค ์ •๊ตํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์–‘์ชฝ์—์„œ MVP ์ถ”์ƒํ™” ์ค‘ ์ผ๋ถ€ ๋˜๋Š” ์ „๋ถ€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—๋Š” "๋ชจ๋ธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ" ์˜ˆ์™€ ๊ฐ™์ด ์›๊ฒฉ ๋ฐ์ดํ„ฐ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” "๋Œ€์šฉ" ๋˜๋Š” "ํ”„๋ก์‹œ" ๋ชจ๋ธ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ MVP์™€ ํ•จ๊ป˜ ๊ตฌํ˜„๋˜๋Š” ์›๊ฒฉ ๋ฐ์ดํ„ฐ ์„œ๋ฒ„๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ ํƒ€์‚ฌ ๊ณ„์ธต์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„œ๋ฒ„ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์€ ํด๋ผ์ด์–ธํŠธ์ธก ์‹ค์ œ ๋ณด๊ธฐ์— ์—…๋ฐ์ดํŠธ ์ด๋ฒคํŠธ๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ๋ณด๊ธฐ ์—†๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ์›ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๋ชจ๋‘์—์„œ MVP์˜ ์ผ๋ถ€ ๋˜๋Š” ์ „๋ถ€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

Multiple versions of client/server

์‹ค์ œ๋กœ MVP ์ถ”์ƒํ™”๋ฅผ ์—ฌ๋Ÿฌ ์œ„์น˜์— ๊ณ ๋ คํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ ์ธก, ์„œ๋ฒ„ ์ธก ๋˜๋Š” ๋ถ„ํ• ์— ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์€ ๊ด‘๋ฒ”์œ„ํ•œ ์ธ๊ธฐ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์†”๋ฃจ์…˜์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ๋งŒ ์„œ๋ฒ„์— ์žˆ๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์€ "fat client"๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์›๊ฒฉ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ๋˜๋Š” ํŒŒ์ผ ์„œ๋ฒ„ ๋˜๋Š” ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ(๋ชจ๋ธ)๋งŒ ์ถ”์ƒํ™”ํ•˜๋Š” OODB์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. Model ๋ฐ Selection์ด ์„œ๋ฒ„์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ๋ณธ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. SQL์˜ "SELECT" ๋ช…๋ น์€ ์‹ค์ œ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์„ ํƒํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ์ค‘์•™ ์‹œ์ดˆ์ด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ์ฒ˜๋ฆฌ(๋ช…๋ น)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ชฝ์— ๋ชจ๋ธ, ์„ ํƒ ๋ฐ ๋ช…๋ น์ด ์„œ๋ฒ„์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น ์ฒ˜๋ฆฌ๋ฅผ ์„œ๋ฒ„๋กœ ์ด๋™ํ•˜์—ฌ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ €์žฅ๋œ ํ”„๋กœ๊ทธ๋žจ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๋˜๋Š” ๋‹ค๋ฅธ ๋ ˆ๋ฒจ์˜ ํŠธ๋žœ์žญ์…˜ ์„œ๋ฒ„๋ฅผ ๋ชจ๋ธ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์„ ์š”์ฒญํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทน๋‹จ์œผ๋กœ ์น˜์ฃ . ๋ณด๊ธฐ๋งŒ ํด๋ผ์ด์–ธํŠธ์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด, ์ด๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ์ฒญํ•œ ํ„ฐ๋ฏธ๋„์ด ํ•˜๋Š” ์ผ์ด๋‚˜ ์›๊ฒฉ ๋ณด๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด X Window ์„œ๋ฒ„๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ ๋˜๋Š” ๊ฐ„๋‹จํ•œ ํ™”๋ฉด ๊ณต์œ ์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ๋ณด๊ธฐ์ผ ๋ฟ์ด๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ์ž‘์—…์€ ์„œ๋ฒ„์—์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ณด๊ธฐ์™€ ์ธํ„ฐ๋ ‰ํ„ฐ๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ์žˆ์ง€๋งŒ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ(ํ”„๋ ˆ์  ํ„ฐ)๊ฐ€ ์„œ๋ฒ„์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ณธ์งˆ์ ์œผ๋กœ ์˜ค๋Š˜๋‚ ์˜ ์ผ๋ฐ˜์ ์ธ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์ด ํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ๋ณด๊ธฐ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ Œ๋”๋ง๋˜๋Š” HTML ํŽ˜์ด์ง€์ด๋ฉฐ ๋Œ€ํ™”์ž๋Š” ๋งˆ์šฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTML ๋งํฌ ๋˜๋Š” ์–‘์‹ ๊ธฐ๋ฐ˜ ์ž…๋ ฅ ํ•„๋“œ ๋ฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ์‹คํ–‰, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ช…๋ น ๋ฐ ๋ฐ์ดํ„ฐ๋Š” ์›น(HTTP) ์„œ๋ฒ„์— ์žˆ์Šต๋‹ˆ๋‹ค.

Java ์ง€์› ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ์˜ ์‹œ์ž‘์ด๋ฉฐ, ๋”ฐ๋ผ์„œ Presenter ์ค‘ ์ผ๋ถ€๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋…ผ๋ฆฌ๊ฐ€ ์„œ๋ฒ„ ์ธก์— ๋‚จ์•„์žˆ๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ๊ธฐ์กด์˜ ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ชจ๋“  ๋…ผ๋ฆฌ๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ชฝ์—์„œ ์ง„ํ–‰๋œ๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ์ „ํ†ต์ ์ธ PC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ถ„ํ• ๋œ ๊ฒฝ์šฐ, ๊ธฐ์กด์˜ ๋ถ„์‚ฐํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ์žฅ์†Œ์—์„œ ๋‘ ๋ฒˆ ๋ถ„ํ• ํ•˜๋ฉด ๊ธฐ์กด์˜ 3๊ณ„์ธต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ธ ์”ฌ GUI ํด๋ผ์ด์–ธํŠธ, ์ค‘๊ฐ„ ๊ณ„์ธต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง, ๋ฐฑ์—”๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„์‚ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฒฝ์šฐ ์ผ๊ณฑ ๋ฒˆ์งธ์ด์ž ๋งˆ์ง€๋ง‰ ์„ค๊ณ„ ์งˆ๋ฌธ์€ "ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ถ„ํ• ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?"์ž…๋‹ˆ๋‹ค. ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ชจ๋“  ์œ ์‚ฌ์„ฑ์€ ์ƒ๋Œ€์ ์œผ๋กœ ํ”ผ์ƒ์ ์ด๋ฉฐ, ์‹ฌ๊ฐํ•œ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ๋ฐ ๋‹ค์ค‘ ๊ณ„์ธต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์ˆ˜์ค€์˜ ์ถ”์ƒํ™” ๊ฐ„์˜ ํ›จ์”ฌ ๋” ์ •๊ตํ•œ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์นœ์ˆ™ํ•œ ๊ด‘๋ฒ”์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜๊ฐ€ MVP ๋ชจ๋ธ ๋‚ด์—์„œ ๊ฐ„๋‹จํ•œ ๋ณ€ํ˜•์œผ๋กœ ๋ชจ๋ธ๋ง๋  ์ˆ˜ ์žˆ์Œ์€ ๋ถ„๋ช…ํ•˜๋‹ค. ์ด๋Š” MVP ๋ชจ๋ธ์ด ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ฒ˜์— ๊ณตํ†ต์ ์ธ ๊ธฐ๋ณธ์ ์ด๊ณ  ํ‘œํ˜„์ ์ธ ์ถ”์ƒํ™”๋ฅผ ์บก์ฒ˜ํ•œ๋‹ค๋Š” ๋†’์€ ์‹ ๋ขฐ๋„๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ, ์šฐ๋ฆฌ๋Š” MVP ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ์„ค๊ณ„ ํŒจํ„ด์ด๋ผ๊ณ  ๋ฏฟ๋Š”๋‹ค.

์ถ”์ƒํ™”์˜ ์ด์ 

์šฐ๋ฆฌ๋Š” MVP ๊ฐœ๋…์ด ๋งŽ์€ ์ข…๋ฅ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ชจ๋ธ๋งํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ž…์ฆํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋˜ํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ตฌ๋ณ„์ด ๊ทธ๋“ค์ด ๊ฐ€์ ธ์˜ค๋Š” ์ด์ต์— ์˜ํ•ด ํ•„์š”ํ•˜๊ณ  ์ •๋‹นํ™”๋˜๋Š”์ง€ ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ. ์ด๋ฅผ ์œ„ํ•ด MVP ์‚ผ๊ฐ๋ง ๋‚ด์˜ ์ธ์ ‘ํ•œ ๊ฐ ์ถ”์ƒํ™” ์Œ์— ๋Œ€ํ•ด ์ด ์ฐจ์ด๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”๊ฐ€?๋ผ๊ณ  ๋ฌผ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Model/View ๊ตฌ๋ถ„์€ View ๋…๋ฆฝ์„ฑ์˜ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ณ„์‚ฐ๊ธฐ ๋ ˆ์ด์•„์›ƒ(๋‹ค๋ฅธ ์ˆ˜์ค€์˜ ๊ธฐ๋Šฅ, ๋ฐฐ์—ด, ๊ณ„์‚ฐ๊ธฐ์˜ ๋‹ค๋ฅธ "๋ธŒ๋žœ๋“œ")์€ ๋ชจ๋‘ ๋™์ผํ•œ ๊ธฐ์ดˆ ๊ณ„์‚ฐ๊ธฐ ์—”์ง„ ๋ฐ ๋ฐ์ดํ„ฐ ํ‘œํ˜„์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ณด๊ธฐ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Selection/Model ๊ตฌ๋ถ„์€ ๋ชจ๋ธ ๋…๋ฆฝ์„ฑ์˜ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ ๋…๋ฆฝ์„ฑ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋‚˜๋จธ์ง€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ‘œ์‹œ๋˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋˜๋Š” ํŒŒ์ผ ํ˜•์‹์„ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ฐœ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ง€์†์„ฑ, ์›๊ฒฉ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๋ฐ ๊ณต์œ ๋ฅผ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Command/Selection ๊ตฌ๋ถ„์€ ๋ช…๋ น ์žฌ์‚ฌ์šฉ์˜ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ฝ”๋“œ์—์„œ ๊ฐ ๋ฐ์ดํ„ฐ ์š”์†Œ์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ , ๋‹จ์ผ ๋ช…๋ น์„ ๋ชจ๋ธ์— ์žˆ๋Š” ํ•˜๋‚˜, ์—ฌ๋Ÿฌ ๊ฐœ ๋˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์š”์†Œ์˜ ์„ ํƒ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ๊ตฌํ˜„๋˜๋ฉด, ๋ช…๋ น์€ ๋‹ค๋ฅธ Presenter๊ฐ€ ์—ฌ๋Ÿฌ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ธฐ๋ณธ ๋˜๋Š” ํ†ตํ™” ๋ณ€ํ™˜ ๋ช…๋ น์„ ๋ฌธ์„œ์˜ ๋ฒˆํ˜ธ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ CommonPoint ์‹œ์Šคํ…œ์€ ๋ชจ๋“  ๋ฌธ์„œ์— ํŽœ์ด ์ž‘์„ฑ๋˜๊ณ , ๊ธ€๊ผด ์„ ํƒ ๋„๊ตฌ๊ฐ€ ํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒ‰ ์„ ํƒ๊ธฐ๊ฐ€ ์ƒ‰์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฒ ์ž ๊ฒ€์‚ฌ๊ธฐ๊ฐ€ ํ…์ŠคํŠธ๋ฅผ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋“ฑ์˜ ๊ธ€๋กœ๋ฒŒ ๋„๊ตฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Interactor/View ๊ตฌ๋ถ„์€ ์ž…๋ ฅ ์ผ๋ฐ˜์„ฑ์˜ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์‘์šฉํ”„๋กœ๊ทธ๋žจ ๋กœ์ง์ด๋‚˜ ๋ฐ์ดํ„ฐ ๋ Œ๋”๋ง์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ๋‹ค์–‘ํ•œ ๋ฉ”๋‰ด, ๋Œ€ํ™” ์ƒ์ž, ํ‚ค๋ณด๋“œ ๋“ฑ๊ฐ€๋ฌผ, ์ œ์Šค์ฒ˜ ๋˜๋Š” ํ•„๊ธฐ/ํŽœ ์ž…๋ ฅ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Commands ๋ฐ Interactors์—์„œ Presenter๋ฅผ ๊ตฌ๋ณ„ํ•˜๋ฉด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Logic์˜ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ๋””์Šคํ”Œ๋ ˆ์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์„ธ๋ถ€ ์ •๋ณด์—์„œ ์ถ”์ƒํ™”ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ ๋กœ์ง๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹จ์œ„ ๋ณ€ํ™˜์ด๋‚˜ ๋ณตํ•ฉ์  ์ง€๋ถ„๊ณผ ๊ฐ™์€ ์žฌ๋ฌด์  ๊ณ„์‚ฐ๊ณผ ๊ฐ™์€ ๊ณผํ•™์  ๊ณ„์‚ฐ์„ ๋‹ค๋ฅธ ๋งฅ๋ฝ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ MVP ์ถ”์ƒํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ํ”Œ๋žซํผ ๊ฐ„ ์ด๋™์„ฑ, ๋‹ค์ค‘ ํ‘œ์ค€(์˜ˆ: OpenDoc, OLE, ...), ๋ฐฐํฌ ๋ฐ ๋‹ค์ค‘ ๊ณ„์ธต ํŒŒํ‹ฐ์…”๋‹์ด ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค.

Summary

Taligent์™€ IBM์€ MVP(Model-View-Presenter)๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ๋ชจ๋ธ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Taligent์˜ VisualAge 4.0์šฉ Open Class ๊ตฌํ˜„์€ ์—ฌ๋Ÿฌ OS ํ”Œ๋žซํผ์—์„œ C++์šฉ MVP๋ฅผ ์ง€์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Taligent๋Š” ๋˜ํ•œ ํ‘œ์ค€ Java ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋  ๋งค์šฐ ๊ฒฝ๋Ÿ‰ ๋ฒ„์ „์˜ MVP๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. MVP๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Smalltalk์˜ MVC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์ผ๋ฐ˜ํ™”ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ, IBM์˜ ์ฃผ์š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์œ„ํ•œ MVP์˜ ๊ฐœ๋ฐœ์€ ์˜ค๋Š˜๋‚  ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๊ฑธ์ณ ํ†ตํ•ฉ๋œ ๊ฐœ๋… ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์›๋ณธ

MVP: Model-View-Presenter The Taligent Programming Model for C++ and Java