๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS/iOS

[iOS ๋ฉด์ ‘์งˆ๋ฌธ] ์ œ๋„ค๋ฆญ์ด๋ž€? (Swift Generic)

by Fomagran ๐Ÿ’ป 2020. 12. 15.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค!

 

์˜ค๋Š˜ ์•Œ์•„๋ณผ ์ฃผ์ œ๋Š” ์ œ๋„ˆ๋ฆญ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ œ๋„ˆ๋ฆญ์„ ๋“ค์–ด๋ณด๊ธฐ๋งŒํ•˜๊ณ  ์ œ๋Œ€๋กœ ์•Œ์•„๋ณด๋Š”๊ฑด ์ด๋ฒˆ์ด ์ฒ˜์Œ์ธ๋ฐ ์ •๋ง ์œ ์šฉํ•œ ๋…€์„์ด๋ผ์„œ ๊ณต์œ ๋“œ๋ฆด๋ ค๊ณ  ํ•ด์š”!

 

๋ฐ”๋กœ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

Generic


๊ณต์‹ ๋ฌธ์„œ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค๋ช…ํ•˜๋„ค์š”.

 

์‹ค์ œ๋กœ Swift์— ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์‚ดํŽด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด <T>๋ผ๋Š” ํƒ€์ž…์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 

 

์œ„ ์„ค๋ช…๋งŒ์œผ๋กœ๋Š” ์ดํ•ด๊ฐ€ ํž˜๋“œ์‹ค๊ฑฐ์—์š”. ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ด…์‹œ๋‹ค!

 

๋งŒ์•ฝ old์™€ new๋ผ๋Š” ๊ธ€์ž๋ฅผ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์„œ๋กœ ๋ฐ”๊พธ๊ณ ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”?

 

๋ฐ”๋กœ ์•„๋ž˜์ฒ˜๋Ÿผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„๊ฑฐ์—์š”.

 

๋งŒ์•ฝ old์™€ new๊ฐ€ ์ˆซ์ž๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ• ๊นŒ์š”?

 

๋ฐ”๋กœ ์•„๋ž˜์ฒ˜๋Ÿผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„๊ฑฐ์—์š”.

 

๋งŒ์•ฝ์— ๋ฉ”์†Œ๋“œ์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํƒ€์ž…์„ ์•Œ์•„์„œ ์•Œ๊ณ  ๋ฐ”๊ฟ”์ฃผ๋ฉด ์–ผ๋งˆ๋‚˜ ํŽธํ• ๊นŒ์š”?

 

๋งˆ์น˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ˆซ์ž๊ฐ€ ๋“ค์–ด์™”๋‹ค๋ฉด ์•Œ์•„์„œ ์ˆซ์ž๋ผ๋ฆฌ ๋ฐ”๊ฟ”์ฃผ๊ณ  ๊ธ€์ž๊ฐ€ ๋“ค์–ด์™”๋‹ค๋ฉด ๊ธ€์ž๋ผ๋ฆฌ ๋ฐ”๊ฟ”์ฃผ๊ณ 

 

์ด๋Ÿฐ ๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ œ๋„ˆ๋ฆญ ์ž…๋‹ˆ๋‹ค!!

 

์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฉ”์†Œ๋“œ๋’ค์— <T>๋ฅผ ๋ถ™์—ฌ์ฃผ์‹œ๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํƒ€์ž…์„ T๋กœ ์ •ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. (์•„๋ž˜ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”!)

 

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์œ„์™€ ๊ฐ™์ด old = n์œผ๋กœ new๋ฅผ o๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฑด ์˜ค๋ฅ˜๊ฐ€ ๋‚ ๊ฑฐ์—์š”.

 

๋ฌด์Šจ ์˜ค๋ฅ˜๋ƒ๋ฉด old์™€ new๋Š” Int๋กœ ๋˜์–ด์žˆ์ฃ ? ํ•˜์ง€๋งŒ ํ•จ์ˆ˜์•ˆ์— ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํƒ€์ž…์€ ์•„์ง ์ •ํ•ด์ง€์ง€ ์•Š์€ ์ƒํƒœ์—ฌ์„œ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค๋Š” ์†Œ๋ฆฌ์—์š”.

 

In- Out


์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•ด์ค„ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ด๋ƒ ๋ฐ”๋กœ inout ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

inout ํŒŒ๋ผ๋ฏธํ„ฐ๋ž€?


๊ณต์‹ ๋ฌธ์„œ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค๋ช…๋˜์–ด ์žˆ์–ด์š”.

 

์ด ๋ง์ด ๋ฌด์—‡์ด๋ƒ? ์›๋ž˜ ๋ฉ”์†Œ๋“œ์— ์žˆ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ƒ์ˆ˜๋กœ ๋˜์–ด์žˆ์–ด์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜๊ฐ€ ์—†์ž–์•„์š”?

 

ํ•˜์ง€๋งŒ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’๋„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—์š”!

 

