ํฐ์คํ ๋ฆฌ ๋ทฐ
[iOS] Delegate ํจํด์ด๋? (Delegate๋ฅผ ํ์ฉํ TextField ๋ค๋ฃจ๊ธฐ)
ir.__.si 2022. 12. 22. 16:21์ค๋์ iOS ๊ฐ๋ฐ์ ํ๋ฉด ๋น ์ง ์ ์๋ Delegate์ ๋ํด ์์๋ณด๋ ค๊ณ ํฉ๋๋ค!
์ฌ์ค, ์ ๊ฐ ์ฒ์ iOS ๊ฐ๋ฐ์ ์์ํ์ ๋, ์ ์ผ ์ฒ์ ๋ง์ฃผ์ณค๋ ๋๊ด์ด ์ด Delegateํจํด์ ์ดํด์๋,,,,
๊ทธ๋์, ์ดํดํ๊ธฐ ์ฝ๊ฒ test์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ค์ ์ด๋ป๊ฒ ๊ตฌํ์ด ๋๊ณ , ๋์์ด ๋๋์ง ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
(๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถ ํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ๊ธฐ๋กํ๊ธฐ์ํด ์์ฑํ๋ ๊ธ์ด๊ธฐ ๋๋ฌธ์, ์ค๋ฅ๊ฐ ์์ ์ ์์ต๋๋ค. )
.
.
.
Delegate๋?
Delegate๋ฅผ ์๊ธฐ ์ํด์๋ ๋จผ์ ‘protocol’ ์ด๋ผ๋ ๊ฐ๋ ์ ๋ํด ์์์ผ ํฉ๋๋ค.
์๋ํ๋ฉด, Delegate๋ ์ฌ๋ฌ๊ฐ์ ํ๋กํ ์ฝ์ ์งํฉ(?)์ผ๋ก ๊ตฌํ์ด ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ฌํ ํ๋กํ ์ฝ์ ๋ค๋ฅธ ์ธ์ด์ ๋น๊ต๋ฅผ ํ์๋ฉด, Java์์ ์ฌ์ฉํ๋ ‘์ถ์ ํด๋์ค'์ ๋น์ทํ๋ค๊ณ ์๊ฐํ์๋ฉด ๋ ๊ฒ ๊ฐ๋ค์!
์ถ์ํด๋์ค์๋ ์ฌ๋ฌ function์ ์ ์ํด ๋๊ธฐ๋ง ํ๊ณ , ์ค์ ๊ตฌํ์ ํ์ง ์๋๋ฐ, ํ๋กํ ์ฝ์ด ์ด๋ฌํ ์ญํ ์ ํฉ๋๋ค.
์ฆ, ์ง์ผ์ผ ํ๋ ๊ท์น์ ๊ป๋ฐ๊ธฐ๋ง ๋ง๋ค์ด ๋๊ณ ์ค์ ๋ด์ฉ์ ์ ์ํ์ง ์๋ ๊ฒ ์ด ํ๋กํ ์ฝ ์ด๋ผ๊ณ ํ๋ค.
์,, ์๋ฅผ ๋ค๋ฉด
๋ฐฅ์ ๋จน๋ค() ๋ผ๋ protocol์ ๋ง๋ค์๋ค๊ณ ์๊ฐ์ ํด ๋ด ์๋ค.
์ง๊ธ ์ฐ๋ฆฌ๋ ' ์~ ๋ฐฅ์ ๋จน๋๊ตฌ๋~ ' ์ ์ ๋๋ง ์๊ณ ์์ง, '์ด๋ค ์์์' '์ด๋์' '์ด๋ป๊ฒ' '๋๊ตฌ์' / '์ ์ ๋ฒ๋ฆฌ๋ค'
'์์์ ์น๋ค'์ ๊ฐ์ด,
์ค์ ๋ก ๋ฐฅ์๋จน๋๋ค๋ ํ์๋ฅผ ์ํ ์์๋ค์ ๋ฐ๋ก ์ ์ ์๋ ์ํ์ ๋๋ค!
๋ฐ๋ผ์ ์ด๋ฌํ ์ค์ ๋ฐฅ์ ๋จน๋ค() ๋ผ๋ ํ์๋ฅผ ์ํ ๋ด๋ถ์ ์ธ ๋ก์ง์
ํ๋กํ ์ฝ์ ์ฑํํ ์์น์์ ๊ตฌํํ๊ฒ ๋๋ ๊ฒ์ ๋๋ค!
์ ๊ทธ๋ผ ๋ณธ๊ฒฉ์ ์ผ๋ก delegate์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
.
.
.
delegate๋ ๋ฒ์ญ ํ๋ฉด,
1. ๋ํ์
2. (๊ถํ์)์์ํ๋ค
3. (๋ํ๋ฅผ)๋ฝ๋ค
๋ผ๋ ์๋ฏธ๋ก ๋ฒ์ญ์ด ๋ฉ๋๋ค.
3๊ฐ์ง ์๋ฏธ ๋ชจ๋ ๋ฌด์ธ๊ฐ๋ฅผ ๋์ ํ๋ค๋ ๋๋์ ์ฃผ์ฃ ??
์~ ๊ทธ๋ฌ๋ฉด Delegate๋ ์๋ฌด๋ฅผ ๋๋ฆฌ๋ก ํ๋ ์ฌ๋์ผ๋ก ์ดํดํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค์.
๊ทธ๋ผ ๊ฐ๋จํ ์์ ๋ฅผ ํตํด ์ค์ ๋ก ๊ตฌํ์ ํด ๋ณด๊ฒ ์ต๋๋ค!
์ ์ฌ์ง๊ณผ ๊ฐ์ด Lable, TextField, Button์ ์ปดํฌ๋ํธ๋ก ์ถ๊ฐํ๊ณ , IBOutlet , IBAction ๋ณ์๋ก ์ถ๊ฐ ํด์ค๋๋ค
๊ทธ๋ฆฌ๊ณ IBAction ํจ์ ๋ด๋ถ์ ์ฝ๋๋
@IBAction func button(_ sender : Any) {
textLabel.text = textField.text
}
๋ก ์ค์ ํ๊ณ ์คํ์ ํด์ค๋๋ค.
์์ ์ฌ์ง์ฒ๋ผ textField์ ๋ด์ฉ์ด textLabel๋ก ์ ์ ๋ฌ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค!
.
.
.
์ ๊ทธ๋ผ ์ด์ , Delegate๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ ํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
1) ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์์ ์ '์ฑํ'์ ํด์ฃผ๋ ์์ ์ ๋๋ค.
์ด์ฒ๋ผ, UIViewController ํด๋์ค ์์ UITextFieldDelegate๋ผ๊ณ ‘์ฑํ' ์์ ์ ์งํ ํด์ค๋๋ค!
์ด๋, protocol์ ‘์ ์ธ'ํ๋ค๋ ๊ฒ์ผ๋ก ์ดํดํ๋ ๊ฒ์ ์๋ชป๋ ์ดํด์ ๋๋ค.
์ฌ๋ฌ๊ฐ์ง protocol ์ค ๋๋ UITextFieldDelegate๋ฅผ ‘์ฑํ’ ํ๋ค๋ ๊ฒ์ด ์ณ์ ์๋ฏธ์ ๋๋ค!
์ดํ, ์ฝ๋๋ก ์์ฑํ ๋ถ๋ถ์ ์ฃผ์ ์ฒ๋ฆฌํด์ฃผ๊ฒ ๋๋ฉด, ๋ฒํผ์ ๋๋ฌ๋ ์๋ฌด ๋์๋ ํ์ง ์๊ฒ ๋ฉ๋๋ค!
2) ์ด์ delegate๋ฅผ ์ ํ๋ ์์ ์ฆ, ์์์๋ฅผ ์ ํด์ฃผ๋ ์์ ์ด ํ์ํฉ๋๋ค.
์ด๋ ๊ฒ viewDidLoad()ํจ์์
textfiled.delegate = self
ํด๋น ์ฝ๋๋ฅผ ์ถ๊ฐ ํด์ค๋๋ค.
์ด ์ฝ๋๋, ์์์๊ฐ ๋๊ตฌ์ธ์ง๋ฅผ ์๋ ค์ฃผ๋ ๊ณผ์ ์ผ๋ก
์ฆ, textField์ ์ค์ ์๋ฌด๋ ๋ด๊ฐ ๋์ ํ ๊ฒ!! ๋ผ๋ ์๋ฏธ์ ๋๋ค!
(์ฌ๊ธฐ์ ๋งํ๋ ๋ (self)๋ ํ์ฌ ํด๋์ค์ธ ViewController๋ฅผ ์๋ฏธํฉ๋๋ค.)
์ ๋ฆฌ๋ฅผ ํ์๋ฉด,
1) UITextFieldDelegate์ ๋ฑ๋ก๋์ด ์๋ ํ๋กํ ์ฝ๋ค์
2) textField.delegate = self ๋ผ๋ ์ฝ๋๋ฅผ ํตํด,
3) self๋ฅผ ์๋ฏธํ๋ ํ์ฌ ํด๋์ค์ธ ViewController๊ฐ textField๋ฅผ ๋์ ํด์ ๋์
ํด์ค๋ค๋ ์๋ฏธ์ ๋๋ค.
์ด๋ ๊ฒ delegate๋ฅผ ์ค์ ํ์ผ๋ฉด, ์์๋ฐ์ ViewController๋ด๋ถ์
์ค์ ๋์์ ์์ฑ ํด์ฃผ์ด์ผ ์ค์ ๋ก ๋์์ ํ๊ฒ ์ฃ ?.
์ด textFieldShouldReturn์ UITextFieldDelegate ์์ ์ ์๋์ด์๋ ํจ์์ ๋๋ค.
์ฐ๋ฆฌ๋ self = delegate๋ฅผ ์ค์ ํด ์ฃผ์๊ธฐ ๋๋ฌธ์, ํ์ฌ ViewController์์
ํด๋น ํจ์์ ๋ด๋ถ๋ฅผ ๊ตฌํํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค!
(์ฐธ๊ณ ๋ก, ์์ textFieldShouldReturnํจ์๋ ์ด๋ฆ ๊ทธ๋๋ก, 'ํ ์คํธ ํ๋์ return์ ๊ฐ์งํ๋ ํจ์ ์ ๋๋ค!)
์์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋์ํ๊ฒ ๋๋ค๋ฉด...!
์ด์ฒ๋ผ, Button ์ ๋๋ฅด์ง ์์๋,
keypad์ enter๋ฅผ ํ ์คํธ ํ๋์ return์ ๊ฐ์งํ์ฌ
๋ผ๋ฒจ์ ํด๋น ๋ด์ฉ์ด ์์ฑ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค!
.
.
.
์ฌ์ค ์ด๋ฌํ ์ด๋ฏธ ๋ง๋ค์ด์ง protocol์ด๋ delegate ์ด์ธ์๋
iOS ๊ฐ๋ฐ์ ์งํํ๋ฉด ์๋ง์ ์ปค์คํ protocol์ ์์ฑํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋, delegate์ ๋ํ ๊ฐ๋ ์ ๊ผญ ํ์คํ๊ฒ ์ดํดํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์์!