아삭아삭 iOS 개발

[Swift 독학] 패스트캠퍼스 챌린지 25일차_상속 본문

Swift

[Swift 독학] 패스트캠퍼스 챌린지 25일차_상속

바닐라머스크 2022. 2. 17. 23:35

■ 상속 (Inheritance)

  • 클래스는 다른 클래스로부터 메서드, 프로퍼티 또는 다른 특성들을 상속받을 수 있음
    → 클래스/프로토콜 등에서는 가능, 열거형/구조체는 상속 불가
    → 스위프트에서는 단일상속만 지원, 다중상속은 지원하지 않음
  • 슈퍼 클래스 (=superclass, 부모 클래스)
    : 한 클래스가 다른 클래스를 상속할 때, 상속하는 클래스
  • 서브 클래스 (=subclass, 자식 클래스)
     : 한 클래스가 다른 클래스를 상속할 때, 상속받는 클래스
class 클래스 이름: 부모 클래스 이름 {
            / 구현부 /
}

 

■ 스위프트에서의 상속 클래스 특징

  • 부모 클래스로부터 물려받은 메서드, 프로퍼티, 서브스크립트를 호출하거나 접근할 수 있음
  • 물려받은 메서드, 프로퍼티, 서브스크립트 등을 오버라이딩을 통해 자신만의 내용으로 재정의(=수정) 가능
  • 상속받은 프로퍼티의 값이 변경되었을때  알려주기 위해 상속된 프로퍼티에 프로퍼티 관찰자도 추가 가능
    ※ 부모 프로퍼티가 연산 프로퍼티로 정의되었든, 저장 프로퍼티로 정의되었든지와 무관하게 자식 클래스에서 프로퍼티 감시자 구현 가능
  • 베이스 클래스 (base class, 기본 클래스)
    다른 클래스에서 상속받지 않은 클래스
  • 하위 클래스 (subclassing)
    : 다른 클래스에서 상속받는 클래스
    :
    하위 클래스는 기존 클래스의 특성을 수정할 있음
    :
    하위 클래스에 새로운 특성을 추가할 있음
// 베이스 클래스 Music 정의해줌
class
Music {
    var beat = 0.0
    var description: String {
        return "dancing \(beat) rhythm in the moonlight"
    }
    func singing() {
        // do nothing
    }
}

let someMusic = Music() // 인스턴스 생성

print("Music: \(someMusic.description)")
// Music: dancing 0.0 ryhthm in the moonlight

// 자식 클래스 EDM는 부모클래스 Music를 상속받음
// 또한 부모 클래스와는 별개로 hasbounce 이라는 새로운 저장된 프로퍼티를 정의해줌. 빠운스!
class EDM: Music {
    var hasBounce = true
}

let edm = EDM()
edm.hasBounce = false

// EDM인스턴스의 상속된 beat 프로퍼티를 0.0에서 12.0으로 수정해줌
edm.beat = 120.0
print("EDM: \(edm.description)")
// EDM: dancing 120.0 rhythm in the moonlight

class Boom: EDM {
    var soundOfMusic = 1
}

let boom = Boom()
boom.hasBounce = true
boom.soundOfMusic = 3
boom.beat = 55.0
print("Boom: \(boom.description)")
// Boom: dancing 55.0 rhythm in the moonlight  💃🕺

 

본 게시물은 개인 공부 기록용이므로 내용에 오류가 있을 수 있습니다.

 

 fast campus강의  참조자료

[1] https://bbiguduk.gitbook.io/swift/language-guide-1/inheritance

 

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.