Subcript, Inheritance

최완식·2022년 2월 5일
0

Swift

목록 보기
7/36
post-thumbnail

Subscript는 Swift에 있는 새로운 문법이다. 값 접근에 있어서 의미있는 접근 방법을 정의하여 사용할 수 있다. 예를 들어 행렬이 있을 수 있다. 행렬이라는 자료구조를 만들고, 실제 2차원 배열에 접근하는 것처럼 접근하기 위해 접근 방법을 customizing하는 것이라 생각하면 되겠다. 아래에 예가 있으니 확인해보자. 상속은 다른 언어와 비슷하다. 그럼 시작해보자.

Subscript

  • class, struct, enum에 추가 가능

  • 간단한 방법으로 member element에 접근할 수 있는 방법

  • 하나의 type에 여러개의 subscript 사용 가능

  • subscript 하나에 여러개의 parameter 사용 가능

  • 예시

    struct Matrix {
        let rows: Int, columns: Int
        var grid: [Double]
    
        init(rows: Int, columns: Int) {
            self.rows = rows
            self.columns = columns
            self.grid = Array(repeating: 0.0, count: rows * columns)
        }
    
        func indexIsValid(row: Int, column: Int) -> Bool {
            return row >= 0 && row < rows && column >= 0 && column < columns
        }
    
        subscript(row: Int, column: Int) -> Double {
            get {
                assert(self.indexIsValid(row: row, column: column), "Index out of range")
                return grid[(row * self.columns) + column]
            }
            set {
                assert(self.indexIsValid(row: row, column: column), "Index out of range")
                grid[(row * self.columns) + column] = newValue
            }
        }
    }
    
    var A = Matrix(rows: 3, columns: 4)
    print(A[2, 3]) // 0.0

Inheritance

  • Base Class
    • 다른 class로부터 상속받지 않은 class
  • NSObject 상속 받을 필요 없음
    • Objective-C의 경우 run-time에 필요한 모든 동작들의 기본이 NSObject에 구현되어 있음
    • Objective-C로 구현된 framework와 맞물려 동작하는 경우 NSObject를 상속 받아야 할 경우도 있음
      • NSCoding
  • Overriding property
    • superclass의 getter, setter 변경 가능
    • observer 추가 가능
    • read-only -> read-write O
    • read-write -> read-only 불가능
      class Car: Vehicle {
          var gear = 1
          override var description: String {
              return super.description +  "in gear"
          }
      }
  • preventing overrides
    • final 키워드를 통해 상속이 불가능하게 할 수 있음
    • method, property, subscript, class
    • Static Dispatch 때문에 컴파일 속도가 더 빨라질 수 있음
profile
Goal, Plan, Execute.

0개의 댓글