swift 기본문법 - 익스텐션(extension)

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
인프런, 야곰의 스위프트 기본문법 강좌를 듣고 정리하였습니다.


익스텐션(extension)

구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능이다.

기능을 추가하려는 타입의 구현된 소스코드를 알지 못하거나 볼수 없다해도 타입만 알고있다면 그 타입의 기능을 확장할 수 있다.

  • 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티
  • 타입 메서드 / 인스턴스 메서드
  • 이니셜라이저
  • 서브스크립트
  • 중첩 타입
  • 특정 프로토콜을 준수할 수 있도록 기능 추가

기존에 존재하는 기능을 재정의 할 수는 없다.

extension 확장할 타입 이름 {
  타입에 추가될 새로운 기능 구현
}

익스텐션은 기존에 존재하는 타입이 추가적으로 다른 프로토콜을 채택할 수 있도록 확장할 수도 있다.

extension 확장할 타입 이름: 프로토콜1, 프로토콜2, 프로토콜3... {
  프로토콜 요구사항 구현
}

익스텐션 구현 / 연산 프로퍼티 추가

extension Int {
  var isEven: Bool {
    return self % 2 == 0
  }
  var isOdd: Bool {
    return self % 2 == 1
  }
}
// 그냥 숫자를 써주게 되더라도 정수 타입(리터럴 문법) >> 일반 숫자로도 표현 가능
print(1.isEven)  // false

var number: Int = 3

익스텐션 구현 / 메서드 추가

extension Int {
  func multiply(by n: Int) -> Int {
    return self * n
  }
}

// 3이라는 Int타입의 리터럴 문법, Int 타입의 인스턴스로 취급
print(3.multiply(by: 3))  // 9

익스텐션 구현 / 이니셜라이저 추가

extension String {
  init(intTypeNumber: Int) {
    self = "\(intTypeNumber)"
  }
}

// 기존에 없던 이니셜라이저를 추가할 수도 있다.