E D R , A S I H C RSS

Adapter

DPSC p105

ADAPTER(DP139)

Intent

ํด๋ž˜์Šค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜ˆ์ƒ๋˜๋Š” ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ์˜ ๋ณ€ํ™˜์„ ํ•œ๋‹ค. Adapter๋Š” ์ƒ์ดํ•œ ์ธํ„ฐํŽ˜์ด์Šค ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋‹ฌ๋ž๋˜ ํด๋ž˜์Šค์˜ ์ผ์„ ๋ฌถ๋Š” ์—ญํ• ์•Œ ํ•œ๋‹ค.

Discussion

Adapter๋Š” ์œ„์—๋„ ์˜๋ฏธํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ํŠน๋ณ„ํ•œ(์ผ๋ฐ˜์  ์ ‘๊ทผ์„ ๋ฒ—์–ด๋‚œ) object๋“ค์„ client๋“ค์ด ๊ณ ์œ ์˜ ๋ฐฉ๋ฒ•(Targets)์œผ๋กœ ์ ‘๊ทผํ•˜๋„๋ก ํ•ด์ค€๋‹ค.

Class Adapter

Smalltalk์—์„œ Design Patterns์˜ Adapter ํŒจํ„ด class๋ฒ„์ „์„ ์ ์šฉ ์‹œํ‚ค์ง€ ๋ชปํ•œ๋‹ค. class ๋ฒ„์ „์€ ๋‹ค์ค‘ ์ƒ์†์œผ๋กœ ๊ทธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

DP๊ทธ๋ฆผ

A C++/Smalltalk Difference

DP์˜ p147์„ ๋ณด๋ฉด Adapterํด๋ž˜์Šค๋Š” ๋ฐ˜๋“œ์‹œ ๊ทธ๊ฒƒ์˜ Adaptee๋ฅผ ํƒ€์ž…์œผ๋กœ ์„ ์–ธํ•ด์„œ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ๋งŒ ํ•œ๋‹ค.์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ํด๋ž˜์Šค์™€ ๊ทธ๊ฒƒ์—์„œ ์ƒ์†๋˜๋Š” ํด๋ž˜์Šค๋“ค๋งŒ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ(adapt)ํ• ์ˆ˜ ์žˆ๋‹ค. Smalltalk์—์„œ ์—„๊ฒฉํ•œ ํ˜•๊ฒ€์‚ฌ(Strong Typeing) ์กด์žฌ ์•Š์œผ๋ฉด, class ๊ฐ€ Adapter์—์„œ Adaptee๋กœ ๋ณด๋‚ด์–ด์ง€๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ์ˆ˜ ์žˆ๋Š” ์ด์ƒ Adaptee๊ฐ€ ์–ด๋– ํ•œ ํด๋ž˜์Šค๋ผ๋„ ์ƒ๊ด€์—†์„ ๊ฒƒ์ด๋‹ค.

DeleteMe ) ๋ง์ด ์ด์ƒํ•ด์„œ ์ฐจํ›„ ์ˆ˜์ • --์ƒ๋ฏผ

Implementation

Tailored Adapter

