Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Swift/Swift BASIC

[Swift] ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - extension(ํ™•์žฅ)

๊ฐ์ž ๐Ÿฅ” 2022. 1. 20. 18:09
๋ฐ˜์‘ํ˜•

 

์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์ž์ž…๋‹ˆ๋‹ค! ์˜ค๋Š˜์€ ์ต์Šคํ…์…˜์— ๋Œ€ํ•ด์„œ ๋ฐฐ์›Œ๋ณด๋„๋ก ํ• ๊ฒŒ์š”. 
๋ณธ ํฌ์ŠคํŒ…์€ ํŒจ์ŠคํŠธ์บ ํผ์Šค์˜ 30๊ฐœ ํ”„๋กœ์ ํŠธ๋กœ ๋ฐฐ์šฐ๋Š” iOS์•ฑ๊ฐœ๋ฐœ with Swift ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.


 

extension(์ต์Šคํ…์…˜) ์ด๋ž€? 

extension(์ต์Šคํ…์…˜, ํ™•์žฅ) ๊ธฐ๋Šฅ์€ ์ด์ „์˜ ๋‚ด๋ถ€ ์†Œ์Šค๋ฅผ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ์›๋ณธ ํƒ€์ž…๋“ค์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์ด๋‹ค. ๊ธฐ์กด์˜ ํด๋ž˜์Šค, ์—ด๊ฑฐํ˜•, ํ”„๋กœํ† ์ฝœ์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ต์Šคํ…์…˜์ด ํƒ€์ž…์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์—ฐ์‚ฐ ํƒ€์ž… ํ”„๋กœํผํ‹ฐ / ์—ฐ์‚ฐ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ 
  • ํƒ€์ž… ๋ฉ”์„œ๋“œ / ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ ์ •์˜
  • ์ƒˆ๋กœ์šด ์ƒ์„ฑ์ž (initializer)์˜ ์ œ๊ณต
  • subscripts ์ ‘๊ทผ๋ฐฉ์‹ ์ •์˜
  • ์ค‘์ฒฉ ํƒ€์ž…์˜ ์ •์˜ ๋ฐ ์‚ฌ์šฉ
  • ํŠน์ • ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋Šฅ ์ถ”๊ฐ€

์ฐธ๊ณ ๋กœ ์ต์Šคํ…์…˜ ํƒ€์ž…์—๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ธฐ์กด์— ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์ด์ œ ์ต์Šคํ…์…˜์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” (์—ฐ์‚ฐ, ๋ฉ”์„œ๋“œ๊ธฐ๋Šฅ์ถ”๊ฐ€)๊ธฐ๋Šฅ ์œ„์ฃผ๋กœ๋งŒ ์ผ๋‹จ ๊ณต๋ถ€ํ–ˆ๋‹ค.

extension ๊ธฐ๋ณธ ํ˜•ํƒœ

extension SomeType {
	// ์ถ”๊ฐ€ ๊ธฐ๋Šฅ
}

์ด์ œ ์•„๋ž˜์ฝ”๋“œ๋ฅผ ๋ณด๋ฉฐ ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ต์Šคํ…์…˜ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•ด๋ณด์ž.

 

1. extension์œผ๋กœ ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€ํ•˜๊ธฐ

extension Int {
	var isEven: Bool {
    	return self % 2 == 0
    }
	var isOdd: Bool {
    	return self % 2 == 0
	}
}

var number = 3
number.isOdd 
//prints "true"

number.isEven
// prints "false"

์ด์ฒ˜๋Ÿผ ์—ฐ์‚ฐํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ์˜ํ•ด์•ผํ• ์ ์€, ์ต์Šคํ…์…˜์€ ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋Š” ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋Š” ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํ•œ๋‹ค.  ๋˜ ํƒ€์ž…์— ์ •์˜๋˜์–ด์žˆ๋Š” ๊ธฐ์กด์˜ ํ”„๋กœํผํ‹ฐ์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ์‹œ์ž๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํ•œ๋‹ค.

 

2. extension์„ ํ†ตํ•ด ํƒ€์ž…์˜ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ

Stringํƒ€์ž…์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•ด๋ณด์ž.

extension String {
	func convertToInt() -> Int? {
    	return Int(self)
	}
}

var string = "0"
string.convertToInt()
// prints 0 (์ •์ˆ˜ํ˜•์œผ๋กœ ์ถœ๋ ฅ๋จ)

 

์ด๋ ‡๊ฒŒ ์ต์Šคํ…์…˜์„ ํ†ตํ•ด ๊ธฐ์กด์— ์ •์˜๋˜์–ด ์žˆ๋Š” ํƒ€์ž…์— ํ”„๋กœํผํ‹ฐ, ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

3. extension์— ์ƒ์„ฑ์ž(initializer)์ถ”๊ฐ€ํ•˜๊ธฐ

๊ธฐ์กด ํƒ€์ž…์— ์ƒˆ๋กœ์šด ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. 

3.1) class์—์„œ์˜ ์ƒ์„ฑ์ž ์ถ”๊ฐ€

๊ธฐ๋ณธ ์ •์˜๋กœ ๋ณด๋ฉด, Designated initializer๋Š” ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ณ , convenience initializer๋งŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, deinitializer๋Š” ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํ•œ๋‹ค.

