본문 바로가기
Swift/기본

상속

by 밤새는탐험가 2024. 4. 4.

상속

 

클래스, 프로토콜: 상속 가능 

열거형, 구조체: 상속 불가능 

 

다중상속은 미지원 

 

 

클래스의 상속과 재정의

class 이름: 상속받을 클래스 이름 {
    /* 구현부 */
}

 

// 기반 클래스 Actor

class Actor {
    var name: String = ""
    
    func selfIntroduce() {
        print("안녕하세요 저는 \(self.name) 배우입니다.")
    }
    
    
    // final 키워드를 사용하여 재정의를 방지할 수 있다.
    final func myName() {
        print("안녕하세요 저는 actor 클래스 내에 있습니다.")
    }
    
    
    // 타입 메서드
    // 재정의 불가 타입 메서드 - static
    static func typeMethod() {
        print("type method - static")
    }
    
    
    // 재정의 가능 타입 메서드 - class
    class func classMethod() {
        print("type method - class")
    }
    
    
    /*
     재정의 가능한 class 메서드라도
     final 키워드를 사용하면 재정의 할 수 없다.
     메서드 앞의 'static'과 'final class'는 같은 역할을 한다.
     */
    final class func finalClassMethod() {
        print("type method - final class")
    }
}


// Actor를 상속받는 Movie
class Movie: Actor {
    
    var movieTitle: String = ""
    
    override func selfIntroduce() {
        print("영화 제목: \(self.movieTitle), 출연 배우: \(self.name)")
    }
    
    override class func classMethod() {
        print("overrided type method - class")
    }
    
    // static을 사용한 타입 메서드는 재정의 할 수 없습니다
//    override static func typeMethod() {    }
    
    // final 키워드를 사용한 메서드, 프로퍼티는 재정의 할 수 없습니다
//    override func sayHello() {    }
//    override class func finalClassMethod() {    }
}

 

 

동작 확인 

var jerry: Actor = Actor()
jerry.name = "김제리"
jerry.selfIntroduce()        // 안녕하세요 저는 김제리 배우입니다.


var ironMan: Movie = Movie()
ironMan.movieTitle = "아이언맨"
ironMan.name = "로버트"

ironMan.selfIntroduce()      // 영화 제목: 아이언맨, 출연 배우: 로버트

 

 

'Swift > 기본' 카테고리의 다른 글

옵셔널 체이닝  (0) 2024.04.06
인스턴스의 생성과 소멸  (0) 2024.04.05
프로퍼티  (0) 2024.04.03
Class vs Struct / Enum  (0) 2024.04.03
열거형  (0) 2024.04.02