ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Class의 상속
    오늘의 Swift 상식 2021. 8. 15. 21:07
    728x90
    반응형

     

     

     

     

     

     

    안녕하세요. iOS 개발자 에이든입니다!👦🏻

     

     

     

    오늘은 Class의 상속에 대해서 알아볼게요!

    상속이라는 개념은 다른 언어들에서도 많이 있는 개념인데요

    과연 Swift에서는 어떨지 같이 알아보도록 합시다!

     

    시작!!!

     


     

    자 먼저 상속의 개념에 대해 설명드릴게요. 상속이란

    한 Class가 가지고 있는 Property와 Method를 다른 Class에게 그대로 승계해주는 것을 말합니다.

     

    Swift에서의 상속은 어떤지 볼까요?

    1. Class에만 있고, Struct에는 없습니다.
    2. 자식 Class가 부모 Class로부터 기능을 물려받는 것
    3. 승계해주는 Class는 보통 부모/슈퍼/상위 Class라고 부릅니다.
    4. 승계받는 Class는 보통 자식/서브/하위 Class라고 부릅니다.
    5. 상속받은 Class도 새로운 자식 Class에게 상속이 가능합니다.
    6. 단일 상속만 가능합니다. (한 부모한테만 상속받을 수 있습니다.)
    7. 부모 Class의 Instance를 참조할 때는 super라는 키워드를 사용합니다. (super.property)
    8. 부모 Class의 Instance가 private이면 해당 Instance는 상속 자체가 안 되고, 접근도 제한됩니다.

    * 문법 구조
    class SubClass: SuperClass {
    
    }​

     

     

     

    자 예를 들어 부모님이 건물주예요!

    건물을 상속받았다고 합시다. (상상만으로 행복하네요 🥰)

    그 전에는 건물을 카페 건물로 썼는데, 저는 학원으로 용도를 바꿀 수도 있겠죠?

     

    Class에서도 마찬가지로 상속받았지만 용도를 바꿀 수 있습니다.


    Overriding (재정의)

     

    1.Overriding Methods

    • Overriding 대상이 되는 Method의 매개변수 개수나 Type, 그리고 Return Type은 변경할 수 없습니다.
    • Method Overriding을 통해 변경할 수 있는 것은 오로지 내부 구문들 뿐이에요.
    override func method(/* 변경 불가 */) -> String/* 변경 불가 */ {
    	return 값
    }

     

     

    2. Overriding Properties

    • Property의 접근자, 설정자, 감시자(Oberver)를 재정의
    • 저장 Property를 Overriding 할 때는 연산 Property가 됩니다.
    • Property의 Overriding은 상위 Class의 기능을 하위 Class가 확장, 또는 변경하는 형태로만 진행되어야 합니다!
    class 탈것 {
        var 경적소리 = "빵"
    }
    
    class 자동차: 탈것 {
        var 경적횟수: Int = 2
        override var 경적소리: String {
            get {
                var 자동차경적소리 = ""
                for _ in 0..<경적횟수 {
                    자동차경적소리 += super.경적소리
                }
                return 자동차경적소리
            }
            set {
                super.경적소리 = newValue
            }
        }
    }
    
    let vehicle = 탈것()
    let car = 자동차()
    
    print(car.경적소리) // 빵빵
    
    // 참조 Type이므로 외부에서 Super Class의 Property를 달라고해도 car 내부에서 구현된 상태로 나옵니다.
    print((car as 탈것).경적소리) // 빵빵
    
    print(vehicle.경적소리) // 빵

     

     

    3. Overriding Property Observers

    • Property Overriding을 사용하여 상속된 Property에 Property Observer를 추가할 수 있습니다.
    • 상속된 Property의 값이 변경될 때, 해당 Property가 처음 구현된 것과 상관없이 알림을 받을 수 있습니다.
    • 상속된 상수 저장 Property 또는 읽기 전용 연산 Property에는 Property Observer를 추가할 수 없습니다.
    • 동일한 Property에 대해 Override setter와 Overriding Property Observers를 둘 다 제공할 수는 없습니다.
    class 특이한자동차: 자동차 {
        override var 경적횟수: Int {
            didSet {
                경적소리 = "뿡"
            }
        }
    }
    
    let specialCar = 특이한자동차()
    
    // 경적횟수를 지정해주면, 알아서 경적소리를 뿡으로 변경
    specialCar.경적횟수 = 3
    print(specialCar.경적소리) // 뿡뿡뿡

     

     

     

    4. Overriding을 막는 법:부모 Class에서 해당 Property나 Method를 정의할 때 final이라는 키워드를 앞에 붙여줍니다.

     


     

    오늘은 상속에 대해 알아보았습니다.

    확실히 다른 언어랑 다른 부분들이 있죠?

    잘 활용하면 좀 더 간략하게 코드를 짤 수 있으니

    잘 알고 잘 써먹는 게 중요할 것 같아요!

     

     

     

    혹시라도 부족하거나 잘못된 부분 그리고 질문 있으시면 언제든 댓글 부탁드려요! 감사합니다!👦🏻👋🏻

    728x90
    반응형

    댓글

Designed by Tistory.