[Cocoa Design Pattern] 17ch. Outlet, Target, Action

2011-06-11
**![](http://ash84.net/wp-content/uploads/1/cfile1.uf.160435454E1A59C5322140.jpg) ์•„์›ƒ๋ › ํƒ€๊นƒ ์•ก์…˜ **
** **
ํŠนํ™”๋œ ๊ธฐ๋Šฅ์„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?
ย 
**๋ฐฉ๋ฒ• 1 : ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๊ฒƒ**
โ€“ ย  ย  ย  ย ๋‹จ์  1: ํŠนํ™”๋˜๋Š” ๊ธฐ๋Šฅ์— ๋”ฐ๋ฅธ ์„œ๋ธŒ ํด๋ž˜์‹ฑ์˜ ์ˆ˜๊ฐ€์ฆ๊ฐ€ํ•จ
โ€“ ย  ย  ย  ย ๋‹จ์  2: MVC ์‹œ์Šคํ…œ์˜ ๊ฐ ์˜์—ญ์„ ์นจ๋ฒ”ํ•˜๊ฒŒ ๋จ
โ€“ ย  ย  ย  ย ๋‹จ์  3: ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ์š”๊ตฌํ• ์‹œ, ๊ฐ๊ฐ์˜ ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ๋น„์Šทํ•œ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š”ย 
ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  ์ค‘๋ณต์„ฑ์ด ์ƒ๊น€.
ย 
**๋ฐฉ๋ฒ• 2 : ๊ฐ์ฒด ๊ธฐ๋ฐ˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž์ธํ„ฐํŽ˜์ด์Šค์— ๊ณ ์œ ํ•œ ID๋ฅผย ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ย  ย  ย  ย  ย  ย ํ•ด๋‹น ID์— ๋”ฐ๋ฅธ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋งค์นญ์‹œํ‚ค๋Š” ๋ฐฉ์‹**
ย 
โ€“ ย  ย  ย ๋‹จ์  1: ๊ฐ์ฒด์™€ ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ„์˜ ID ๋ชฉ๋ก์„ ๋™์ผํ•˜๊ฒŒ ๋™๊ธฐํ™”, ์˜์กด์„ฑ ๋ฐœ์ƒ
โ€“ ย  ย  ย ๋‹จ์  2 : ํ•ด๋‹น ID์—๋Œ€ํ•œ ๊ด€๋ฆฌ ๋ฐ ๋งค์นญ์„ ์œ„ํ•œ ๋น„์šฉ์ด ๋ฐœ์ƒ
ย 
****
**์ฝ”์ฝ”์•„์˜ ์•„์›ƒ๋ ›, ํƒ€๊นƒ,์•ก์…˜ ๋””์ž์ธ ํŒจํ„ด์„ ์ด์šฉํ•˜๋ฉด?**
โ€“ ย  ย  ย ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ๊ฐ„์†Œํ™”
โ€“ ย  ย  ย ์œ ์—ฐ์„ฑ๊ณผ ์œ ์šฉ์„ฑ ์ฆ๋Œ€
** ํŒจํ„ด์ด ๋งŒ๋“ค์–ด์ง„๋™๊ธฐ**
ย 
โ€“ ย  ย  ย ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์„ค์ • ๋ฐ ์กฐ์ •๊ฐ€๋Šฅ
โ€“ ย  ย  ย ์•ก์…˜ ์ •์˜ ๊ฐ€๋Šฅ
โ€“ ย  ย  ย ํŠนํ™”๋œ ์•ก์…˜๊ณผ ๊ฑฐ๋ฆฌ๋ฅผ ๋‘์–ด ์˜์กด์„ฑ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
โ€“ ย  ย  ย ์ฝ”๋“œ ์ค‘๋ณต X
โ€“ ย  ย  ย ์ปจํ…์ŠคํŠธ ์ธ์‹ ๊ฐ€๋Šฅ
ย 
ย 
**ํŒจํ„ด์œผ๋กœ ๋ฌธ์ œํ•ด๊ฒฐ**
ย 
**์•„์›ƒ๋ ›(Outlet)**
โ€“ ย  ย  ย ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํฌ์ธํ„ฐ๋กœ ์ €์žฅํ•ด ๋†“์€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜
โ€“ ย  ย  ย ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”, ๋Ÿฐํƒ€์ž„์‹œ ์„ค์ •
โ€“ ย  ย  ย ๋ช…๋ช…๋ฒ•
ย  ย  ย  ย : IBOutlet
ย  ย  ย ย ย : ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ํƒ€์ž…์ด id ์ด๊ณ , ์ฒซ๊ธ€์ž๊ฐ€ _ ์ด ์•„๋‹Œ ๊ฒฝ์šฐ
ย ย 
ex)
Id sampleOutlet ;
IBOutlet *smapleMatrix ;
Id _sambleVar;** //not outlet**
ย 
ย 
**ํƒ€๊นƒ(Target)**
โ€“ ย  ย  ย ํŠน๋ณ„ํ•œ ์•„์›ƒ๋ ›์˜ ์ข…๋ฅ˜์ค‘ ํ•˜๋‚˜
โ€“ ย  ย  ย ์•ก์…˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์žฅ์†Œ(๋ฅผ ์ง€์ •)
โ€“ ย  ย  ย NSControl, NSActionCell,NSMenuItem ํด๋ž˜์Šค์—์„œ๋Š” target ์•„์›ƒ๋ ›๊ณผ action์ด๋ผ๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์ œ๊ณต
ย 
โ€“ ย  ย  ย nib ํŒŒ์ผ ๋กœ๋“œ์‹œ, ์•„์›ƒ๋ ‰ ์—ฐ๊ฒฐ๊ณผ ํƒ€๊นƒ โ€“ ์•ก์…˜๊ฐ„์˜ ์—ฐ๊ฒฐ๋„ ์ด๋ฃจ์–ด ์ง„๋‹ค.
โ€“ ย  ย  ย  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ƒ์—์„œ target, setTarget ๋ฉ”์„œ๋“œ๋กœ์„ค์ •๊ฐ€๋Šฅ
ย 
**์•ก์…˜(Action)**
โ€“ ย  ย  ย  ย void๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ๊ฐ์ฒด ํ•˜๋‚˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ๋ฉ”์„œ๋“œ๋ผ๋ฉด ์•ก์…˜ ๋ฉ”์„œ๋“œ๋กœ ๊ฐ€๋Šฅย 
โ€“ ย  ย  ย  ย ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ƒ์—์„œ action, setAction ๋ฉ”์„œ๋“œ๋กœ์„ค์ •๊ฐ€๋Šฅ
โ€“ ย  ย  ย  ย @selector ๋กœ ์•ก์…˜๋ฉ”์„œ๋“œ๊ฐ€ ์ทจ๊ธ‰๋˜์–ด ์ €์žฅ๋จ.
ย  ย  ย  ย  ย : objective-c ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์œ„ํ•œ ๊ณ ์œ  ์‹๋ณ„์ž
ย  ย  ย  ย  ย : ์ปดํŒŒ์ผ๋Ÿฌ ์ง€์‹œ์ž์ค‘ @selector() ์‚ฌ์šฉ
ย 
ย  ย  ย  ย  ย [someControl setAction:@selector(copy:)];
ย 
ย  ย  ย  ย : NSSelectorFromString, NSStringFromSelector
ย 
โ€“ ย  ย  ย ๊ฐ ํด๋ž˜์Šค ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ์ด๋ฒคํŠธ์˜ ๊ฒฝ์šฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค. (touch,slide.. etc)
ย 
โ€“ ย  ย  ย ์•ก์…˜๋ฉ”์‹œ์ง€๋Š” NSApplication ์˜ โ€“sendAction:to:from: ๋ฉ”์„œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฉ”์‹œ์ง€ ์ „์†ก๋จ.
ย 
โ€“ ย  ย  ย NSApplciation์€ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์˜ ์˜ˆ)
ย  ย  ย  ย [NSApplication sharedApplication];
ย 
sendAction : @selector ๋กœ ๋ณด๋‚ผ ๋ฉ”์‹œ์ง€๋ฅผ์ง€์ •
to : ์–ด๋””๋กœ ๋ณด๋‚ผ๊ฒƒ์ธ์ง€. (target)
from : ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š”๊ฐ์ฒด๋กœ ๋ฉ”์„œ๋“œ๋กœ ์ „๋‹ฌ๋  ๊ฐ์ฒด
ย 
ย ย 
**[* nib ํŒŒ์ผ์ด ๋กœ๋”ฉ๋˜๋Š” ๊ณผ์ •ย ](http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html "[http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html]๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.")**
** **
*** ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ์ฒด์™€ ์•„์›ƒ๋ ›์˜ ์—ฐ๊ฒฐ**
NSNibOutletConnector ํด๋ž˜์Šค
โ€“ ย  ย  ย ์•„์›ƒ๋ ›๊ณผ ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ„์˜ ์—ฐ๊ฒฐ๊ด€๊ณ„ ์ •๋ณด ์ €์žฅ ย  ย  ย  ย nib ํŒŒ์ผ๋กœ ๋ถ€ํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ์ฒด ๋กœ๋“œ
ย  ย  ย  ย establishConnection() ์‹คํ–‰ย : ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ์ฒด์™€ ์—ฐ๊ฒฐ๋˜์–ด์•ผ ํ•˜๋Š” ์•„์›ƒ๋ ‰์„ ์ฐพ์•„์„œ ๊ธฐ๋ก ย  ย  ย  ย ์•„์›ƒ๋ › ์ ‘๊ทผ์ž ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด, ๋Ÿฐํƒ€์ž„์‹œ, ํ•ด๋‹น ์ ‘๊ทผ์ž์ฐพ์•„์„œ ํ˜ธ์ถœ
ย 
287p ์˜ˆ์ œ
ย 
ย 
**์•ก์…˜๊ณผ ๋ฆฌ์Šคํฐ๋” ์ฒด์ธ**
ย 
**NSApplication ์˜ ์—ญํ• **
**ย **
**๋งŒ์•ฝ, sendAction:to:from: ์—์„œ to:nil ์ด๋ผ๋ฉด?**
โ€“ ย  ย  ย ๋ฆฌ์Šคํฐ๋” ์ฒด์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ, ์–ด๋А ๊ฐ์ฒด๊ฐ€ ์ฒ˜๋ฆฌํ• ์ˆ˜ ์žˆ๋Š”์ง€๊ฒ€์ƒ‰ํ›„ ์ „๋‹ฌ.
โ€“ ย  ย  ย ํ˜„์žฌ ์ปจํ…์ŠคํŠธ์— ๋ฏผ๊ฐํ•˜๊ฒŒ ๋˜๋Š”์…ˆ.
โ€“ ย  ย  ย ๋ฆฌ์Šคํฐ๋” ์ฒด์ธ์ค‘ ์ œ์ผ ๋จผ์ € ์ˆ˜์‹ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด(firstResponder)์—๊ฒŒ์•ก์…˜ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ
โ€“ ย  ย  ย ๋งŒ์•ฝ, ์ˆ˜์‹ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๊ฐ€ ์—†๋‹ค๋ฉด ๋น„ํ”„์Œ์„ ๋ƒ„
ย 
*** ์ฝ”์ฝ”์•„์˜ ์ž๋™๋ฉ”๋‰ด ํ•ญ๋ชฉ/์ปจํŠธ๋กค ๊ฒ€์ฆ๊ธฐ๋Šฅ**
ย 
โ€“ ย  ย  ย ์†ก์‹  ๊ฐ์ฒด๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ์ฒดํฌํ•จ.
โ€“ ย  ย  ย ๋™์ผํ•œ ๋ฆฌ์Šคํฐ๋” ์ฒด์ธ ์‚ฌ์šฉ
โ€“ ย  ย  ย ๋งŒ์•ฝ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ• ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ์—†๋‹ค๋ฉด,ย 
ย  ย  ย  ย  ์ด๋ฏธ๊ฐ์ฒด๋ฅผ ๋น„ ํ™œ์„ฑํ™” ์‹œํ‚ค๊ณ , ์•ก์…˜๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ์ˆ˜ ์—†๋„๋ก ์ฐจ๋‹จํ•œ๋‹ค.
ย 
โ€“ ย  ย  ย ๋ชจ๋“  ํด๋ž˜์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” action์„ ์ž๋™์œผ๋กœ ์ฐพ์•„์„œ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณต ํ•œ๋‹ค.
โ€“ ย  ย  ย IBAction ์ „์ฒ˜๋ฆฌ ๋งคํฌ๋กœ , void ํ˜€์‘๋กœ ๋ณ€ํ™˜๋จ.
โ€“ ย  ย  ย ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๊ผญ id ํ˜•์ผ ํ•„์š”๋Š” ์—†์Œ.
ย 
โ€“ ย  ย  ย (IBAction)volumeSliderDidChange:(NSSilder*) sender
ย 
**ย **
**์ฝ”์ฝ”์•„ ์‚ฌ์šฉ ์˜ˆ์ œ**
**ย  ย  ย  ย  ย  ย  ย  ย  ย  ย **
**์•„์›ƒ๋ ›/ํƒ€๊นƒ/์•ก์…˜๊ณผ MVC ํŒจํ„ด**
ย 
โ€“ ย  ย  ย ์˜ค์ง View ์™€ Controller์™€์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ.
โ€“ ย  ย  ย ๋ชจ๋ธ ์„œ๋ธŒ ์‹œ์Šคํ…œ์€ ย ์—ฐ๊ด€์„ฑ์ด ๊ฑฐ์˜ ์—†์Œ.
ย 
โ€“ ย  ย  ๋ทฐ์˜ ํŠน์ • ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ์ฒด์— ๋Œ€ํ•œ ์•ก์…˜์„ Controller์—์„œ์ฒ˜๋ฆฌํ•˜๋„๋ก ์•ก์…˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•˜๊ณ , ํ•ด๋‹น ย  ย  ย  ย  ย Controller์˜ ์•ก์…˜ ๋ฉ”์„œ๋“œ์—์„œ๋Š” ์™„์ „ ๋…๋ฆฝ์ ์ธ ๋ชจ๋ธ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด์„œ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
ย 
ย 
**ํŒจํ„ด ์‚ฌ์šฉ ๊ฒฐ๊ณผ**
ย 
โ€“ ย  ย  ย ๊ธฐ์กด์˜ ์ˆ˜๋™์ ์ธ ์ด๋ฒคํŠธ ํ•ธ๋“œ๋Ÿด ๊ธฐ๋ฐ˜์˜ ์‹œ์Šคํ…œ์˜ ๋Œ€์ฒด์ž ์—ญํ• 
โ€“ ย  ย  ย ๊ณ ์œ ํ•œ ID๋กœ ๊ด€๋ฆฌํ•  ๊ฒฝ์šฐ์˜ ๋น„ ํšจ์œจ์ ์ธ ๋ถ€๋ถ„์ด ์—†๋‹ค.
โ€“ ย  ย  ย ์œ ์—ฐ์„ฑ์ด ์ฆ๊ฐ€.
โ€“ ย  ย  ย ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„๋ฅผ ๊ทธ๋ž˜ํ”ฝ์œผ๋กœ ๊ฐ€๋Šฅ
โ€“ ย  ย  ย ์ธํ„ฐํŽ˜์ด์Šค์™€ ย ์ฝ”๋“œ ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ์ถ”๊ฐ€ ์ฝ”๋“œ๊ฐ€ ํ•„์š” ์—†๋‹ค.
โ€“ ย  ย  ย ์„œ๋ธŒ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค.ย 
ย  ย  ย  ย  ๋•Œ๋ฌธ์—์˜์กด์„ฑ์ด ์ค„์–ด๋“ค๊ณ  ์œ ์ง€/๊ด€๋ฆฌ ํ•ด์•ผํ•˜๋Š” ์ฝ”๋“œ์˜ ๋ถ„๋Ÿ‰์ด ์ค„์–ด ๋“ ๋‹ค.
#Action  #cocoa design pattern  #dev  #IOS  #iPhone dev  #outlet  #Target  #Xcode  #์•„์›ƒ๋ ›  #์•„์ดํฐ ๊ฐœ๋ฐœ  #์•ก์…˜  #ํƒ€๊นƒ