Skip to content

Latest commit

ย 

History

History
53 lines (35 loc) ยท 1.68 KB

Generic.md

File metadata and controls

53 lines (35 loc) ยท 1.68 KB

Generic์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.

์ฐธ๊ณ ํ•œ ์ข‹์€ ๊ธ€

Answer

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์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.