2021년 12월 30일에 공부한 내용입니다.
extension
키워드를 사용하여 정의한다.extension 확장할 타입 이름 {
/* 타입에 추가될 새로운 기능 구현 */
}
- 익스텐션은 기존에 존재하는 타입이 추가적으로 다른 프로토콜을 채택할 수 있도록 확장할 수도 있다. 이런 경우에는 클래스나 구조체에서 사용하던 것과 똑같은 방법으로 프로토콜 이름을 나열해준다.
```Swift
extension 확장할 타입 이름: 프로토콜1, 프로토콜2, 프로토콜3... {
/* 프로토콜 요구사항 구현 */
}
Int
타입에 두 개의 연산 프로퍼티를 추가한 것이다.Int
타입의 인스턴스가 홀수인지 짝수인지 판별하여 Bool
타입으로 알려주는 연산 프로퍼티이다.Int
타입에 추가해준 연산 프로퍼티는 Int
타입의 어떤 인스턴스에도 사용이 가능하다.static
키워드를 사용하여 타입 연산 프로퍼티도 추가할 수 있다.extension Int {
var isEven: Bool {
return self % 2 == 0
}
var isOdd: Bool {
return self % 2 == 1
}
}
print(1.isEven) // false
print(2.isEven) // true
print(1.isOdd) // true
print(2.isOdd) // false
var number: Int = 3
print(number.isEven) // false
print(number.isOdd) // true
number = 2
print(number.isEven) // true
print(number.isOdd) // false
Int
타입에 인스턴스 메서드인 multiply(by:)
메서드를 추가함.extension Int {
func multiply(by n: Int) -> Int {
return self * n
}
}
print(3.multiply(by: 2)) // 6
print(4.multiply(by: 5)) // 20
number = 3
print(number.multiply(by: 2)) // 6
print(number.multiply(by: 3)) // 9
extension String {
init(int: Int) {
self = "\(int)"
}
init(double: Double) {
self = "\(double)"
}
}
let stringFromInt: String = String(int: 100)
// "100"
let stringFromDouble: String = String(double: 100.0)
// "100.0"
* 익스텐션을 활용하면 다양하고 강력한 기능을 구현할 수 있지만, 해당 타입에 적합한 익스텐션을 구현하도록 주의해야 한다.