3월 13일 TIL (Extension)

이승원·2024년 3월 13일
0

TIL

목록 보기
40/75
post-thumbnail

Extension

  • 기존 타입에 새로운 기능을 추가하거나 확장할 수 있는 기능이며, 해당 타입의 소스코드를 직접적으로 접근하지 않고 기능을 확장할 수 있는 기능이다.
  • 예를 들면 Int 타입 같은 경우는 사실은 Struct인데, Int에 추가적인 기능을 추가하고 싶을때 extension을 사용할 수 있다.
  • 사용 예시 코드 :
extension 확장할 타입 이름 {
	 //타입에 추가될 새로운 기능 구현
}

extension 확장할 타입 이름: 프로토콜1, 프로토콜2, 프로토콜3 {
	//프로토콜 요구사항 구현
}
  • Extension으로 구현이 가능한 경우:
    • 새로운 계산된 속성(Computer Property) 추가

      extension String {
      	var length: Int {
          	return self.count
      	}
      }
    • 새로운 인스턴스/타입 메서드 추가

      extension Int {
      	func squared() -> Int {
          	return self * self
      	}
       }
    • 새로운 초기화(Initializer) 추가

      extension Double {
      	init(fromString str: String) {
          	self = Double(str) ?? 0.0
      	}
       }
    • 프로토콜 채택 (Protocol Confomance) -> 이거는 코드 정리용 기능적으로 다른게 없음.

      protocol Printable {
      	func printDescription()
      }
      
      struct MyStruct(){
      	...
      }
      
      extension MyStruct : Printable{
      	func printDescription(){
          	print("This is My Struct")
          }
      }
    • 서브스크립트 추가 (Subscripting)

      	struct Matrix {
      		private var data: [[Int]]
      		init(rows: Int, columns: Int) {
          		data = Array(repeating: Array(repeating: 0, count: columns), count: rows)
      		}
        	}
      	extension Matrix {
      		subscript(row: Int, column: Int) -> Int {
          		get {
              		return data[row][column]
          		}
          		set {
              		data[row][column] = newValue
          		}
      		}
          }
          var matrix = Matrix(rows: 3, columns: 3)
          matrix[0, 0] = 1
          matrix[1, 1] = 2
          print(matrix[0, 0]) // 출력: 1
          print(matrix[1, 1]) // 출력: 2
    • 중첩 타입(Nested Type) 추가

      struct Container {
          ...
      }
      extenstion Container {
          struct NestedContainer{
            ...
            }
      }

  • Extension으로 구현 불가능 한것들 :
    • 저장 프로퍼티 (Stored Property) 추가: Extension으로는 저장 프로토콜을 추가할 수 없다.
    • 기존 기능의 재정의 (Override): 이미 존재하는 기능을 extension으로 재정의는 할 수 없다.
    • 초기화 메서드의(Initializer) 재정의 : 새로운 초기화 메서드는 추가 가능 하지만, 기존에 있는것을 변경하는 것은 불가능하다.
    • 기존 타입의 저장된 프로퍼티에 기본값 설정: 저장 프로퍼티의 값의 기본값을 재설정할 수 없음.
profile
개발자 (진)

0개의 댓글