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(ํ์ฅ) ์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด ํ์ ์ ์์ ํ์ง ์๊ณ ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ ์ ์๋ค.
์ด๋ ์ฝ๋์ ๋ชจ๋์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ๋์ด๋ ๋ฐ ๋์์ด ๋๋ค.