์ž ๊ทธ๋Ÿผ Adapter๋ฅผ ์ ์šฉ์‹œํ‚ค๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‹œ์ž‘ํ•ด ๋ณธ๋‹ค. Design Patterns(DP139)์—์„œ DrawingEditor๋Š” ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด๋“ค๊ณผ Shape์˜ ์ƒ์†๋„์ƒ์˜ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋“ค์„ ๋ชจ์•„ ๊ด€๋ฆฌํ•˜์˜€๋‹ค. DrawingEditor๋Š” ์ด๋Ÿฐ ๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด๋“ค๊ณผ์˜ ์†Œํ†ต์„ ์œ„ํ•˜์—ฌ Shape ํ”„๋กœํ† ์ฝœ์„ ๋งŒ๋“ค์–ด ์ด ๊ทœ์น™์— ๋งž๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์ด์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ text์ธ์ž์˜ ๊ฒฝ์šฐ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์กด์žฌํ•˜๊ณ  ์žˆ๋Š” TextView์ƒ์—์„œ ์ด๋ฏธ ๊ตฌํ˜„๋œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์šฐ๋ฆฌ๋Š” DrawEditior๊ฐ€ TextView์™€ ์ผ๋ฐ˜์ ์œผ๋กœ ์“ฐ์ด๋Š” Shape์™€ ๊ฐ™์ด ์ƒํ˜ธ์ž‘์šฉ ํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ TextView๋Š” Shape์˜ ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š” ๋‹ค๋Š” ์ ์ด ๋ฌธ์ œ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” TextShap์˜ Adapter class๋ฅผ Shape์˜ ์ž์‹(subclass)๋กœ ์ •์˜ ํ•œ๋‹ค. TextShape๋Š” ์ธ์Šคํ„ด์Šค๋กœ TextView์˜ ์ฐธ์กฐ(reference)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, Shapeํ”„๋กœํ† ์ฝœ์ƒ์—์„œ์˜ ๋ฉ”์„ธ์ง€๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.; ์ด๋“ค ๊ฐ๊ฐ์˜ ๋ฉ”์„ธ์ง€๋Š” ๊ฐ„๋‹จํžˆ ๋‹ค๋ฅธ ๋ฉ”์„ธ์ง€๋กœ ์บก์Аํ™”๋œ TextView์—๊ฒŒ ์ „๋‹ฌ๋˜์–ด ์งˆ์ˆ˜ ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋•Œ TextShape๋ฅผ DrawingEditor์™€ TextView์‚ฌ์ด์— ๋ถ™์ธ๋‹ค.

๊ทธ๋ฆผ

TextShape๋Š” Shape์— translator๊ฐ™์€ ํŠน๋ณ„ํ•œ ์ผ์„ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ง์ ‘ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์œผ๋กœ Shape์˜ ๋ฉ”์„ธ์ง€๋ฅผ TextView Adaptee๊ฐ€ ์ดํ•ด ํ• ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„ธ์ง€๋กœ ๋ณ€ํ™˜ ์‹œํ‚จ๋‹ค.:ํ•˜์ง€๋งŒ DrawingEditor๊ฐ€ TextSape์— ๋Œ€ํ•œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ๋•Œ TextShape๋Š” ๋‹ค๋ฅด์ง€๋งŒ ๋ฌธ๋ฒ•์ ์œผ๋กœ ๋™์ผํ•œ ๋ฉ”์„ธ์ง€๋ฅผ TextView ์ธ์Šคํ„ด์Šค์—๊ฒŒ ๋ณด๋‚ธ๋‹ค.

์ด์ฒ˜๋Ÿผ Adapter๊ฐ€ ์ •์˜๋˜์–ด์ ธ ์žˆ๋‹ค๋ฉด Adapter์™€ Adaptee์–‘์ชฝ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” ์…ˆ์ด๋‹ค.;๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” Shape ๋ฉ”์„ธ์ง€๋ฅผ TextView๋ฉ”์„ธ์ง€์— ๋งž์ถ”๋Š” ํ•ด์„ ๊ณผ์ •๊ณผ ๊ฐ™์€ Adapter๋ฅผ ์ด๋Ÿฐ ํŠน๋ณ„ํ•œ ์šฉ๋„์— ๋งž์ถ”์–ด ๋งŒ๋“ค์ˆ˜ ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฐ๊ฑธ Teilored Adapter๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์—ฌ๊ธฐ์— TextShape Adapter๊ฐ€ ๊ทธ๊ฒƒ์˜ Adaptee๋ฅผ ์œ„ํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ํ•ด์„ํ•˜๋Š” ๋ชจ์Šต์˜ interaction diagram์ด ์žˆ๋‹ค.

๊ทธ๋ฆผ

Message-Forwarding Pluggable Adapter

์šฐ๋ฆฌ๋Š” Tailored Adapter์•ˆ์—์„œ ๋ฉ”์„ธ์ง€๋ฅผ ํ•ด์„์„ ์œ„ํ•˜์—ฌ ํ•ด๋‹น ์ „์šฉ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์ˆ˜ ์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋””์ž์ธ ์‹œ๊ฐ„์— Adapter์™€ Adaptee์˜ ํ”„๋กœํ† ์ฝœ์„ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. The Adapter class๋Š” ์œ ์ผํ•œ ์ƒํ™ฉ์˜ ํ•ด์„์„ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด ์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ์˜ Adapter์˜ ๋ฉ”์†Œ๋“œ๋Š” Adaptee์— ๋Œ€ํ•œ ์•Œ๋งž์€ ๋ฉ”์„ธ์ง€๋“ค์— ๋Œ€ํ•˜์—ฌ hard-codes(์ „์šฉ ํ•จ์ˆ˜ ์ •๋„์˜ ์˜๋ฏธ๋กœ ์ƒ๊ฐ) ์ด๋‹ค


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

