Swift

[Swift] Extension이란

devharrry 2020. 1. 5. 17:12

안녕하세요. 이번 글에서는 Swift에서 강력한 기능인 Extension에 대해서 간단하게 정리하려고 합니다.

 

Extension이란

쉽게 말해서 새로운 기능을 추가한다는 개념입니다. 

 

어떤 것들을 추가할 수 있나요?

Computed Properties(연산 속성)

Double 타입에 km라는 연산 속성을 추가하는 예제입니다.

extension Double {
  var km: Double {
    return self * 1_1000.0
  }
}

하지만 저장 속성은 추가할 수 없습니다. 그 이유는 추가하기 위해서는 새 값을 저장하기 위해 추가 메모리가 필요한데 extension은 그런 작업을 관리 할 수 없습니다. 

 

Initializers(이니셜라이저)

Default Initializers는 추가할 수 있습니다. 

하지만 designated initializers, deinitializers를 추가할 수 없습니다.

 

Methods(메소드)

인스턴스 메소드, 타입 메소드를 추가할 수 있습니다. 

extension Double {
  // 인스턴스 메소드 
  func convertToInt() -> Int {
    return Int(self)
  }
  // static 타입 메소드 
  static func print() {
    print("print static method")
  } 
}


Mutating Instance Method도 추가할 수 있습니다. 

extension Double {
  mutating func multiple() {
	self = self * 2
  }
}

Subcripts(서브스크립트)

기존 타입에 새로운 서브스크립트를 추가할 수 있습니다. 

 

Int타입에 정수 서브스크립트를 추가하는 예제이고 [n]은 n번째 숫자를 반환.

extension Int {
  subscript(var digitIndex: Int) -> Int {
    var decimalBase = 1
    while digitIndex > 0 {
      decimalBase *= 10
      --digitIndex
    }
    return (self / decimalBase) % 10
  }
}

746381295[0]
// returns 5
746381295[1]
// returns 9
746381295[2]
// returns 2
746381295[8]
// returns 7

Nested Types(중첩 타입)

클래스, 구조체, 열거형에 새로운 중첩 타입을 추가할 수 있습니다. 

extension Int {
  enum Kind {
    case Negative, Zero, Positive
  }
  var kind: Kind {
    switch self {
    case 0:
      return .Zero
    case let x where x > 0:
      return .Positive
    default:
      return .Negative
    }
  }
}

 

참고 

http://minsone.github.io/mac/ios/swift-extensions-summary

'Swift' 카테고리의 다른 글

[Swift] rethrows란  (0) 2020.02.23
[Swift] 에러처리 전략  (2) 2020.02.23
[Swift] SwiftLint 적용하기  (0) 2020.01.05
[Swift] Extension(확장)으로 코드 가독성 올리기  (0) 2020.01.05
[Swift] 구조체란 무엇인가?  (0) 2020.01.03