๐Ÿ“š ์ œ๋„ค๋ฆญ(Generic)

jeongmuyametteยท2024๋…„ 12์›” 5์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
12/72
post-thumbnail

TIL (Today I Learned)

๐Ÿ“š ์ œ๋„ค๋ฆญ(Generic)์— ๋Œ€ํ•ด ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค

1. ์ œ๋„ค๋ฆญ์ด๋ž€?

  • ํ•˜๋‚˜์˜ ์ฝ”๋“œ๋กœ ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋Šฅ
  • ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” ์œ ์šฉํ•œ ๋„๊ตฌ

2. ์ œ๋„ค๋ฆญ์˜ ์žฅ์ 

  • ์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
  • ํƒ€์ž…์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ ๊ฐ€๋Šฅ
  • ํƒ€์ž… ์•ˆ์ •์„ฑ ๋ณด์žฅ

3. ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

func ํ•จ์ˆ˜์ด๋ฆ„<T>(๋งค๊ฐœ๋ณ€์ˆ˜: T) {
    // T๋Š” ์‹ค์ œ ์‚ฌ์šฉํ•  ๋•Œ ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜๋จ
}

4. ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ

// ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ํ•จ์ˆ˜
private func fetchData<T: Decodable>(url: URL, completion: @escaping (T?) -> Void) {
    // T๋Š” Decodable ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๋Š” ์–ด๋–ค ํƒ€์ž…์ด๋“  ๋  ์ˆ˜ ์žˆ์Œ
}

5. ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋น„์œ 

  • ๐ŸŽจ ๋งŒ๋Šฅ ์ƒ‰์—ฐํ•„: ํ•˜๋‚˜์˜ ๋„๊ตฌ๋กœ ์—ฌ๋Ÿฌ ์ƒ‰์„ ์น ํ•  ์ˆ˜ ์žˆ์Œ
  • ๐Ÿ“ฆ ๋งŒ๋Šฅ ์„ ๋ฌผ ํฌ์žฅ๊ธฐ: ์–ด๋–ค ์„ ๋ฌผ์ด๋“  ํฌ์žฅ ๊ฐ€๋Šฅ

6. ์˜ค๋Š˜์˜ ๊นจ๋‹ฌ์Œ

  • ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค
  • ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์œ ์—ฐํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

------ ์•„๋ž˜๋Š” Ai ๋‹ต๋ณ€ -------

์ œ๋„ค๋ฆญ์„ '๋งŒ๋Šฅ ๋„๊ตฌ'๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค.

๐ŸŽจ ๋ฏธ์ˆ  ๋„๊ตฌ ๋น„์œ ๋กœ ์„ค๋ช…ํ•˜๋ฉด:

์ผ๋ฐ˜ ํ•จ์ˆ˜:

func ๋นจ๊ฐ„์ƒ‰์น ํ•˜๊ธฐ(๋นจ๊ฐ„์ƒ‰์—ฐํ•„)
func ํŒŒ๋ž€์ƒ‰์น ํ•˜๊ธฐ(ํŒŒ๋ž€์ƒ‰์—ฐํ•„)
func ๋…ธ๋ž€์ƒ‰์น ํ•˜๊ธฐ(๋…ธ๋ž€์ƒ‰์—ฐํ•„)
  • ์ƒ‰๋งˆ๋‹ค ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ด์š”

์ œ๋„ค๋ฆญ ํ•จ์ˆ˜:

func ์ƒ‰์น ํ•˜๊ธฐ<์•„๋ฌด์ƒ‰์—ฐํ•„>(์—ฐํ•„)
  • ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋กœ ๋ชจ๋“  ์ƒ‰์„ ์น ํ•  ์ˆ˜ ์žˆ์–ด์š”!

๐ŸŽ ์„ ๋ฌผ ํฌ์žฅ ๋น„์œ :

func ํฌ์žฅํ•˜๊ธฐ<T>(์„ ๋ฌผ: T) {
    // T๋Š” ์žฅ๋‚œ๊ฐ์ด ๋  ์ˆ˜๋„, ์˜ท์ด ๋  ์ˆ˜๋„, ์ฑ…์ด ๋  ์ˆ˜๋„ ์žˆ์–ด์š”
}
  • ํ•˜๋‚˜์˜ ํฌ์žฅ ๋ฐฉ๋ฒ•์œผ๋กœ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์„ ๋ฌผ์„ ํฌ์žฅํ•  ์ˆ˜ ์žˆ์–ด์š”
  • T ์ž๋ฆฌ์— ์–ด๋–ค ํƒ€์ž…์ด๋“  ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์š”

๋‹น์‹ ์ด ๋ณด์—ฌ์ค€ ์ฝ”๋“œ์—์„œ๋Š”:

fetchData<T: Decodable>
  • T๋Š” "๋””์ฝ”๋”ฉ ๊ฐ€๋Šฅํ•œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋“ " ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋งŒ๋Šฅ ๊ทธ๋ฆ‡์ด์—์š”
  • JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ ์”จ ์ •๋ณด๋กœ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ๊ณ , ์‚ฌ์šฉ์ž ์ •๋ณด๋กœ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ์–ด์š”

์‰ฝ๊ฒŒ ๋งํ•ด์„œ, ์ œ๋„ค๋ฆญ์€ "์—ฌ๋Ÿฌ ํƒ€์ž…์„ ํ•˜๋‚˜์˜ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋งŒ๋Šฅ ๋„๊ตฌ"์˜ˆ์š”! ๐ŸŒˆ

profile
์–‘์ •๋ฌด

0๊ฐœ์˜ ๋Œ“๊ธ€