Swift: Inheritance / 상속

Wooyo·2023년 10월 23일
0
post-thumbnail

1. 상속

  • 스위프트의 상속 : 클래스 / 프로토콜
  • 구조체 / 열거형은 상속이 불가
  • 다중 상속을 지원하지 않음
class ClassName: ParentClassName {
	// code
}

2. 정의

  • final: 이 키워드를 사용하여 재정의 방지 가능 / 주 목적은 override 방지
  • static: 재정의 불가 타입 메서드 / 타입메서드와 타입프로퍼티이고 추가적으로 재정의 방지기능이 있는 차이
  • class: 재정의 가능 타입 메서드
  • final class: 재정의 가능한 class 메서드라도 final 키워드를 사용하면 재정의 불가 (final class === static)
// parent class
class Person {
	var name: String = ""
    func selfIntro () {
    	print("i am \(name)")
    }
    
    // final 키워드 사용하여 재정의 방지
    final func sayHello() {
    	print("hello")
    }
    
    // type method
    // 재정의 불가 타입 메서드 - static
    static func typeMethod() {
    	print("type method - static")
    }
    
    // 재정의 가능 타입 메서드 - class
    class func classMethod() {
    	print("type method - class")
    }
    
    // final class
   	final class func finalClassMethod() {
    	print("type method - final class")
    }
}

// Person 상속 Student
class Student: Person {
	// 상속을 받아왔기 때문에 name 프로퍼티를 아래와 같이 입력시 컴파일 오류 발생
    //var name: String = "dd"
    var major: String = ""
    
    overrind func selfIntro() {
    	print("i am \(name), major is \(major)")
    }
    
    override class func classMethod() {
    	print("overriden type method - class")
    }
    
    // static 재정의시 컴파일 오류 발생
    // override static func typeMethod() {}
    
    // final 키워드 재정의시 컴파일 오류 발생
    // override func sayHello() {}
    // override class func finalClassMethod() {}
}

// 동작 확인
let per: Person = Person()
let stu: Student = Student()

per.name = "per"
stu.name = "stu"
stu.major = "mech"

per.selfIntro() // i am per

stu.selfIntro() // i am stu, major is mech

Person.classMetho() // type method - class

Person.typeMethod() // type method - static

Person.finalClassMethod() // type method - final class

Student.classMethod() // overriden type method - class

Student.typeMethod() // type method - static

Student.finalClassMethod() // type method - final class
profile
Wooyo의 개발 블로그

0개의 댓글