본문 바로가기

프로그래밍 [KOR]/Swift

Swift의 상속

1. 스위프트 상속


  •상속은 클래스, 프로토콜 등에서 가능

  •열거형, 구조체는 상속이 불가능

  •스위프트의 클래스는 단일상속으로, 다중상속을 지원하지 않음



2. 문법


1
2
3
class 이름: 상속받을 클래스 이름 {
    /*  */
}
cs



3. 사용


  •final 키워드를 사용하면 재정의(override)를 방지할 수 있음

  •static 키워드를 사용해 타입 메서드를 만들면 재정의가 불가능

  •class 키워드를 사용해 타입 메서드를 만들면 재정의가 가능

  •class 앞에 final을 붙이면 static 키워드를 사용한 것과 동일하게 동작

  •override 키워드를 사용해 부모 클래스의 메서드를 재정의 할 수 있음


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// 기반 클래스 Person
class Person {
    var name: String = ""
    
    func selfIntroduce() {
        print("저는 \(name)입니다")
    }
 
    // final 키워드를 사용하여 재정의를 방지할 수 있음
    final func sayHello() {
        print("hello")
    }
 
    // 타입 메서드
    // 재정의 불가 타입 메서드 - 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")
    }
}
 
// Person을 상속받는 Student
class Student: Person {
    var major: String = ""
 
    override func selfIntroduce() {
        print("저는 \(name)이고, 전공은 \(major)입니다")
    }
 
    override class func classMethod() {
        print("overriden type method - class")
    }
 
    // static을 사용한 타입 메서드는 재정의 할 수 없음
    // override static func typeMethod() { }
    
    // final 키워드를 사용한 메서드, 프로퍼티는 재정의 할 수 없음
    // override func sayHello() { }
    // override class func finalClassMethod() { }
 
}
cs



4. 구동 확인


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
let jinun: Person = Person()
let jennie: Student = Student()
 
jinun.name = "jinun"
jennie.name = "jennie"
jennie.major = "Swift"
 
jinun.selfIntroduce()
// 저는 jinun입니다
 
jennie.selfIntroduce()
// 저는 jennie이고, 전공은 swift입니다
 
Person.classMethod()
// type method - class
 
Person.typeMethod()
// type method - class
 
Person.finalClassMethod()
// type method - final class
 
 
Student.classMethod()
// overriden type method - class
 
Student.typeMethod()
// type method - static
 
Student.finalClassMethod()
// type method - final class
cs