본문 바로가기
⌨️ Language/swift

[Swift] 상속

by hyebin (Helia) 2024. 3. 22.

상속(Inheritance)

  • 클래스에서 다른 클래스로 부터 상속할 수 있음
  • 클래스에서 저장 프로퍼티, 계산 프로퍼티 상관없이 상속 받은 프로퍼티에 프로퍼티 옵저버를 사용해 값 설정에 반응할 수 있음

기반클래스

다른 어떤 클래스로부터 상속받지 않은 클래스 SomeSuperclass

서브클래싱

부모로 부터 성격을 상속받고 자신 고유의 특성도 추가할 수 있음

class SomeSubclass: SomeSuperclass {
	// subclass definition goes here
}

서브클래싱은 계속할 수 있음

 

오버라이딩 (Overriding)

  • 서브클래스에서 부모클래스에서 상속받은 것을 재정의
  • 인스턴스, 메소드, 타입 메소드, 인스턴스 프로퍼티, 타입 프로퍼티, 서브스크립트 모두 가능
  • 다른 선언 앞에 override키워드 붙여 사용

부모클래스의 메소드, 프로퍼티, 서브스크립트의 접근

super키워드와 점문법 혹은 인덱스 구문으로 부모 클래스의 메소드, 프로퍼티, 서브스크립트에 접근

ex) super.someMethod, super.someProperty, super[someIndex]

 

메소드 오버라이드

메소드 선언 앞에 override 키워드 사용

 

프로퍼티 오버라이드

  • 서브클래스에서는 상속받은 저장된 프로퍼티, 계산된 프로퍼티 모두 오버라이드 가능
    • (오버라이드 시, 프로퍼티 이름과 타입 명시
  • 서브클래스에서는 단순히 상속받은 특정 형의 프로퍼티가 있다는 정도만 알고 있기 때문에 상속받은 읽기전용 프로퍼티더라도 getter/setter를 정의해서 읽고/쓰기가 가능한 프로퍼티로 변경해서 제공 가능

 

프로퍼티 옵저버 오버라이드

이미 부모클래스에 선언된 프로퍼티 옵저버도 서브클래스에 재정의해 사용 가능

 

💡

  • 상수 프로퍼티와 읽기전용 프로퍼티에는 옵저버를 붙일 수 없음
    • 정의 그대로 set을 할 수 없는 프로퍼티이기 때문
  • 같은 프로퍼티에 옵저버를 추가하고 setter를 추가해 둘을 동시에 사용할 수 없음
    • 이미 setter를 설정했다면 옵저버를 붙인 것과 같은 동작을 하기 때문

 

오버라이드 방지

  • 서브클래스에서 특정 메소드, 프로퍼티, 서브스크립트가 오버라이드 되는 것을 방지하기 위해 final키워드를 사용
    • final로 선언되면 override되는 것을 막을 수 있음.
    • final func, final class func, final subscript
  • 만일 final로 선언된 메소드, 프로퍼티, 서브스크립트를 오버라이드 하려고 하면 컴파일 시간에 에러가 발생
    • 클래스 전체를 final로 선언해서 클래스 안의 모든 메소드, 프로퍼티 등이 override가 되는 것 방지 가능
    • final class
반응형

'⌨️ Language > swift' 카테고리의 다른 글

[Swift] 옵셔널 체이닝  (0) 2024.03.26
[Swift] 초기화  (1) 2024.03.25
[Swift] 서브스크립트  (0) 2024.03.22
[Swift] 메서드  (0) 2024.03.21
[Swift] 프로퍼티  (0) 2024.03.20

댓글