포스트

문법 (17) 익스텐션 (extension)

Swift에서 익스텐션 (extension)의 개념과 활용법을 설명합니다.

문법 (17) 익스텐션 (extension)

익스텐션 (extension)

Swift의 익스텐션(Extension) 은 기존의 클래스(Class), 구조체(Struct), 열거형(Enum), 프로토콜(Protocol)에 새로운 기능을 추가하는 방법입니다.
익스텐션을 사용하면 기존 코드에 영향을 주지 않고 기능을 확장할 수 있습니다.

1. 익스텐션 기본 사용법

1
2
3
4
5
6
7
extension Int {
    func squared() -> Int {
        return self * self
    }
}

print(4.squared())  // 16
  • Int 타입에 squared() 메서드를 추가하여 제곱값을 반환하는 기능을 확장

2. 익스텐션을 활용한 기본 타입 확장

1
2
3
4
5
6
7
8
extension String {
    var isEmptyOrWhitespace: Bool {
        return trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
    }
}

print("   ".isEmptyOrWhitespace)  // true
print("Swift".isEmptyOrWhitespace)  // false
  • String 타입에 공백을 제외한 문자열이 비어있는지 확인하는 프로퍼티 추가

3. 이니셜라이저 추가

익스텐션을 통해 새로운 생성자(Initializer) 를 추가할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct User {
    var name: String
    var age: Int
}

extension User {
    init(name: String) {
        self.name = name
        self.age = 18  // 기본값 설정
    }
}

let newUser = User(name: "Alice")
print(newUser.age)  // 18

4. 프로토콜 준수 추가

기존 타입에 프로토콜을 적용할 수도 있습니다.

1
2
3
4
5
6
7
8
9
10
11
protocol Describable {
    func describe() -> String
}

extension Int: Describable {
    func describe() -> String {
        return "This is number \(self)"
    }
}

print(42.describe())  // This is number 42
  • Int 타입에 Describable 프로토콜을 채택하도록 확장

5. 제네릭을 활용한 익스텐션

익스텐션은 제네릭(Generic)을 활용하여 더욱 유연한 기능을 추가할 수 있습니다.

1
2
3
4
5
6
7
8
extension Array where Element: Equatable {
    func containsDuplicates() -> Bool {
        return self.count != Set(self).count
    }
}

print([1, 2, 3, 3].containsDuplicates())  // true
print([1, 2, 3].containsDuplicates())  // false
  • Array 타입이 Equatable일 때 중복 요소 여부를 검사하는 메서드 추가

6. 익스텐션을 사용한 네임스페이스 정리

1
2
3
4
5
6
7
8
9
10
11
struct API { }

extension API {
    struct UserService {
        static func fetchUser() {
            print("Fetching user data...")
        }
    }
}

API.UserService.fetchUser()  // Fetching user data...
  • API 네임스페이스 내부에 UserService 기능을 모듈화

익스텐션을 활용하면 가독성이 좋은 코드를 작성할 수 있으며, 유지보수성과 재사용성이 향상됩니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.