์ ๋ค๋ฆญ
์ ๋ค๋ฆญ์ด๋ ?
ํ์ ์ ์์กดํ์ง ์๋ ๋ฒ์ฉ ์ฝ๋๋ฅผ ์์ฑ ํ ๋๋ง๋ค ์ฌ์ฉํ๋ค.
์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ์ค๋ณต์ ํผํ๊ณ , ์ฝ๋๋ฅผ ์ ์ฐํ๊ฒ ์์ฑํ ์ ์๋ค.
Apple์ ์ํ๋ฉด Swift์์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ค ํ๋์ด๋ฉฐ, Swift ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค์๋ ์ ๋ค๋ฆญ์ผ๋ก ์ ์ธ๋์ด ์๋ค.
์๋ฅผ ๋ค์ด Array, Dictionary ๋ํ ์ ๋ค๋ฆญํ์ ์ด๋ค.
์ ๋ค๋ฆญ ํจ์
๋๊ฐ์ ์ธ์๋ฅผ ๋ฐ์ Intํ์ ์ ๊ฐ์ swapํ๋ ํจ์๋ฅผ ๊ตฌํํ๋ค๋ฉด,
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let tempA = a
a = b
b = tempA
}
์ด๋ ๊ฒ ๊ตฌํํ๋ค.
ํ๋ผ๋ฏธํฐ๊ฐ ๋ชจ๋ Intํ ์ผ๊ฒฝ์ฐ์ ์ ๋์๊ฐ๋ ์ฝ๋์ด๋ค.
ํ์ง๋ง ๋ง์ฝ์ ํ๋ผ๋ฏธํฐ ๊ฐ์ด Double, String์ผ ๊ฒฝ์ฐ์ ์๋ํ์ง ์๋๋ค.
์? ์ค์ํํธ๋ ํ์ ์ ๋ฏผ๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ Double, String์ ๋ํด์ swapํจ์๋ฅผ ์ฐ๊ณ ์ถ๋ค๋ฉด
func swapTwoDoubles(_ a: inout Double, _ b: inout Double) {
let tempA = a
a = b
b = tempA
}
func swapTwoStrings(_ a: inout String, _ b: inout String) {
let tempA = a
a = b
b = tempA
}
ํด๋น ํ๋ผ๋ฏธํฐ์ ํ์ ์ ๋ง๊ฒ ํ๋ํ๋ ๋ฐ๋ก ๊ตฌํ ํด์ผ ํ๋ค.
์๋นํ ๊ท์ฐฎ๊ณ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด๋ค.
์ด๋ด ๋ ์ ๋ค๋ฆญ์ด ์ฌ์ฉํ๋ค.
ํ์ ์ ์ ํ์ ๋์ง ์๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ๋
func swapTwoValues<T>(_ a:inout T, _ b: inout T) {
let tempA = a
a = b
b = tempA
}
์ด๋ฐ ์์ผ๋ก ์ฌ์ฉํ๋ค.
<>๋ฅผ ์ด์ฉํด์ ์์ ํ์ ์ฒ๋ผ ์ฌ์ฉํ ์ด๋ฆ(T)๋ฅผ ์ ์ธํด์ฃผ๋ฉด ๊ทธ ๋ค๋ก T๋ฅผ ํ์ ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
๐ก T = Type Parameter
T๋ผ๋ ์๋ก์ด ํ์์ด ์์ฑ๋๋ ๊ฒ์ด ์๋๋ผ, ์ค์ ํจ์๊ฐ ํธ์ถ๋ ๋ ํด๋น ๋งค๊ฐ๋ณ์์ ํ์ ์ผ๋ก ๋์ฒด๋๋ PlaceHolder์ด๋ค.
๐ก ํจ์ ๋ค์ <>๋ก ๊ฐ์ธ๋ ์ด์
T๋ ์๋ก์ด ํ์์ด ์๋๋ผ Placeholder์ด๊ธฐ ๋๋ฌธ์, Swiftํํ T๋ ์๋ก์ด ํ์ ์ด ์๋๋ค.
์ฆ ์ค์ ์ด ํ์ ์ด ์กด์ฌํ๋์ง ์ฐพ์ง๋ง๋ผ, ์๋ฆฌ ํ์ ์ด๋ค ๋ผ๊ณ ๋งํด์ฃผ๋๊ฒ์ด๋ค.
๊ทธ๋์ swapTwoValues๋ผ๋ ํจ์๋ฅผ ์ ๋ค๋ฆญ์ผ๋ก ์ ์ธํด์ฃผ๋ฉด
var someInt = 1
var anotherInt = 2
swapTwoValues(&someInt, &anotherInt) // ํจ์ ํธ์ถ ์ T๋ Int ํ์
์ผ๋ก ๊ฒฐ์
var someString = "Hello"
var anotherString = "Swift"
swapTwoValues(&someString, &anotherString) // ํจ์ ํธ์ถ ์ T๋ String ํ์
์ผ๋ก ๊ฒฐ์
T์ ํ์ ์ด ์ฒ์๋ถํฐ ์ ํด์ง๋๊ฒ์ด ์๋๋ผ, ์ค์ ํจ์๋ฅผ ํธ์ถํด์ ์ฌ์ฉํ ๋ T์ ํ์ ์ด ๊ฒฐ์ ๋๋ค.
๊ทผ๋ฐ ๋ง์ฝ ์ฌ๊ธฐ์ ํ๋ผ๋ฏธํฐ a, b ๋ชจ๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ์ธ T๋ก ์ ์ธ๋์ด ์๋ ๊ฒ์ด ๋๋ฌธ์
swapTwoValues(&someInt, &anotherString) // error
์ด๋ ๊ฒ ์๋ก ๋ค๋ฅธ ํ์ ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๋ฉด, ์ฒซ ๋ฒ์งธ someInt๋ฅผ ํตํด์ T๊ฐ ์ด๋ฏธ Int๋ก ๊ฒฐ์ ๋์๊ธฐ ๋๋ฌธ์, ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ธ anotherString์ ํ์ ์ด Int๊ฐ ์๋๋ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๋๊ฐ์ ๋ด์ฉ์ ํจ์๋ฅผ ์ค๋ฒ๋ก๋ฉ ํ ํ์ ์์ด ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๊ณ ๋ก ์ฝ๋์ ์ค๋ณต์ ํผํ๊ณ ๋ ํจ์จ์ ์ด๊ณ ์ ์ฐํ ์ฝ๋๋ฅผ ์งค ์ ์๊ฒ ๋๋ค. ๐
'๐ iOS > ๊ธฐ์ด๋ฌธ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift ๊ธฐ์ด] ํ๋กํ ์ฝ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ( POP ) (0) | 2023.06.06 |
---|---|
[Swift ๊ธฐ์ด] ๋ชจ๋๋ (0) | 2023.01.31 |
[Swift ๊ธฐ์ด] ๋งต, ํํฐ, ๋ฆฌ๋์ค (0) | 2023.01.27 |
[Swift ๊ธฐ์ด] ์ต์ ๋ ์ฒด์ด๋๊ณผ ๋น ๋ฅธ ์ข ๋ฃ (2) | 2023.01.19 |
[Swift ๊ธฐ์ด] ํด๋ก์ (0) | 2023.01.19 |