์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ด์š”. ๋ฉ”์†Œ๋“œ์˜ ํƒ€์ž… ์•ž์— inout์„ ๋ถ™์—ฌ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๋˜ ์ฃผ์˜ํ•˜์‹ค ์ ์€ inout์œผ๋กœ ๋ฐ”๋€ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ ์‹ถ๋‹ค๋ฉด ์•ž์— &๋ฅผ ๋ถ™์—ฌ์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค!

 

 

Generic & In - Out


์ž ์ด์ œ ์ œ๋„ˆ๋ฆญ๊ณผ in - out์„ ํ•ฉ์ณ์„œ ์–ด๋–ค ํƒ€์ž…์ด๋“  ๋“ค์–ด์˜ค๋ฉด ๋ฐ”๊พธ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋ฉด

 

์•„๋ž˜์ฒ˜๋Ÿผ ์–ด๋–ค ํƒ€์ž…์ด ๋“ค์–ด์˜ค๋“  ํ•œ ๋ฉ”์†Œ๋“œ๋กœ ๊ฐ’์„ ๋ฐ”๊ฟ”์ค„ ์ˆ˜ ์žˆ๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!!

 

๋ณ€์ˆ˜์˜ ๊ฐ’๋„ ํ•œ๋ฒˆ ํ™•์ธํ•ด๋ณผ๊นŒ์š”? ์ถœ๋ ฅ๋œ ๋‚ด์šฉ์„ ๋ณด๋ฉด ๊ฐ ๊ฐ ๊ฐ’์ด ์„œ๋กœ ๋ฐ”๋€Œ์–ด ์žˆ๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!!

์—ฌ๊ธฐ์„œ ํ•œ๊ฐ€์ง€ ๋” ์•Œ์•„๋ณผ๊ฒŒ ์žˆ๋Š”๋ฐ์š”.

 

๋งŒ์•ฝ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”?

 

์ „ ๋‹น์—ฐํžˆ "=="๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ผ๋ฆฌ ๋น„๊ตํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ? ํ•˜๊ณ  ๋งŒ๋“ค์—ˆ๋”๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์–ด์š”....

์˜ค๋ฅ˜๋ฅผ ์‚ดํŽด๋ณด๋‹ˆ T๋ผ๋ฆฌ๋Š” ๋น„๊ตํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ๋งํ•˜๋„ค์š”... ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ผ๊นŒ์š”?

์ด๊ฒƒ์€ T๋กœ ๋“ค์–ด์˜จ ํƒ€์ž…์ด ๋น„๊ตํ•  ์ˆ˜ ์—†๋Š” ํƒ€์ž…์ผ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋ง์ด์—์š”!

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

 

Equatable


๋ฐ”๋กœ Equatable์ด๋ผ๋Š” ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ณต์‹ ๋ฌธ์„œ์—” ๊ฐ’์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์ด๋ผ๊ณ  ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด Equatable์„ ์ค€์ˆ˜ํ•˜๋Š” ํƒ€์ž…์ด๋ผ๋ฉด ๊ฐ’์„ ๋น„๊ตํ•  ์ˆ˜๊ฐ€ ์žˆ๋Š”๊ฑฐ๊ฒ ์ฃ ?

 

์‹ค์ œ๋กœ String,Int,Array ๋“ฑ ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ํƒ€์ž…๋“ค์€ Equatable์„ ์ค€์ˆ˜ํ•˜๊ณ  ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์ œ๋„ˆ๋ฆญ๊ณผ ์‚ฌ์šฉ๋ฒ•์€ ๋ฐ”๋กœ ํƒ€์ž… ๋’ค์— Equatable์„ ์ค€์ˆ˜ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์•„๋ž˜์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!!

 

์˜ค๋Š˜์€ ์ œ๋„ˆ๋ฆญ , ์ธ์•„์›ƒ, ์ด์ฟผํ„ฐ๋ธ”์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

์ €๋Š” ๊ทธ๋™์•ˆ Apple๋ฌธ์„œ์—์„œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ฐพ์•„๋ณผ ๋•Œ <T>๊ฐ€ ์žˆ์œผ๋ฉด ๋ฌด์Šจ ํƒ€์ž…์ธ๋ฐ T๋กœ ๋˜์–ด์žˆ๋Š”๊ฒŒ ์žˆ๋‚˜๋ณด๋‹ค ํ–ˆ๋Š”๋ฐ

 

์ด๋ฒˆ ๊ณต๋ถ€๋ฅผ ํ†ตํ•ด์„œ T๋Š” Type์˜ ์•ฝ์ž๋กœ ์–ด๋–ค ํƒ€์ž…์ด๋ผ๋Š” ๊ฒƒ์„ ์ถ”์ƒ์ ์œผ๋กœ ์˜๋ฏธํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์–ด์š”.

 

์ด์ œ ๊ณต์‹ ๋ฌธ์„œ์—์„œ T๋ฅผ ๋ณด์•„๋„ ์นœ๊ทผํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ์„๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค!

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€