728x90
반응형
익스텐션(Extension)은 스위프트의 강력한 기능 중 하나로, 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능이다.
기능을 추가하려는 타입의 구현된 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 알고 있다면 그 타입의 기능을 확장할 수도 있다.
익스텐션으로 추가할 수 있는 기능은 다음과 같다. (기존에 존재하는 기능의 재정의는 불가)
- 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티
- 타입 메서드 / 인스턴스 메서드
- 이니셜라이저
- 서브스크립트
- 중첩 타입
- 특정 프로토콜을 준수할 수 있도록 기능 추가
- 익스텐션 정의 문법
extension 확장할 타입 이름 {
타입에 추가될 새로운 기능 구현
}
또한 익스텐션은 기존에 존재하는 타입이 추가적으로 다른 프로토콜을 채택할 수 있도록 확장할 수도 있다.
extension 확장할 타입 이름: 프로토콜1, 프로토콜2, 프로토콜3... {
프로토콜 요구사항 구현
}
- 연산 프로퍼티 추가 예시
Int 타입에 연산 프로퍼티를 추가해보았다.
- 메서드 추가 예시
Int타입에 메서드를 추가해보았다.
- 이니셜라이저 추가
String타입에 이니셜라이저를 추가해보았다.
- 실습 코드
/* 익스텐션 구현 - 연산 프로퍼티 추가 */
extension Int {
// 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
/* 익스텐션 구현 - 메서드 추가 */
extension Int {
// 매개변수로 전달된 수와 곱한 결과를 반환해주는 메서드 추가
func multiply(by n: Int) -> Int {
return self * n
}
}
print(3.multiply(by: 2)) // 6
print(4.multiply(by: 5)) // 20
/* 익스텐션 구현 - 이니셜라이저 추가 */
extension String {
// Int형 숫자를 문자열로 바꿔서 반환해줌
init(intTypeNumber: Int) {
self = "\(intTypeNumber)"
}
// Double형 숫자를 문자열로 바꿔서 반환해줌
init(doubleTypeNumber: Double) {
self = "\(doubleTypeNumber)"
}
}
let stringFromInt: String = String(intTypeNumber: 100)
print(stringFromInt) // 100
let stringFromDouble: String = String(doubleTypeNumber: 200.1)
print(stringFromDouble) // 200.1
728x90
반응형
'Swift' 카테고리의 다른 글
[ Swift ] Swift 기초 문법14 - 프로토콜 (0) | 2023.02.19 |
---|---|
[ Swift ] Swift 기초 문법13 - assert와 guard (0) | 2023.02.19 |
[ Swift ] Swift 기초 문법12 - 타입캐스팅 (0) | 2023.02.19 |
[ Swift ] Swift 기초 문법11 - 옵셔널 체이닝과 nil 병합 연산자 (0) | 2023.02.19 |
[ Swift ] Swift 기초 문법10 - 인스턴스의 생성과 소멸 (0) | 2023.02.19 |