익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능이다.
기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입의 기능을 확장할 수도 있다.
익스텐션이 타입에 추가할 수 있는 기능
- 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티
- 타입 메서드 / 인스턴스 메서드
- 이니셜라이저
- 서브스크립트
- 중첩 타입
- 특정 프로토콜을 준수할 수 있도록 기능 추가
아래 익스텐션은 Int 타입에 두 개의 연산 프로퍼티와 메소드 하나를 추가한 것이다.
extension Int {
var isEven: Bool { // 연산 프로퍼티 추가
return self % 2 == 0
}
var isOdd: Bool { // 연산 프로퍼티 추가
return self % 2 == 1
}
func multiply(by n: Int) -> Int { // 메소드 추가
return self * n
}
}
// 연산 프로퍼티 사용
print(1.isEven) // false
print(2.isEven) // true
print(1.isOdd) // true
print(2.isOdd) // false
var number: Int = 2
print(number.isEven) // true
print(number.isOdd) // false
// 메소드 사용
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
아래 익스텐션은 String 타입에 이니셜라이저를 추가한 것이다.
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"
야곰의 스위프트 기본 문법 강좌를 수강하며 작성한 내용입니다.