오늘의 Swift 상식 (클래스의 상속)

장국진
2 min readJul 2, 2019

--

상속(Inheritance)이란?

한 클래스가 가지고 있는 프로퍼티와 메소드를 다른 클래스에게 그대로 승계해주는것

Swift에서의 상속

  • 클래스에만 있고, 구조체에는 없다.
  • 자식클래스가 부모클래스로 부터 기능을 물려받는것
  • 승계해 주는 클래스: 부모/슈퍼/상위 클래스
  • 승계 받는 클래스 : 자식/서브/하위 클래스
  • 상속 받은 클래스도 새로운 자식 클래스에게 상속 가능하다.
  • 단일 상속만 가능
  • 문법 구조
class SubClass: SuperClass {}

Overriding (재정의)

프로퍼티 오버라이딩 (Overriding Properties)

  • 프로퍼티의 접근자, 설정자, 감시자를 재정의
  • 저장 프로퍼티를 오버라이딩 할 때는 연산프로퍼티가 된다.
  • 프로퍼티의 오버라이딩은 상위 클래스의 기능을 하위 클래스가 확장, 또는 변경하는 형태로만 진행되어야 한다.

메소드 오버라이딩 (Overriding Methods)

  • 오버라이딩 대상이 되는 메소드의 매개변수 개수나 타입, 그리고 반환 타입은 변경 할 수 없다.
  • 메소드 오버라이딩을 통해 변경할 수 있는 것은 오로지 내부 구문들 뿐이다.

프로퍼티 옵저버 오버라이딩 (Overriding Property Observers)

  • 프로퍼티 오버라이딩을 사용하여 상속된 프로퍼티에 프로퍼티 옵저버를 추가할 수 있다.
  • 상속 된 프로퍼티의 값이 변경될 때, 해당 프로퍼티가 처음 구현된 것과 상관없이 알림을 받을 수 있다.
  • 상속된 상수 저장 프로퍼티 또는 읽기전용 연산프로퍼티에는 프로퍼티 옵저버를 추가할 수 없다.
  • 동일한 프로퍼티에 대해 override setter와 override 프로퍼티 옵저버를 둘다 제공할 수는 없다.

Super Object

  • 부모클래스의 인스턴스를 참조할 수 있도록 super라는 키워드를 제공한다.

오버라이딩을 막는법 (Preventing Override)

  • 재정의를 원치 않을 경우 사용한다.
  • final 키워드를 붙여서 사용한다.

만약 부모클래스의 저장 프로퍼티에 private을 붙인다면?

- 부모클래스의 인스턴스에 private을 하면 상속 자체가 안 된다.

- 접근 제한도 상속된다.

--

--