์ƒ์„ฑ์ž๋Š” ํ•œ๊ฐ€์ง€ ์ข…๋ฅ˜๋งŒ ์žˆ์„์ค„ ์•Œ์•—๋Š”๋ฐ ์ด๊ฒŒ ๋ฌด์Šจ๋ง์ธ๊ฐ€ ์‹ถ์–ด์„œ ์ž ๊น ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์ž‘์„ฑํ•ด๋ณด์ž. ์ด ๋ชจ๋“  ๊ฐœ๋…์„ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€๋ ค๋ฉด ๋˜ ์ƒ์„ฑ์ž์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด์™€ ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ, ์ง€๊ธˆ์€ extension์— ๋Œ€ํ•ด์„œ๋งŒ ๊ณต๋ถ€ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ณด์ž.

 

์ผ๋‹จ ๊ฐ€์žฅ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์› ๋˜, deinit์€ extension์œผ๋กœ ๊ตฌํ˜„์ด ์•ˆ๋œ๋‹ค.

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด, init ๋„ extension์œผ๋กœ ๊ตฌํ˜„์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ–ˆ๋˜ init์€ Designated initializer์ด

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด, ๋ญ”์ง„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ convenience init์€ extension์œผ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

3.2) struct์—์„œ ์ƒ์„ฑ์ž ์ถ”๊ฐ€

extention์œผ๋กœ ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ, memberwise initializer๋ฅผ ๋ณด์กดํ•˜๋ฉฐ ์ƒˆ๋กœ์šด ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. memberwise ์ƒ์„œ์ž๋ž€, ๊ตฌ์กฐ์ฒด๋Š” ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ด ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ๋ฐ”๋กœ memberwise intializer๋ผ๊ณ  ํ•œ๋‹ค.

์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ, struct๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๊ธฐ๋ณธ์ƒ์„ฑ์ž(memberwise initializer)๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ •์ƒ์ ์ธ ์ฝ”๋“œ์ด์ง€๋งŒ, class๋Š” init์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค. ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!

๋ฐ˜๋ฉด์— ์ƒ์„ฑ์ž๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์ง€ ์•Š์•˜๋˜ struct๋Š” ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์ฒ˜๋Ÿผ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€์•Š๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Ÿฐ๊ฒƒ์ด ๋ฐ”๋กœ ๊ธฐ๋ณธ์ƒ์„ฑ์ž!! (memberwise initializer)

์–ด์จ‹๋“  ์ด์ œ ๊ธฐ๋ณธ์ƒ์„ฑ์ž์— ๋Œ€ํ•œ ๊ฐœ๋…์€ ์—ฌ๊ธฐ์„œ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ , extension์„ ํ†ตํ•ด ๊ตฌ์กฐ์ฒด์— ์ƒ์„ฑ์ž๋ฅผ  ๊ตฌํ˜„ํ•ด๋ณด์ž.

 ์ด๋ ‡๊ฒŒ ๊ตฌ์กฐ์ฒด ํ•œ์ • ์ƒ์„ฑ์ž๋ฅผ extension์„ ํ†ตํ•ด ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค. 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์œ„์™€ ๊ฐ™์ด ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ณ , ์ถ”๊ฐ€๋กœ ๋‚ด๊ฐ€ ์ƒ์„ฑํ•œ ์ƒ์„ฑ์ž๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. extension์„ ํ™œ์šฉํ•ด์„œ struct์— ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด, ์ด memberwise initializer๋ฅผ ๋ณด์กดํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค

 


์šฐ์„  ๊ฐ€์žฅ ์ž์ฃผ ์“ฐ์ด๋Š” extension๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ  ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค. ์ด์™ธ์—๋„ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™•์žฅ๊ธฐ๋Šฅ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ๋งŽ์€๋ฐ, ์ด๋Š” ์•„๋ž˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด๊ณ , ๊ณต๋ถ€ํ•ด๋ณด๋„๋ก ํ•˜์ž ^^/ ์˜ˆ์ œ, ๊ธฐ๋Šฅ๋ณ„๋กœ ์ •๋ฆฌ๋ฅผ ์ž˜ํ•ด๋†“์œผ์…จ๋‹ค!

https://babbab2.tistory.com/124

 

Swift) ํ™•์žฅ(extension) ์ •๋ณตํ•˜๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š” :) ์†Œ๋“ค์ž…๋‹ˆ๋‹ค ํ˜ธํ˜ธํ™‹ ์˜ค๋Š˜์€ Swift ๋ฌธ๋ฒ• ์ค‘์— ํ™•์žฅ!!! ์—„์ฒญ ๋งŽ์ด ์“ฐ๋Š” extensionใ…‡ใ…” ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”! Objective-C๋ฅผ ์•„์‹œ๋Š” ๋ถ„์ด๋ผ๋ฉด ์ต๋ช… Category๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์•„์š”!! ๊ทธ๋Ÿผ ์‹œ์ž‘

babbab2.tistory.com

 

์ด๋ ‡๊ฒŒ extension๊ธฐ๋Šฅ์€ ์œ„์™€ ๊ฐ™์ด ๊ตฌ์กฐ์ฒด, ํด๋ž˜์Šค, ์—ด๊ฑฐํ˜•, ํ”„๋กœํ† ์ฝœ์˜ ์ถ”๊ฐ€ ๊ตฌํ˜„๋ถ€, ์ œ์•ฝ์‚ฌํ•ญ, ๊ธฐ๋Šฅ ๋“ฑ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ด๋‹ค. ๋˜ํ•œ extension์„ ํ†ตํ•ด ํŠน์ • ํƒ€์ž…์˜ ๊ธฐ๋Šฅ ๋ฐ ์ค€์ˆ˜ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ ๋ณ„ ๊ตฌํ˜„ ๋ถ€๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๋ณด๋‹ค ์ฝ”๋“œ๋ฅผ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ์งค ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์˜คํžˆ๋ ค ๊ฐ€๋…์„ฑ์„ ํ•ด์น  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž!

 

 

๋ฐ˜์‘ํ˜•