🔥 Extension 문법

247자
3분

Swift에서 extension을 선언하는 것은 아주 간단합니다. extension 키워드를 사용하여 다음과 같이 선언할 수 있죠:

swift
extension SomeType {
    // SomeType에 추가할 새로운 기능들이 이곳에 들어갑니다.
}
swift
extension SomeType {
    // SomeType에 추가할 새로운 기능들이 이곳에 들어갑니다.
}

위의 코드에서 SomeType은 여러분이 확장하고자 하는 기존 타입의 이름입니다. 클래스, 구조체, 열거형, 프로토콜 타입 모두 확장이 가능하답니다. extension 내부에는 해당 타입에 추가하고 싶은 새로운 기능들을 구현하면 됩니다.

예를 들어, 다음과 같이 Int 타입을 확장하여 제곱을 계산하는 메서드를 추가할 수 있습니다:

swift
extension Int {
    func squared() -> Int {
        return self * self
    }
}
 
let number = 5
print(number.squared()) // 25
swift
extension Int {
    func squared() -> Int {
        return self * self
    }
}
 
let number = 5
print(number.squared()) // 25

또한 extension을 사용하면 기존 타입이 하나 이상의 프로토콜을 채택하도록 만들 수도 있습니다. 프로토콜 준수성을 추가하려면 클래스나 구조체를 작성할 때와 동일한 방식으로 프로토콜 이름을 작성하면 됩니다:

swift
extension SomeType: SomeProtocol, AnotherProtocol {
    // 프로토콜 요구사항의 구현이 이곳에 들어갑니다.
}
swift
extension SomeType: SomeProtocol, AnotherProtocol {
    // 프로토콜 요구사항의 구현이 이곳에 들어갑니다.
}

이런 식으로 프로토콜 준수성을 추가하는 것은 Adding Protocol Conformance with an Extension에서 자세히 설명하고 있어요.

예를 들어, 다음과 같이 CustomStringConvertible 프로토콜을 채택하여 Point 구조체의 사용자 정의 문자열 표현을 제공할 수 있습니다:

swift
struct Point {
    let x: Int
    let y: Int
}
 
extension Point: CustomStringConvertible {
    var description: String {
        return "(\(x), \(y))"
    }
}
 
let p = Point(x: 1, y: 2)
print(p) // (1, 2)
swift
struct Point {
    let x: Int
    let y: Int
}
 
extension Point: CustomStringConvertible {
    var description: String {
        return "(\(x), \(y))"
    }
}
 
let p = Point(x: 1, y: 2)
print(p) // (1, 2)

extension은 Extending a Generic Type에서 설명한 대로 기존의 제네릭 타입을 확장하는 데에도 사용할 수 있습니다. 또한 Extensions with a Generic Where Clause에서 설명한 것처럼 제네릭 where 절을 사용하여 조건부로 기능을 추가할 수도 있죠.

이렇게 extension은 기존 타입의 기능을 확장하는데 매우 유용하게 사용됩니다. 코드의 모듈성과 재사용성을 높이는데 큰 도움이 되죠.

YouTube 영상

채널 보기
관계로 정의하는 곱과 쌍대곱의 기초 | 프로그래머를 위한 카테고리 이론
합타입 - Either, Maybe, List | 프로그래머를 위한 카테고리 이론
NestJS 프로바이더와 @Injectable 데코레이터 | NestJS 가이드
동적 모듈 이해하기 | NestJS 가이드
모듈을 공유하는 방법은? | NestJS 가이드
NestJS 모듈 시스템 기초와 구조 | NestJS 가이드
함수 합성을 추상화 할 수 있을까? | 클라이슬리 카테고리 2편 | 프로그래머를 위한 카테고리 이론
모듈과 프로바이더 | NestJS 가이드