iOS프로그래밍기초(Smile Han)/문법 정리

[Swift] 문법 정리 - 상속

wse46 2024. 11. 10. 23:17
https://youtu.be/R8OWOgCNt4M?si=bldau6gYEZ3seGj2

위 영상을 보고 정리한 글입니다. (27:25 ~ )

 

superclass(부모 클래스)

subclass(자식 클래스)

 

# Swift 상속

class 자식: 부모 {
}
  • 부모 클래스는 하나만 가능함.
  • 여러개라면 나머지는 부모 클래스가 아닌 프로토콜
class 클래스명: 부모명, 프로토콜명{}
// 부모가 있으면 부모 다음에 표기
class 클래스명: 부모명, 프로토콜명1, 프로토콜명2{}
class 클래스명: 프로토콜명1, 프로토콜명2{}
// 부모가 없으면 바로 표기 가능
class 클래스명: 프로토콜명1, 프로토콜명2{}
  • 클래스, 구조체, 열거형, extension에 프로토콜을 채택(adopt)할 수 있다.
class Man{
    var age : Int = 1
    var weight : Double = 3.5
    func display(){
        print("나이=\(age), 몸무게=\(weight)")
    }
    init(age: Int, weight: Double){
        self.age = age
        self.weight = weight
    }
 }
 class Student: Man {
     // 비어있지만 Man의 모든 것을 가지고 있음
 }
 
 var kim = Man(age:10, weight:20.5)
 kim.display()
 var cho : Student = Student(age:20, weight:45.5)
 cho.display()
 print(cho.age)
  • 출력값
    나이=10, 몸무게=20.520
    나이=20, 몸무게=45.5

# super : 부모 메서드 호출 시 사용

class Man{
    var age : Int = 1
    var weight : Double = 3.5
    func display(){
        print("나이=\(age), 몸무게=\(weight)")
    }
    init(age: Int, weight: Double){
        self.age = age
        self.weight = weight
    }
}
class Student: Man {
    var name : String = "김소프"
    func displayS() {
        print("이름=\(name), 나이=\(age), 몸무게=\(weight)")
    }
    init(age: Int, weight: Double, name: String){
       super.init(age:age, weight:weight)
       self.name = name
   }
}
var cho : Student = Student(age:20, weight:45.5, name:"조재범")
cho.displayS()
cho.display()
  • 출력값
    이름=조재범, 나이=20, 몸무게=45.5
    나이=20, 몸무게=45.5

# override : 부모와 자식에 같은 메서드가 있으면 자식 우선

class Man{
    var age : Int = 1
    var weight : Double = 3.5
    func display(){
        print("나이=\(age), 몸무게=\(weight)")
    }
    init(age: Int, weight: Double){
        self.age = age
        self.weight = weight
    }
}
class Student: Man {
    var name : String = "김소프"
    override func display() {
        print("이름=\(name), 나이=\(age), 몸무게=\(weight)")
    }
    init(age: Int, weight: Double, name: String){
       super.init(age:age, weight:weight)
       self.name = name
   }
}
var cho : Student = Student(age:20, weight:45.5, name:"조재범")
cho.display()
  • 출력값
    이름=조재범, 나이=20, 몸무게=45.5
  • 부모와 자식에 display()라는 메서드가 있어서 Student 클래스는 display() 메서드가 두개임
  • Student 클래스의 인스턴스 cho가 display()를 호출할 때, 자식클래스 새로 만든 display() 메서드가 우선적으로 호출되려면 func 앞에 override 키워드 씀