์๋
ํ์ธ์, ๊ฐ์์
๋๋ค! ์ค๋์ ์ต์คํ
์
์ ๋ํด์ ๋ฐฐ์๋ณด๋๋ก ํ ๊ฒ์.
๋ณธ ํฌ์คํ
์ ํจ์คํธ์บ ํผ์ค์ 30๊ฐ ํ๋ก์ ํธ๋ก ๋ฐฐ์ฐ๋ iOS์ฑ๊ฐ๋ฐ with Swift ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์์ต๋๋ค.
extension(์ต์คํ ์ ) ์ด๋?
extension(์ต์คํ ์ , ํ์ฅ) ๊ธฐ๋ฅ์ ์ด์ ์ ๋ด๋ถ ์์ค๋ฅผ ์ ๊ทผํ ์ ์๋ ์๋ณธ ํ์ ๋ค์ ๋ํด ์๋ก์ด ๊ธฐ๋ฅ์ ๋ถ์ฌํ ์ ์๋ ๋ฌธ๋ฒ์ด๋ค. ๊ธฐ์กด์ ํด๋์ค, ์ด๊ฑฐํ, ํ๋กํ ์ฝ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ค. ์ต์คํ ์ ์ด ํ์ ์ ์ถ๊ฐํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ฐ์ฐ ํ์ ํ๋กํผํฐ / ์ฐ์ฐ ์ธ์คํด์ค ํ๋กํผํฐ ์ถ๊ฐ ๊ธฐ๋ฅ
- ํ์ ๋ฉ์๋ / ์ธ์คํด์ค ๋ฉ์๋ ์ ์
- ์๋ก์ด ์์ฑ์ (initializer)์ ์ ๊ณต
- subscripts ์ ๊ทผ๋ฐฉ์ ์ ์
- ์ค์ฒฉ ํ์ ์ ์ ์ ๋ฐ ์ฌ์ฉ
- ํน์ ํ๋กํ ์ฝ์ ์ค์ํ ์ ์๋๋ก ๊ธฐ๋ฅ ์ถ๊ฐ
์ฐธ๊ณ ๋ก ์ต์คํ ์ ํ์ ์๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ง๋ง, ๊ธฐ์กด์ ์๋ ๊ธฐ๋ฅ์ ์ค๋ฒ๋ผ์ด๋ ํ ์๋ ์๋ค. ์ด์ ์ต์คํ ์ ์ผ๋ก ์ถ๊ฐํ ์ ์๋ ๊ธฐ๋ฅ์ ์์ธํ ์์๋ณด์. ์ด๋ฒ ํฌ์คํ ์์๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ (์ฐ์ฐ, ๋ฉ์๋๊ธฐ๋ฅ์ถ๊ฐ)๊ธฐ๋ฅ ์์ฃผ๋ก๋ง ์ผ๋จ ๊ณต๋ถํ๋ค.
extension ๊ธฐ๋ณธ ํํ
extension SomeType {
// ์ถ๊ฐ ๊ธฐ๋ฅ
}
์ด์ ์๋์ฝ๋๋ฅผ ๋ณด๋ฉฐ ์ฐ์ฐ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๋ ์ต์คํ ์ ์ฝ๋๋ฅผ ์ดํดํด๋ณด์.
1. extension์ผ๋ก ์ฐ์ฐ ํ๋กํผํฐ ์ถ๊ฐํ๊ธฐ
extension Int {
var isEven: Bool {
return self % 2 == 0
}
var isOdd: Bool {
return self % 2 == 0
}
}
var number = 3
number.isOdd
//prints "true"
number.isEven
// prints "false"
์ด์ฒ๋ผ ์ฐ์ฐํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ ์ ์๋ค. ์ฃผ์ํด์ผํ ์ ์, ์ต์คํ ์ ์ ์ฐ์ฐ ํ๋กํผํฐ๋ ์ถ๊ฐํ ์ ์์ง๋ง, ์ ์ฅ ํ๋กํผํฐ๋ ์ถ๊ฐํ ์ ์๋ค๊ณ ํ๋ค. ๋ ํ์ ์ ์ ์๋์ด์๋ ๊ธฐ์กด์ ํ๋กํผํฐ์ ํ๋กํผํฐ ๊ฐ์์๋ฅผ ์ถ๊ฐํ ์ ์๋ค๊ณ ํ๋ค.
2. extension์ ํตํด ํ์ ์ ๋ฉ์๋ ์ถ๊ฐํ๊ธฐ
Stringํ์ ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํด์ ๊ธฐ๋ฅ์ ํ์ฅํด๋ณด์.
extension String {
func convertToInt() -> Int? {
return Int(self)
}
}
var string = "0"
string.convertToInt()
// prints 0 (์ ์ํ์ผ๋ก ์ถ๋ ฅ๋จ)
์ด๋ ๊ฒ ์ต์คํ ์ ์ ํตํด ๊ธฐ์กด์ ์ ์๋์ด ์๋ ํ์ ์ ํ๋กํผํฐ, ๋ฉ์๋๋ฅผ ์ถ๊ฐํด์ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์๋ค.
3. extension์ ์์ฑ์(initializer)์ถ๊ฐํ๊ธฐ
๊ธฐ์กด ํ์ ์ ์๋ก์ด ์์ฑ์๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
3.1) class์์์ ์์ฑ์ ์ถ๊ฐ
๊ธฐ๋ณธ ์ ์๋ก ๋ณด๋ฉด, Designated initializer๋ ์ถ๊ฐํ ์ ์๊ณ , convenience initializer๋ง ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, deinitializer๋ ์ถ๊ฐํ ์ ์๋ค๊ณ ํ๋ค.
์์ฑ์๋ ํ๊ฐ์ง ์ข ๋ฅ๋ง ์์์ค ์์๋๋ฐ ์ด๊ฒ ๋ฌด์จ๋ง์ธ๊ฐ ์ถ์ด์ ์ ๊น ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ์์ฑํด๋ณด์. ์ด ๋ชจ๋ ๊ฐ๋ ์ ์๊ณ ๋์ด๊ฐ๋ ค๋ฉด ๋ ์์ฑ์์ ๋ํ ๊น์ ์ดํด์ ๊ณต๋ถ๊ฐ ํ์ํ๋ฏ๋ก, ์ง๊ธ์ extension์ ๋ํด์๋ง ๊ณต๋ถํ๊ณ ๋์ด๊ฐ๋ณด์.
์ผ๋จ ๊ฐ์ฅ ์ดํดํ๊ธฐ ์ฌ์ ๋, deinit์ extension์ผ๋ก ๊ตฌํ์ด ์๋๋ค.
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, init ๋ extension์ผ๋ก ๊ตฌํ์ด ๋ถ๊ฐ๋ฅํ๋ค. ์ฆ, ์ฐ๋ฆฌ๊ฐ ์์ฃผ ์ฌ์ฉํ๋ init์ Designated initializer์ด
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, ๋ญ์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง convenience init์ extension์ผ๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
3.2) struct์์ ์์ฑ์ ์ถ๊ฐ
extention์ผ๋ก ์์ฑ์๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ, memberwise initializer๋ฅผ ๋ณด์กดํ๋ฉฐ ์๋ก์ด ์์ฑ์๋ฅผ ์ถ๊ฐํ ์ ์๋ค. memberwise ์์์๋, ๊ตฌ์กฐ์ฒด๋ ํด๋์ค์ ๋ฌ๋ฆฌ ๊ธฐ๋ณธ์์ฑ์๋ฅผ ์๋์ผ๋ก ์ ๊ณตํ๋๋ฐ, ์ด ๊ธฐ๋ณธ์์ฑ์๋ฅผ ๋ฐ๋ก memberwise intializer๋ผ๊ณ ํ๋ค.
์ ์ฝ๋์ฒ๋ผ, struct๋ ์์ฑ์๋ฅผ ์์ฑํด์ฃผ์ง ์์๋ ๊ธฐ๋ณธ์์ฑ์(memberwise initializer)๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ ์์ ์ธ ์ฝ๋์ด์ง๋ง, class๋ init์ ์ง์ ํด์ฃผ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋๋ค. ๊ธฐ๋ณธ์์ฑ์๋ฅผ ์ง์ ํด์ฃผ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค!
๋ฐ๋ฉด์ ์์ฑ์๋ฅผ ์์ฑํด์ฃผ์ง ์์๋ struct๋ ๊ธฐ๋ณธ์์ฑ์๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์์ฒ๋ผ ์๋ฌ๊ฐ ๋์ง์๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ์ด๋ฐ๊ฒ์ด ๋ฐ๋ก ๊ธฐ๋ณธ์์ฑ์!! (memberwise initializer)
์ด์จ๋ ์ด์ ๊ธฐ๋ณธ์์ฑ์์ ๋ํ ๊ฐ๋ ์ ์ฌ๊ธฐ์ ๋ง๋ฌด๋ฆฌํ๊ณ , extension์ ํตํด ๊ตฌ์กฐ์ฒด์ ์์ฑ์๋ฅผ ๊ตฌํํด๋ณด์.
์ด๋ ๊ฒ ๊ตฌ์กฐ์ฒด ํ์ ์์ฑ์๋ฅผ extension์ ํตํด ์ถ๊ฐํด์ฃผ์๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์์ ๊ฐ์ด ๊ธฐ๋ณธ์์ฑ์๋ ์ฌ์ฉ๊ฐ๋ฅํ๊ณ , ์ถ๊ฐ๋ก ๋ด๊ฐ ์์ฑํ ์์ฑ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. extension์ ํ์ฉํด์ struct์ ์์ฑ์๋ฅผ ์ถ๊ฐํ๋ฉด, ์ด memberwise initializer๋ฅผ ๋ณด์กดํ๋ฉด์ ์๋ก์ด ์์ฑ์๋ฅผ ์ถ๊ฐํ ์ ์๋ค๋ ๊ฒ์ด๋ค
์ฐ์ ๊ฐ์ฅ ์์ฃผ ์ฐ์ด๋ extension๊ธฐ๋ฅ์ ๋ํด์ ์์๋ณด๊ณ ๊ฐ๋จํ ์์ ๋ฅผ ๊ตฌํํด๋ณด์๋ค. ์ด์ธ์๋ ๋ค์ํ๊ฒ ํ์ฅ๊ธฐ๋ฅ์ผ๋ก ๊ตฌํํ ์ ์๋ ๊ธฐ๋ฅ์ด ๋ง์๋ฐ, ์ด๋ ์๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด๋ณด๊ณ , ๊ณต๋ถํด๋ณด๋๋ก ํ์ ^^/ ์์ , ๊ธฐ๋ฅ๋ณ๋ก ์ ๋ฆฌ๋ฅผ ์ํด๋์ผ์ จ๋ค!
https://babbab2.tistory.com/124
์ด๋ ๊ฒ extension๊ธฐ๋ฅ์ ์์ ๊ฐ์ด ๊ตฌ์กฐ์ฒด, ํด๋์ค, ์ด๊ฑฐํ, ํ๋กํ ์ฝ์ ์ถ๊ฐ ๊ตฌํ๋ถ, ์ ์ฝ์ฌํญ, ๊ธฐ๋ฅ ๋ฑ์ ์ ์ํ ์ ์๋ ์ ์ฉํ ๊ธฐ๋ฅ์ด๋ค. ๋ํ extension์ ํตํด ํน์ ํ์ ์ ๊ธฐ๋ฅ ๋ฐ ์ค์ํ๋ ํ๋กํ ์ฝ ๋ณ ๊ตฌํ ๋ถ๋ฅผ ๋ถ๋ฆฌํด์ ๋ณด๋ค ์ฝ๋๋ฅผ ๋ณด๊ธฐ ์ฝ๊ฒ ์งค ์๋ ์๋ค๊ณ ํ๋ค. ํ์ง๋ง ํด๋น ๊ธฐ๋ฅ์ ๋ฌด๋ถ๋ณํ๊ฒ ์ฌ์ฉํ ๊ฒฝ์ฐ ์คํ๋ ค ๊ฐ๋ ์ฑ์ ํด์น ์ ์์ผ๋ ์ ์ ํ๊ฒ ์ฌ์ฉํ๋๋ก ํ์!
'Swift > Swift BASIC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ๊ธฐ์ด ๋ฌธ๋ฒ - ์ต์ ๋ ์ฒด์ด๋ (Optional Chaining) (ํจ์์ ๋์ ๋๋ฆฌ-()?, []?, ?()?, ?[]?) (0) | 2022.01.20 |
---|---|
[Swift] ๊ธฐ์ด ๋ฌธ๋ฒ - ์ด๊ฑฐํ (enum) (0) | 2022.01.20 |
[Swift] ๊ธฐ์ด ๋ฌธ๋ฒ - ํ๋กํ ์ฝ (protocol) (0) | 2022.01.19 |
[Swift] ๊ธฐ์ด ๋ฌธ๋ฒ - assert (0) | 2022.01.19 |
[Swift] ํ์ ์บ์คํ (Type casting) (0) | 2022.01.19 |