๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฑ Mobile/iOS

[iOS - Swift] extension(ํ™•์žฅ) ์— ๋Œ€ํ•ด

Swift์—์„œ extension์€ ๊ต‰์žฅํžˆ ๋งŽ์ด ์“ฐ์ธ๋‹ค. ์–ด๋Š ์ˆœ๊ฐ„ ๋‚˜๋„ extension์„ ๊ฝค๋‚˜ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. 

์˜ค๋Š˜์€ ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ณ , Swift์—์„œ ๋งŽ์ด ํ™œ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ธ  'ํ™•์žฅ' ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. 

 

 

ํ™•์žฅ extension ์ด๋ž€?

๊ธฐ์กด์˜ ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•, ํ”„๋กœํ† ์ฝœ ๋“ฑ์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 

ํ™•์žฅ์€ ๊ธฐ์กด ํƒ€์ž…์˜ ์ •์˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ™•์žฅ๋œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์ฆ‰, ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์•„์ฃผ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด๋‹ค. 

 

์ด๋Ÿฌํ•œ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ ํ™•์žฅ์„ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ํ™•์žฅ์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ ๊ต‰์žฅํžˆ ํšจ์œจ์ ์ด๋‹ค. 

extension์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

 

 

ํ™•์žฅ extension ์˜ ๊ธฐ๋Šฅ 

  • ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
  • ๊ณ„์‚ฐ ํ”„๋กœํผํ‹ฐ, ๊ณ„์‚ฐ ํƒ€์ž… ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ 
  • ์ด๋‹ˆ์…œ๋ผ์ด์ € ์ถ”๊ฐ€ 
  • ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€ 
  • ์ค‘์ฒฉํƒ€์ž…(nested type)์˜ ์ •์˜ ๋ฐ ์‚ฌ์šฉ
  • ํ”„๋กœํ† ์ฝœ ์ฑ„ํƒ
  • ๊ธฐ์กด ํ”„๋กœํ† ์ฝœ ๊ตฌํ˜„ ์ถ”๊ฐ€
  • ๊ธฐ๋Šฅ ๋ชจ๋“ˆํ™” 

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

์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ๋“ค์€ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ๊ธฐ๋Šฅ์„ ํ•œ ๊ณณ์— ๋ชจ์•„์„œ ์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๋ฉด ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. 

 

 

extension์˜ ์˜ˆ์‹œ๋ฅผ ์ฝ”๋“œ๋กœ ๋ณด๋ฉด

 

class Person {
    var name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    func sayHello() {
        print("Hello, my name is \(name) and I am \(age) years old.")
    }
}

 

Person์ด๋ผ๋Š” ํด๋ž˜์Šค๋Š” name๊ณผ age์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , sayHello()๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด name๊ณผ age์— ๋”ฐ๋ผ ์ž๊ธฐ์†Œ๊ฐœ๊ฐ€ ์ถœ๋ ฅ์ด ๋  ๊ฒƒ์ด๋‹ค. 

 

์—ฌ๊ธฐ์„œ ๋‚˜๋Š” ์ถ”๊ฐ€๋กœ ์ƒ์ผ ๊ธฐ๋Šฅ์„ ๊ฐ™์ด ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ๋‹ค. Person ํด๋ž˜์Šค๋ฅผ ํ™•์žฅ์‹œ์ผœ ์ฝ”๋“œ๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ๋‹ค.

 

// ๊ธฐ์กด์˜ Person ํด๋ž˜์Šค
class Person {
    var name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    func sayHello() {
        print("Hello, my name is \(name) and I am \(age) years old.")
    }
}


// Person ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ ํ™•์žฅ
extension Person {
    func celebrateBirthday() {
        age += 1
        print("Happy Birthday to \(name)! Now \(name) is \(age) years old.")
    }
    
    func introduce() {
        print("Hi, I'm \(name). Nice to meet you!")
    }
}

 

extension ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ Person ํด๋ž˜์Šค๋ฅผ ํ™•์žฅ์‹œ์ผฐ๋‹ค. ํ™•์žฅ๋œ ๊ธฐ๋Šฅ์€ celebrateBirthday๋ผ๋Š” ์ƒ์ผ์ถ•ํ•˜ ๊ธฐ๋Šฅ์„ ๋„ฃ์—ˆ๋‹ค. 

์ƒ์ผ ์ถ•ํ•˜ ๋ฉ”์„ธ์ง€์™€ ๋™์‹œ์— ์›๋ž˜ ๋‚˜์ด์—์„œ 1์‚ด ์ถ”๊ฐ€๋ฅผ ํ–ˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด, 

 

let person = Person(name: "๊ฐ€ํ˜„", age: 22)
person.sayHello()  // ์ถœ๋ ฅ: Hello, my name is ๊ฐ€ํ˜„ and I am 22 years old.
person.celebrateBirthday()  // ์ถœ๋ ฅ: Happy Birthday to ๊ฐ€ํ˜„! Now ๊ฐ€ํ˜„ is 23 years old.
person.introduce()  // ์ถœ๋ ฅ: Hi, I'm ๊ฐ€ํ˜„. Nice to meet you!

 

์œ„์™€ ๊ฐ™์ด Person ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ข€ ๋” ๋‹ค์–‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. 

 

 

 

 

extension(ํ™•์žฅ) ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด ํƒ€์ž…์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

์ด๋Š” ์ฝ”๋“œ์˜ ๋ชจ๋“ˆ์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค. 

 

 

 

 

728x90