231201 TIL_ 상속

ykyo·2023년 12월 1일
0

상속

  • 상속
    -Swift에서 상속은 클래스 간의 코드 및 속성을 공유하는 메커니즘을 제공한다
    -상속은 기존 클래스에서 새로운 클래스를 만들고 기존 클래스의 특성(속성과 메서드)을 재사용 하면서 새로운 기능을 추가할 수 있도록 해줌(서브 클래싱)
    -상속의 장점 두 가지
    -1. 코드 재사용성 : 기존 클래스의 특성을 재사용하여 중복을 피하고 유지보수성을 높임
    -2. 계층구조 : 부모 클래스와 자식 클래스 간에 계층 구조 형성. 다양한 추상화와 분류 가능

  • override
    -override 키워드는 부모 클래스에서 상속받은 메서드, 속성 또는 서브스크립트를 자식 클래스에서 재정의함
    -자식 클래스에서 부모 클래스의 메서드를 재정의하여 새로운 구현을 제공할 수 있다

  • super
    -super 키워드는 자식 클래스에서 부모 클래스의 메서드, 속성 또는 초기화 메서드를 호출할 때 사용
    -부모 클래스의 메서드를 호출하거나 부모 클래스의 초기화 메서드를 호출하는 데 사용
    -super.method() 또는 super.property 와 같이 사용하여 부모 클래스의 기능을 호출

  • final
    -final 키워드는 클래스, 메서드, 속성 또는 서브스크립트를 표시하여 상속이 불가하도록 만드는 것
    -final 키워드가 클래스에 사용되면 해당 클래스는 상속이 불가
    -메서드, 속성, 서브스크립트에 사용될 경우 해당 멤버들을 재정의(override)할 수 없음

class Person{
	var name : String
    var age : Int
    
    init(name: String, age: Int){
    	self.name = name
        self.age = age
    }
    
    func greet(){
    	print("Hello, my name is \(name).")
    }
}

// Person 클래스를 상속받는 자식 클래스 (Student) 선언
class Student: Person{
	var studentID: Int
    
    init(name: String, age: Int, studentID: Int){
    	self.studentID = studentID
        super.init(name: name, age: age)
    }
    
    func study(){
    	print("\(name) is studying.")
    }
}

// Student 클래스 인스턴스 생성 및 사용
let john = Student(name: "John", age: 20, studentID: 123)
john.greet() // 출력 : Hello, my name is John.
john.study() // 출력 : John is studying.

--------------------------------------------------------------------------------------------------

// override, super 키워드 예시
class Animal {
	func makeSound(){
    	print("Some generic sound")
    }
}

class Dog: Animal {
	override func makeSound() {
    	super.makeSound() // 부모 클래스의 메서드 호출
        print("Bark!")
    }
}

let dog = Dog()
dog.makeSound()
// 출력: Some generic sound
//		Bark!

--------------------------------------------------------------------------------------------------

// final 키워드 예시
final class Vehicle {
	final var wheels: Int = 0
    
    final func makeSound() {
    	print("Some generic sound")
    }
}

// Error : 'SubVehicle' cannot inherit from final class 'Vehicle'
class SubVehicle : Vehicle {
	// Error : 'wheels' cannot override 'final' var from superclass
    // override var wheels: Int = 4
    
    // Error : 'makeSound()' cannot override a final method
    // override func makeSound() {
    // 	   print("Custom sound")
    // }
}
profile
for ios, swift, etc.

0개의 댓글