์ƒํ˜ธ ์ž‘์šฉ(์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ด์šฉํ•˜๋Š”์˜๋ฏธ)ํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ Model-View-Controller(MVC) ํŒจ๋Ÿฌ๋‹ค์ž„์—์„œ View ๊ฐ์ฒด๋“ค(ํ™”๋ฉด์ƒ์— ํ‘œํ˜„์„ ๋‹ด๋‹นํ•˜๋Š” widget๋“ค) ์€ ๋ฐ‘๋ฐ”ํƒ•์— ๊น”๋ ค์žˆ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋ธ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด์ง„๋‹ค. ๊ทธ๋ž˜์„œ ๋ชจ๋ธ์•ˆ์—์„œ์˜ ๋ณ€ํ™”๋Š” ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฐ˜์˜ํ•˜๊ณ  ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์—์„œ ์‚ฌ์šฉ์ž๋“ค์— ์˜ํ•œ ๋ณ€ํ™”๋Š” ๋ฐ‘์— ์œ„์น˜ํ•œ ๋˜์–ด์ง€๋Š” ๋ชจ๋ธ ๋ฐ์ดํ„ฐ(moel data)์— ๋ณ€ํ™”๋ฅผ ์œ ๋„ํ•œ๋‹ค.View๊ฐ์ œ๋“ค์ด ์ œ๊ณต๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ผ์„œ ์–ด๋– ํ•œ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์—์„œ๋ผ๋„ ๊ทธ๋“ค์€ ใ…ก๊ฑธ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ทธ๋“ค์€ ๊ทธ๋“ค์˜ ๋ชจ๋ธ๊ณผ์˜ ํ†ต์‹ ์„ ์œ„ํ•ด ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ์ฝ”์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค;ํŠน๋ณ„ํ•œ ์ƒํ™ฉ์—์„œ ๋ชจ๋ธ๋กœ ๋ณด๋‚ด์–ด์ง€๋Š” getter message๋Š” ๊ฐ’์ด๊ณ  ์ผ๋ฐ˜์ ์ธ setter message์—ญ์‹œ ๊ฐ’์ด๋‹ค.:์˜ˆ๋ฅผ ๋“ค์ž๋ฉด ๋‹ค์Œ ์˜ˆ์ œ๋Š” VisualWorks TextEditorView๊ฐ€ ๊ทธ๊ฒƒ์˜ contects๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.


~cpp 
    TextEditorView>>getContents
        | t |
        t := model valud
        ^t == nil
            ifTrue: [Text new]
            isFalse: [t]
p108

๋ฐ˜๋ฉด์— ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋ธ ์˜คํ”„์ ํŠธ๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์–‘ํ•œ ๋ชจ์Šต์„ ํ•˜๋‚˜์˜ ๊ฐ’์— ๋ณด๋‹ค๋Š” ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์ด ํ•˜๋‚˜์˜ ๋ชจ์Šต์œผ๋กœ ํ‘œํ˜„๋˜์ง€๋งŒ, ๋ชจ๋ธ ๊ฐ์ฒด๋“ค์€ value์™€ value:์— ๋ณด๋‹ค ๋ถ„์•ผ์— ์•Œ๋งž๋Š” accessor message๋ฅผ ์ข€๋” ๋งŽ์€ ์˜๋ฏธ๋ฅผ ์ง€๋‹Œ ์ด๋ฆ„์œผ๋กœ ์“ฐ์ธ๋‹ค. (DeleteMe ์ˆ˜์ • ํ•„์š”). ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ์ ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ทฐ๋‚˜ ๋ทฐ์˜ ๋ชจ๋ธ์—์„œ ๋ทฐ๊ฐ€ ๋ชจ๋ธ์ด ์ดํ•ดํ• ์ˆ˜ ์—†๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด ์žก์•„๋‚ด๋А๋ƒ ํ•˜๋Š”๊ฑฐ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ ์šฐ๋ฆฌ๋Š” Pluggable Adapter, ๊ฐ’์„ ๋ฉ”์„ธ์ง€๋กœ ๋ณ€ํ™˜ ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ œ์‹œ ํ• ์ˆ˜ ์žˆ๋‹ค.-์ €๊ฒƒ(Pluggable Adapter)์€ ๋ฉ”์„ธ์ง€๋ฅผ ๊ฐ’ ๋ฉ”์„ธ์ง€(value message)๋ฅผ ๋ฐ›์„๋•Œ ๊ทธ๊ฒƒ์˜ Adaptee๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฌ๋Š” value: ์ƒ์—์„œ๋„ ๊ฐ™์€๊ฑธ ํ•ดํ• ์ˆ˜ ์žˆ๋‹ค.

