티스토리 뷰
Extensions
확장 기능
스위프트의 확장(Extensions) 기능은 존재하는 클래스, 구조체, 열거형, 프로토콜 타입에 새롭게 기능적인 부분을 추가할 수 있는 문법입니다. Extension 기능은 이전의 내부 소스를 접근할 수 없는 원본 타입들에 대해 새로운 기능을 부여할 수 있는 방법입니다.
Swift의 Extensions는 Objective-C로 치면 Category와 유사합니다. 다만, Objective-C의 category와 다르게, Swift extension은 별도의 이름을 갖지 않습니다.
Swift에서 제공하는 Extension은 아래와 같은 기능을 제공합니다.
- 계산프로퍼티, 계산타입 프로퍼티 추가 기능
- 인스턴스 메서드, 타입 메서드의 정의
- 새로운 생성자(initializer)의 제공
- 첨자(subscripts) 접근방식 정의
- 중첩타입(nested type)의 정의 및 사용
- 특정 프로토콜을 준수하는 현존 타입 정의
NOTE
앞서 말했듯이, 스위프트에서는 구조체, 클래스, 열거형 타입 뿐만아니라, 프로토콜이 이점을 취할 수 있는 추가적인 기능과 요구사항을 구현하는 데에도 사용할 수 있습니다. 이에 대한 더 자세한 사항은 프로토콜 확장(Protocol Extensions)를 참고하세요.
또한, Extensions은 타입의 새로운 기능을 추가할 수 있지만, 기존 기능의 오버라이딩은 허용하지 않습니다.
Extension Syntax
Extension 문법
스위프트의 Extension 확장 기능은 앞서 말했듯이 특정 타입에서 준수하는 메서드, 생성자, 첨자, 계산프로퍼티 구현 등을 제공하는데 사용할 수 있습니다. 이는 프로토콜에 대한 행위를 내부적으로 정의하는 것을 도와줍니다. 해당 기능들이 개별적으로 혹은 전역적으로 정의되는 것이 아니고 말입니다.
예를들면, RandomNumberGenerator 프로토콜은 추가적인 기능인 randomBool() 메서드를 extension을 통해 제공할 수 있습니다. extension을 사용할 때는 확장하려는 타입을 extension 뒤에 붙인 후, 해당 블록 내에 추가적인 기능을 정의할 수 있습니다.
위의 코드는 RandomNumberGenerator에 대한 extension 사용 예시입니다. 해당 타입에 randomBool()이라는 추가적인 메서드를 구현해서 사용할 수 있습니다. 위와 같이 추가한 exntension 메서드는 실제 RandomNumberGenerator 객체를 사용할 때 사용할 수 있게 됩니다.
위의 코드는 실제 extension으로 구현한 메서드, randomBool()을 실제 사용하는 모습을 볼 수 있습니다. 프로토콜 extension은 해당 프로토콜의 준수해야할 사항, 구현해야할 사항들을 추가할 수 있습니다.
하지만, 다른 프로토콜로 부터 준수해야하는 부분은 extension에서 추가할 수 없습니다. 프로토콜 ~ 프로토콜 간의 관계는 extension이 아닌 실제 protocol 구현 부에서 정의되어야 합니다.
extension기능은 위와 같이 구조체, 클래스, 열거형, 프로토콜의 추가 구현부, 제약사항, 기능등을 정의할 수 있는 유용한 기능입니다. 또한 extension을 통해 특정 타입의 기능 및 준수하는 프로토콜 별 구현 부를 분리해서 보다 코드를 보기 쉽게 정리할 수도 있습니다.
하지만, 해당 기능을 무분별하게 남용하게 된다면, 오히려 코드의 가독성 등을 저해할 수 있으므로, 이점을 주의해서 사용해야겠습니다. 👩🏻💻
'iOS 개발 > 개발자문서 정보' 카테고리의 다른 글
스위프트의 기본 컬렉션 타입 특징 및 사용방법 (0) | 2020.07.26 |
---|---|
Swift RandomAccessCollection 프로토콜 특징, 사용법 (0) | 2020.07.25 |
Swift 문법 Error Handling, 에러처리 특징 및 사용법 (0) | 2020.07.20 |
스위프트 Opaque Types 1) 불투명타입의 필요성 (0) | 2020.07.19 |
Swift switch문 예약어, fallthrough 알아보기 (2) | 2020.07.18 |
- Total
- Today
- Yesterday
- 김프매매
- 프로토콜
- 알고리즘문제
- swift 기초
- CoreML
- swift reduce
- swift언어
- Swift 알고리즘
- Protocol
- SwiftUI
- 백준알고리즘
- 프로그래머스
- swift알고리즘
- 알고리즘
- publisher
- 컬렉션
- swift 문자열
- 백준swift
- 부스트코스
- 자연어처리
- Collection
- uikit
- swift string
- ios
- swift문제
- swift
- 스위프트
- 프로그래머스swift
- 개발자문서
- createML
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |