본문 바로가기
Swift 기초 문법 👊

[Swift_문법] Inheritance(상속)에 대해 진심으로 알아보는 윤기사_9

by 개발하는윤기사 2022. 6. 2.
728x90
반응형

안녕하세요 이웃님들~ 메소드 게시글에 이어서 이번 게시글에서는 상속에 대해 다루어 볼건데요!

 

오늘도 잘 따라오실 준비 되셨나요? 바로 출발하겠습니다!

 

상속(Inheritance)의 대한 기본 개념부터 잡고 갈게요~

 

클래스는 메소드, 프로퍼티와 다른 특징(characteristics)을 다른 클래스로 부터 상속할 수 있습니다.

이것이 Swift에서 클래스가 다른 타입과 구분되는 근본적인 요소입니다!

클래스에서는 저장된 프로퍼티/계산된 프로퍼티와 상관없이 상속받은 프로퍼티에 프로퍼티 옵저버를 설정해서 값 설정에 반응이 가능합니다!

 

하나하나 살펴보도록 할게요~!

 

스위프트에서 상속의 특징입니다!

 

  1. 구조체는 불가능하고, 클래스에는 가능하다.
  2. 자식 클래스가 부모클래스로부터 기능을 물려받는것
  3. 상속 받은 클래스도 새로운 자식 클래스에게 상속 가능
  4. 단일 상속만 가능

종류는 크게 두 가지가 있는데요. 바로 서브클래싱(SubClassing)과 오버라이딩(Overriding)이 있습니다.

 

- 서브 클래싱 -

 

서브클래싱을 하면 부모로 부터 성격을 상속받고 자기 자신 고유의 특성도 추가할 수 있습니다!!

 

서브클래싱 기본 선언 코드
서브클래싱의 예제!!

 

 

- 오버라이딩 -

 

서브클래스에서는 부모클래스에서 상속받은 것을 재정의 할 수 있습니다!

이것을 overriding 이라 부르는데, 오버라이딩은 인스턴스 메소드, 타입 메소드, 인스턴스 프로퍼티, 타입 프로퍼티, 서브스크립트 모두에 대해 가능합니다.

오버라이드를 위해서는 다른 선언 앞에 <override>키워드를 붙여줍니다.

스위프트에서는 이 override키워드를 보면 부모에 그 정의가 있는지 확인하는 방식입니다!

 

1. 메소드 오버라이드

 상속받은 메소드를 오버라이드 하기 위해서는 메소드 선언 앞에 override키워드를 붙이고 내용을 적어주면 됩니다~

메소드 오버라이드

 

2. 프로퍼티 오버라이드

 

서브클래스에서는 상속받은 저장된 프로퍼티, 계산된 프로퍼티 모두 오버라이드가 가능합니다.

오버라이드시에는 프로퍼티의 이름과 타입을 명시해야합니다.

서브클래스에서는 단순히 상속받은 특정 형의 프로퍼티가 있다는 정도만 알고 있기 때문입니다.

 

* 상속받은 읽기전용 프로퍼티getter/setter를 정의해서 읽고/쓰기가 가능한 프로퍼티로 변경해서 제공 가능합니다.

* 하지만 반대의 읽고/쓰기가 가능한 프로퍼티읽기전용 프로퍼티로 선언하는 것은 불가능합니다.

 

프로퍼티 오버라이드

 

3. 오버라이드 방지 (Preventing Overrides)

 

서브클래스에서 특정 메소드, 프로퍼티, 서브스크립트가 오버라이드 되는 것을 방지하려면 final키워드를 사용합니다.
 
final로 선언되면 override되는 것을 막을 수 있습니다. (final func, final class func)
 
만일 final로 선언된 메소드, 프로퍼티, 서브스크립트를 오버라이드 하려고 하면 컴파일 시간(compile-time)에 에러가 발생합니다.
 
클래스 전체를 final로 선언해서 클래스 안의 모든 메소드, 프로퍼티 등이 override가 되는 것을 막을 수 있습니다. (final class)

 

 

 

 

이상 오늘 포스팅을 마치겠습니다~ 오늘 다룬 상속에 관하여 잘 이해 하셨나요? 

 

항상 열심히 정리해서 우리 이웃님들께 알차게 알려드리는 윤기사가 되겠습니다!

 

오늘도 좋은 하루 보내세요~!

728x90
반응형