๐ง ์ ๋ค๋ฆญ์ ๋ํด์ ์์๋ณด๊ธฐ์ํด ๊ณต์๋ฌธ์๋ฅผ ๋ณด๋ฉฐ ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
์ ๋ค๋ฆญ์ ์ค์ํํธ์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ์ค ํ๋์ด๋ฉฐ ์ค์ํํธ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ถ๋ถ์ ์ ๋ค๋ฆญ ์ฝ๋๋ก ๋น๋๋ฉ๋๋ค. ์ธ์ด ๊ฐ์ด๋ ์ ์ฒด์์ ์ ๋ค๋ฆญ์ ์ฌ์ฉ ํ๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Array์ Dictionary์ ํ์ ๋ชจ๋ ์ผ๋ฐ ์ปฌ๋ ์ ์ ๋๋ค. Int๊ฐ์ ๋ณด์ ํ ๋ฐฐ์ด, String๊ฐ์ ๋ณด์ ํ ๋ฐฐ์ด, ๋๋ ์ค์ ๋ก ์ค์ํํธ์์ ์์ฑํ ์ ์๋ ๋ค๋ฅธ ์ ํ์ ๋ํ ๋ฐฐ์ด์ ์์ฑํ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ง์ ๋ ์ ํ์ ๊ฐ์ ์ ์ฅํ๋ ์ฌ์ ์ ๋ง๋ค ์ ์์ผ๋ฉฐ ํด๋น ์ ํ์ ๋ํ ์ ํ์ ์์ต๋๋ค.
Example 1
์ ๋ค๋ฆญ์ ์ฌ์ฉํ์ง ์์ ์ผ๋ฐ ํจ์
func swapTwoInt(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
Example 2
์ ํจ์๋ In-Out Parameters๋ฅผ ํตํด ๋ ๊ฐ์ ๋ณ๊ฒฝํ๋๋ก ํฉ๋๋ค.
var someInt = 3
var anotherInt = 107
swapTwoInt(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// Prints "someInt is now 107, and anotherInt is now 3"
swapTwoInt ํจ์๋ ์ ์ฉํ ํจ์์ง๋ง ์ค์ง Int๊ฐ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ง์ฝ String๊ฐ์ด๋ Double๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด ํ๋ผ๋ฏธํฐ ๊ฐ๋ง ๋ค๋ฅธ ์๋ก์ด ํจ์(swapTwoString, swapTwoDouble)๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์ค๋ณต๋๋ ํจ์๊ฐ 3๊ฐ๋ ๋๊ฒ ์ง์.
๋ง์ฝ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ค๋ฉด๐ค?
Example 3
์ ๋ค๋ฆญ์ ์ฌ์ฉํจ์ผ๋ก, ์ ๋ค๋ฆญ ํจ์๋ ์ด๋ค ํ์ ์ผ๋ก๋ ์์ ํ ์ ์๊ฒ ๋ฉ๋๋ค. swapTwoInt์์ ํจ์ ์ ์๋ถ๋ถ๋ง ์๋์ ๊ฐ์ด ๋ณ๊ฒฝํจ์ผ๋ก ์ ๋ค๋ฆญ ํจ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
Example 4
swapTwoValues์ swapTwoInts์ ๋์ผํ ๋ฐฉ์์ผ๋ก ํธ์ถํ์ง๋ง, swapTwoInts์ ๋ฌ๋ฆฌ ์ด๋ ํ ํ์ ์ผ๋ก๋ ํธ์ถํ ์ ์์ต๋๋ค. swapTwoValues๊ฐ ํธ์ถ๋๋ฉด T ๋ ํจ์์ ์ ๋ฌ๋ ํ์ ์ ๊ฐ์ผ๋ก๋ถํฐ ์ถ๋ก ๋์ด ์ฌ์ฉ๋ฉ๋๋ค. ์๋์ ๋ ๊ฐ์ง ์์์ T๋ Int์ String์ผ๋ก ์ถ๋ก ๋์ด ์ฌ์ฉ๋ฉ๋๋ค .
var someInt = 3
var anotherInt = 107
swapTwoValues(&someInt, &anotherInt)
// someInt is now 107, and anotherInt is now 3
var someString = "hello"
var anotherString = "world"
swapTwoValues(&someString, &anotherString)
// someString is now "world", and anotherString is now "hello"
Note
swapTwoValues() ๋ swap์ด๋ผ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๋ถ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ก, ๋ง์ฝ ํด๋น ํจ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Swift์ swap์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
์ด๋ฒ์๋ ์ ๋ค๋ฆญ์ ๊ธฐ๋ณธ์ ๊ฐ๋ ๊ณผ ๊ตฌํ์ ๋ํด์ ์ ๋ฆฌํด๋ณด์์ต๋๋ค!
๐ง(์๋ ์ฐธ๊ณ ๋ด์ฉ์ ํตํด ๋ ์์ธํ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค!)