์ž ๊ทธ๋Ÿผ ์—ฌ๊ธฐ์— ์˜ˆ์ œ๋ฅผ ๋ณด์ž. ์šฐ๋ฆฌ๋Š” employee๊ด€๋ฆฌ application์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋ธ์€ ํ•˜๋‚˜์˜ ์ธ์ž์ธ, employee์˜ ์‚ฌํšŒ ๋ณด์žฅ(๋น„๋ฐ€) ๋ฒˆํ˜ธ(social security number)์˜ ํฌํ•จํ•˜๊ณ  application์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋Š” employee์˜ ์‚ฌํšŒ ๋ณด์žฅ ๋ฒˆํ˜ธ๋ฅผ ํ™”๋ฉด์ƒ์— ๋ฟŒ๋ ค์ฃผ๋Š” '์ž…๋ ฅ ๋ฐ•์Šค ๋ทฐ'๋ฅผ ํฌํ•จํ•œ๋‹ค.๋ชจ๋ธ์˜ ์—‘์„ธ์Šคํ•˜๊ณ  ์ดˆ๊ธฐํ™” ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋Š” 'socialSecurity'์™€ 'socialSecurity:'๋กœ ์ด๋ฆ„ ์ง€์–ด์ ธ ์žˆ๋‹ค. ์ž…๋ ฅ ๋ฐ•์Šค๋Š” ๋‹จ์ง€ ํ˜„์žฌ์˜ ์‚ฌํšŒ ๋ณด์žฅ ๋ฒˆํ˜ธ๋ฅผ ๋ฟŒ๋ฆฌ๊ธฐ๋งŒ ํ•œ์ง€๋งŒ ๋ชจ๋ธ์˜ ๊ฐ’์„ ์š”์ฒญํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ์„ ์•Œ๊ณ ์žˆ๋‹ค.( DeleteMe ์ˆ˜์ • ํ•„์š” ) ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” value mesage๋ฅผ socialSecurity๋กœ ๋ณ€ํ™˜ ํ•ด์•ผ ํ•œ๋‹ค.์šฐ๋ฆฌ๋Š” Pluggable Adapter ๊ฐ์ฒด๋ฅผ ์ด๋Ÿฐ ๋ชฉ์ ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋‹ค.์ž ์šฐ๋ฆฌ์˜ ์˜ˆ์ œ๋ฅผ ์œ„ํ•œ interaction ๋‹ค์ด์–ด ๊ทธ๋žจ์„ ๋ณด์ž

๊ทธ๋ฆผ

