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 키워드 씀