ํฐ์คํ ๋ฆฌ ๋ทฐ
์ต๊ทผ, ์ํคํ ์ฒ ๊ด๋ จ ๊ณต๋ถ๋ฅผ ์งํํ๋ฉด์ Input/Outputํจํด์ ๊ณต๋ถํด ๋ณธ ๊ฒฝํ์ด ์์ต๋๋ค..!
์ด๋ฌํ Input/Output ํจํด์ ์ฌ์ฉํ ๋, ์ ํํ ๋๊ณ ๋ฐ๋ณต๋ ์ฝ๋๋ฅผ ์ค์ด๊ธฐ ์ํด
ViewModelProtocol๋ฅผ ์ ์ธํ์ฌ ํด๋น ํ๋กํ ์ฝ์ ์ด์ฉํ๋ ๋ฐฉ์์ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
๋ณดํธ์ ์ผ๋ก, ์๋์ ๊ฐ์ด ๋ง์ด ์ ์ธํ์ฌ ์ฌ์ฉํฉ๋๋ค
protocol ViewModelType {
associatedtype Input
associatedtype Output
func transform(input: Input) -> Output
}
(๋ฌผ๋ก , MVVMํจํด๊ณผ RxSwift๋ฅผ ํผ์ฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ํด๋น ํ๋กํ ์ฝ์ disposeBag์ ์ ์ธํ๊ธฐ๋ ํฉ๋๋ค)
์ด๋, Input๊ณผ Output ์์ ๋ถ์ด์๋ associatedtype์ด ์ด๋ค ์๋ฏธ์ธ์ง ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
associatedtype ์ด๋?
์ฐ์ ์ด associatedtype์ ํ๋กํ ์ฝ์ ์ฌ์ฉ์ด ๋๋ ํค์๋์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ์ด์ ๋, 'ํน์ ํจ์์ ๋ด๋ถ๋ฅผ ๋ง๋ค์ด ๋์ง ์๊ณ , ์ฒญ์ฌ์ง๋ง์ ์ ์ํ๊ธฐ ์ํจ' ์ด๋ผ๊ณ ์๊ณ ์์ฃ ?
์ด๋ฌํ ๋ชฉ์ ๊ณผ associatedtype์ ์ญํ ์ ๊ฑฐ์ ์ผ๋งฅ์ํตํ๋ค๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค!
์ฐ๋ฆฌ๊ฐ ๋ง์ฝ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ์๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
protocol StudentProtocol{
var className: Int { get }
var name: String { get }
var age: Int { get }
}
์ด StudentProtocol์ ์ฑํํ๋ ๊ณณ์์๋ ๋ฐ๋์ className, name, age๋ฅผ ์ ์ ํด ์ค์ผํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ, className์ด "ํด๋ฐ๋ผ๊ธฐ๋ฐ" ๊ณผ ๊ฐ์ด Stringํ์ ์ ๊ฐ์ ๊ฐ์ง ์ ๋ ์์ง ์์๊น์??
์ด๋ฐ ์ํฉ์์ ์ฐ๋ฆฌ๋ associatedtype์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค!!
protocol StudentProtocol{
associatedtype WhatName
var className: WhatName { get }
var name: String { get }
var age: Int { get }
}
์ด๋ฐ ์์ผ๋ก, ํ๋กํ ์ฝ์ ์ ์๋์ด ์๋ ํ์ ์ด ์ค์ ํ๋กํ ์ฝ์ ๊ตฌํํ ๋ ๊ฒฐ์ ๋๊ฒ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋
ํค์๋๊ฐ ๋ฐ๋ก associatedtype์ ๋๋ค.
๋น์ ํ์๋ฉด, Type์ Placeholder์ ๊ฐ์ ์ญํ ์ด๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค!!
๋ฐ๋ผ์, ์ค์ StudentProtocol์ ๊ตฌํํ๋ ๊ณณ์์ className์ return์ Int, String ๋ฑ์ผ๋ก ๊ฒฐ์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
'๐ > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] @discardableResult ๋? (0) | 2023.03.06 |
---|---|
[Swift] final ํค์๋๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋?? (0) | 2023.02.08 |
[Swift] lazy ํค์๋๋? (2) | 2023.01.30 |