Swift - 익스텐션(Extension)이란?
Swift - 익스텐션(Extension)이란?
익스텐션(Extension)이란?
- 기존에 이미 정의되어 있는 클래스, 구조체, 열거형 등에 새로운 기능을 추가할 수 있게 해줌.
- 단, 기존에 정의되어 있는 프로퍼티나 메서드를 오버라이딩하는 것은 불가능함.
구문
1
2
3
extension 객체명{
// 추가기능
}
연산 프로퍼티 익스텐션
- 익스텐션을 통해 추가할 수 있는 프로퍼티는 연산 프로퍼티임.
- 저장 프로퍼티는 추가할 수 없음.
- 연산 프로퍼티이기만 하면 타입 프로퍼티던 인스턴스 프로퍼티던 상관 없음.
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Test{
var num1: Int
init(num1: Int) {
self.num1 = num1
}
}
extension Test{
var description: String{
return "num1 : \(self.num1)"
}
}
var test: Test = Test(num1: 10)
print(test.description)
결과
1
num1 : 10
메서드 익스텐션
- 기존에 정의되어 있던 메서드를 오버로딩해서 추가 정의하거나, 새로운 메서드를 추가할 수 있음.
- 위에서 설명했듯이 오버라이딩은 불가능함.
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class TestClass{
var num: Int
init(num: Int) {
self.num = num
}
}
extension TestClass{
func plusOne() -> Void{
self.num += 1
}
}
var testClass = TestClass(num: 10)
testClass.plusOne()
print(testClass.num)
struct TestStruct{
var num: Int
}
extension TestStruct{
mutating func plusOne() -> Void{
self.num += 1
}
}
var testStruct: TestStruct = TestStruct(num: 10)
testStruct.plusOne()
print(testStruct.num)
결과
1
2
11
11
구조체, 열거형의 경우 값타입이기 때문에
self를 통해 접근하기 위해선mutating키워드를 붙여줘야함.
This post is licensed under CC BY 4.0 by the author.