Swift. Extension

2019. 4. 25. 11:13Swift + iOS

Extensions

타입에 있는 기능을 확장하고 싶을 때 사용한다. 기존 자료형 확장의 한 방법이다.

기존 자료형에 계산 속성, 메소드, 서브스크립트 등을 추가할 수 있다.

 

Swift에서 Extensions는

  • 연산 인스턴스 프로퍼티 및 연산 타입 프로퍼티 추가
  • 인스턴스 메소드 및 타입 메소드 정의
  • 새로운 이니셜라이저 제공
  • 서브스크립트 정의
  • 새 중첩 타입 정의 및 사용
  • 기존 타입이 프로토콜을 준수하도록 한다

이런 기능들을 할 수 있습니다.

프로토콜의 요구사항의 구현하거나 적합한 타입이  활용할 수 있는 기능을 추가하기 위해  프로토콜을 확장할 수도 있다.

자세한 사항은 Protocol Extensions 참조.

 

Extension은 타입에 새로운 기능을 추가할 수는 있지만 기존 기능(함수)를 override 할 수는 없다.

상속의 경우 기존 자료형에서 상속받아 새로운 타입을 만든다. 그 후, 새로운 타입에 원하는 기능을 덧붙여서 사용한다. 

그러나 익스텐션의 경우에는 상속과 다르게 새로운 타입을 만드는 것이 아니라, 있는 그대로를 가지고 기능을 확장한다.

수평적 확장.

다시 말해, 기존에 있는 타입 그대로에 기능을 덧붙여준다는 것이다.

 

사용 예

타입의 기능들을 기능별로 묶어서 extenstion으로 빼내서 사용할 수 있다.

ex. 내부적으로 사용할 private method들만 extension으로 빼내서 사용. 

주석까지 달아놓으면 더 쉽게  '이 파트는 무슨 기능을 위해 모아놓은 파트이다.' 라는 것을 알 수 있다. 

 

extension SomeType {
	//덧붙여 주고 싶은, 구현하고 싶은 기능 
}

extension String {
	var length: Int {
    	let string: NSString = NSString(string: self)
        return string.length
    }
}

///사용 예
var exampleString = "example"
print(exampleString.length) 
/// 7

 

 

extension SomeType: SomeProtocol, AnotherProtocol {
    // implementation of protocol requirements goes here
}

기존 타입이 프로토콜 채택하도록 확장 할 수도 있다.

 


https://docs.swift.org/swift-book/LanguageGuide/Extensions.html

'Swift + iOS' 카테고리의 다른 글

iOS. 네비게이션 컨트롤러  (0) 2019.07.30
Swift. 클로저(Closures)  (0) 2019.05.07
Xcode. Xcode 디버깅 팁  (7) 2019.04.22
Swift. 옵셔널  (0) 2019.04.18