Generic : ํฌ๊ด์ ์ธ
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ Array, Dictionary๋ Generic์ผ๋ก ์ด๋ฃจ์ด์ง ์ปฌ๋ ์ ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ด์ ๋ง๋ค ๋ Int์ String ๋ฐฐ์ด์ ๋ง๋ค๊ธฐ ์ํด ์ ์ธํ๋ ๋ฐฉ์์ด ๋๊ฐ๋ค๋ ๊ฒ์ ๋ ์ฌ๋ฆฌ๋ฉด ๋๋ค.
๋ง์ฝ ๋ ์ ์๋ฅผ ํฉ์ณ์ฃผ๋ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ํ ๋,
func whatIfSwap(_ a: Int, _ b: Int) {
print("a: \(b), b: \(a)")
}
whatIfSwap(3,5) // a: 5, b: 3
whatIfSwap(3.5,5.5) // error
whatIfSwap("hi","wonseok") // error
๋ฐ์ดํฐํ์ ์ด int๋ผ๋ฉด ์ ์์ ์ผ๋ก ์ถ๋ ฅ ๋์ง๋ง, double์ด๋ string์ผ ๊ฒฝ์ฐ์๋ ๋๊ฐ์ ๋์์ ํ๋ ํจ์๋ฅผ ์ฌ๋ฌ๊ฐ ๋ง๋ค์ด ์ฃผ์ด์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
์ด๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด Generic์ด๋ค.
func whatIfSwap<T>(_ a: T, _ b: T) {
whatIfSwap("a: \(b), b: \(a)")
}
whatIfSwap(3,5) // a: 5, b: 3
whatIfSwap(3.5,5.5) // a: 5.5, b: 3.5
whatIfSwap("hi","wonseok") // a: wonseok, b: hi
์ด๋ ๊ฒ ํด์ฃผ๋ฉด ์ด ํจ์ ํ๋๋ก Int, String, Double ํ ํจ์๋ฅผ ๊ฐ๊ฐ ๋ง๋ค์ง ์์๋ ์ฌ์ฉํ ์ ์๋ค.
์ ์ฐํจ, ์ฌ์ฌ์ฉ์ฑ
T๋ ํ์ ํ๋ผ๋ฏธํฐ๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ, T๋ ๊ทธ์ placeholder์ด๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ์จ๋ ๋ฌด๋ฐฉํ๋ค.
func swap<Wonseok>(_ a: Wonseok, _ b: Wonseok) {
print("a: \(b), b: \(a)")
}
ํ์ง๋ง Swift๋ ์์ ํ๋ฉฐ ํ์ ์ ๊ต์ฅํ ๋ฏผ๊ฐํ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ Generic์ ํตํด ์์ ๋๋ฅผ ๋ถ์ฌํ์์ด๋ ์ ํจ์๊ฐ ํธ์ถ๋ ๋ ์ ํด์ง a์ b์ ๋ฐ์ดํฐ ํ์ ์ด ์๋ก ๋ค๋ฅธ ๊ฒ์ ํ์ฉํ์ง ์๋๋ค.