[Swift 야곰] 2단원. 상속

Jamong·2023년 1월 14일
0

Day 10 - 2023.01.14

상속

  • 상속은 클래스, 프로토콜 등에서 가능하다.
  • 열거형, 구조체는 상속이 불가능하다.
  • 스위프트의 클래스는 단일상속으로, 다중상속을 지원하지 않는다.

클래스 상속 문법

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

클래스 상속 사용

  • final 키워드를 사용하면 재정의(overrid)를 방지할 수 있다.
  • static 키워드를 사용해 타입 메서드를 만들면 재정의가 불가능 하다.
  • class 키워드를 사용해 타입 메서드를 만들면 재정의가 가능하다.
  • class 앞에 final을 붙이면 static 키워드를 사용한 것과 동일하게 동작한다.
  • override 키워드를 사용해 부모 클래스의 메서드를 재정의 할 수 있다.
// 클래스 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 calss func finalClassMethod() {
    	print("type method - final class")
    }
}


// Person을 상속받는 Student
calss Student: Person {
	var major: String = ""
    
    override func selfIntroduce() {
    	print("저는 \(name)이고, 전공은 \(major)입니다.")
    }
    
    override calss func classMethod() {
    	print("override type method - class")
    }
    
    // static을 사용한 타입 메서드 재정의 불가
    override static func typeMethod() { }
    
    // final 키워드를 사용한 메서드, 프로퍼티는 재정의 불가
    override func sayHello() { }
    override class func finalClassMethod() { }
   

구동 확인

let jaomg: Person = Person()
let yagom: Student = Student()

jamong.name = "jamong"
yagom.name = "yagom"
yagom.major = "Swift"

jamong.selfIntroudce()		// 출력 : 저는 jamong입니다.

yagom.selfIntroudce()		// 출력 : 저는 yagom이고, 전공은 Swift입니다.

Person.classMethod()		// 출력 : type method - class

Person.typeMethod()			// 출력 : type method = static

Person.finalClassMethod()	// 출력 : type method - final class


Student.classMethod()		// 출력 : override type method - class

Student.typeMethod()		// 출력 : type method - static

Student.finalClassMethod() 	// 출력 : type method - final class
profile
새해 목표 : 1일 1 깃, 블로그, 프로그래머스 2문제

0개의 댓글