์ด ๋‹ค์ด์–ด ๊ทธ๋žจ์€ ๋‹จ์ˆœํ™” ์‹œํ‚จ๊ฒƒ์ด๋‹ค.;๊ทธ๊ฒƒ์€ ๊ฐœ๋…์ ์œผ๋กœ Pluggable Adpter์˜ ์ˆ˜ํ–‰ ๋ฐฉ์‹์„ ๋ฌ˜์‚ฌํ•œ๋‹ค.๊ทธ๋Ÿฌ๋‚˜, Adaptee์—๊ฒŒ ๋ณด๋‚ด์ง€๋Š” ๋ฉ”์„ธ์ง€๋Š” ์ƒ์ง•์ ์œผ๋กœ ํ‘œํ˜„๋˜๋Š” ๋ฉ”์„ธ์ง€๋“ , ์šฐํšŒํ•ด์„œ ๊ฐ€๋Š” ๋ฉ”์„ธ์ง€๋“  ์ด๋Ÿฐ๊ฒƒ๋“ค์„ ํ—ˆ๊ฐ€ํ•˜๋Š” perform:์„ ์ด์šฉํ•˜์—ฌ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.|Pluggable Adpater๋Š” Symbol๋กœ์„œ ๋ฉ”์„ธ์ง€ ์ˆ˜์ง‘์ž๋ฅผ ๊ฐ€์งˆ์ˆ˜ ์žˆ๊ณ , ๊ทธ๊ฒƒ์˜ Adaptee์—์„œ ๋งŒ์•ฝ ๊ทธ๊ฒƒ์ด ํ‰๋ฒ”ํ•œ ๋ฉ”์„ธ์ง€๋ผ๋ฉด ์ˆ˜์ง‘์ž์ธ perform์—๊ฒŒ ์–ด๋– ํ•œ ์‹œ๊ฐ„์—๋„ ์ด์•ผ๊ธฐ ํ• ์ˆ˜ ์žˆ๋‹ค.|์˜ˆ๋ฅผ ๋“ค์–ด์„œ selector ๊ฐ€ Symbol #socialSecurity๋ฅผ ์ฐธ์กฐํ• ๋•Œ ์ „๋‹ฌ๋˜๋Š” ๋ฉ”์„ธ์ง€์ธ 'anObject socialSecurity'๋Š” 'anObject perform: selector' ๊ณผ ๋™์ผํ•˜๋‹ค. |์ด๊ฒƒ์€ Pluggable Adapter๋‚˜ Message-Based Pluggable Adapter์—์„œ ๋ฉ”์„ธ์ง€-์ „๋‹ฌ(message-forwading) ๊ตฌํ˜„๋˜๋Š” ํ‚ค์ด๋‹ค.| Adapter์˜ client๋Š” Pluggable Adapter์—๊ฒŒ ๋ฉ”์„ธ์ง€ ์ˆ˜์ง‘์ž์˜ value์™€ value: ๊ฐ„์— ํ†ต์‹ ์„ ํ•˜๋Š”๊ฑธ ์•Œ๋ฆฐ๋‹ค,๊ทธ๋ฆฌ๊ณ  Adapter๋Š” ์ด๋Ÿฐ ๋‚ด๋ถ€์  ์ˆ˜์ง‘์ž๋ฅผ ๋ณด๊ด€ํ•œ๋‹ค.|์šฐ๋ฆฌ์˜ ์˜ˆ์ œ์—์„œ ์ด๊ฒƒ์€ client๊ฐ€ 'Symbol #socialSecurity์™€ value ๊ทธ๋ฆฌ๊ณ  '#socialSecurity:'์™€ 'value:' ์ด๋ ‡๊ฒŒ ๊ด€๊ณ„ ์ง€์–ด์ง„ Adapter์™€ ์ด์•ผ๊ธฐ ํ•œ๋Š”๊ฑธ ์˜๋ฏธํ•œ๋‹ค.|์–‘์ชฝ์ค‘ ์•„๋ฌด ๋ฉ”์„ธ์ง€๋‚˜ ๋„์ฐฉํ• ๋•Œ Adapter๋Š” ๊ด€๋ จ์žˆ๋Š” ๋ฉ”์„ธ์ง€ ์„ ํƒ์ž๋ฅผ ๊ทธ๊ฒƒ์˜ 'perform:'.์„ ์‚ฌ์šฉํ•˜๋Š” ์ค‘์ธ Adaptee ์—๊ฒŒ ๋ณด๋‚ธ๋‹ค.|์šฐ๋ฆฌ๋Š” Sample Code๋ถ€๋ถ„์—์„œ ๊ทธ๊ฒƒ์˜ ์ •ํ™•ํ•œ ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ•์„ ๋ณผ๊ฒƒ์ด๋‹ค.

Parameterized Adapter

Alternative Solutions

Sambple Code

Known Smalltalk Uses

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:26
Processing time 0.0102 sec