클래스는 메서드, 프로퍼티와 다른 특징을 다른 클래스로부터 상속할 수 있습니다. 클래스에서는 저장프로퍼티와 계산 프로퍼티와 상관없이 상속받은 프로퍼티에 프로퍼티 옵저버를 설정해서 값 설정에 반응 할 수 있습니다

class 클래스 이름: 부모클래스 이름 {
		프로퍼티와 메서드들
}

Defining a Base Class(기반 클래스)

<aside> 💡 다른 어떤 클래스로부터도 상속받지 않은 클래스를 기반 클래스라 합니다. Objective-C에서는 모든 클래스가 NSObject클래스로부터 파생된 클래스로 생성되는 것과 달리 Swift에서는 SuperClass 지정없이 클래스 선언이 가능하고 그 클래스가 SuperClass가 됩니다.

</aside>

<aside> 💡 클래스는 메서드나 프로퍼티 등을 다른 클래스로부터 상속받을 수 있다.

class Vehicle {
		var currentSpeed = 0.0
		var description: String {
				return "traveling at \\(currentSpeed)"
		}
		func makeNoise() {
		
		}
}

print("Vehicle: \\(someVehicle.description)")

<aside> 💡 [수직확장] 본질적으로 성격이 비슷한 타입을 새로 만들어 1) 데이터(저장속성)를 추가하거나 2) 기능(메서드)를 변형시켜서 사용하려는 것

상속은 유일하게 클래스에서만 지원하는 기능(구조체는 상속 불가능) 한 클래스가 가지고 있는 프로퍼티와 메소드를 다른 클래스에게 그대로 승계해주는것

클래스는 메소드, 프로퍼티와 다른 특징(characteristics)을 다른 클래스로 부터 상속할 수 있습니다. 이것이 Swift에서 클래스가 다른 타입과 구분되는 근본적인 요소입니다. 클래스에서는 저장된 프로퍼티와 계산된 프로퍼티와 상관없이 상속받은 프로퍼티에 프로퍼티 옵저버를 설정해서 값 설정에 반응할 수 있습니다.

Swift에서의 상속

❓다른 클래스를 상속받으면 똑같은 기능을 구현하기 위해 코드를 다시 작성할 필요가 없으므로 코드를 재사용하기 용이하고 더불어 기능을 확장할 때 기존 클래스를 변경하지 않고도 새로운 추가기능을 구현한 클래스를 정의할 수 있다.

class AClass {
    var name = "이름"
}

class BClass: AClass {
    // name
    var id = 0
}

final class CClass: BClass {
     name
    var city = 0
} // final을 붙이면 더이상 새로운 클래스를 만들어서 상속할 수 없음, 더이상 재정의가 불가하다.

let b = BClass()
b.id
b.name

// BClass는 AClass를 상속해서 구현
// 서브클래스는 슈퍼클래스로부터 멤버를 상속함

// 클래스의 **상속 금지의 키워드 final⭐️**
// (경우에 따라서, 클래스의 상속을 금지해야하는 경우가 있음)

// (final를 각 멤버 앞에(변수앞에) 붙인 경우, 해당 멤버(변수) 재정의 불가라는 뜻)
//class CClass: BClass {
    // name
    // final var city = 0
//}  더이상 새로운 클래스를 만들어서 상속할 수 없음

Subclassing(서브클래싱)

상속, 다시말해 서브클래싱을 하면 부모로 부터 성격을 상속받고 자기 자신 고유의 특성도 추가할 수 있습니다. 서브클래싱해 새 클래스를 선언하는 코드는 다음과 같습니다.

//서브클래싱해 새 클래스를 선언하는 코드
class SomeSubclass: SomeSuperclass {
    // subclass definition goes here
}

class Bicycle: Vehicle {
		var hasBasket = false
}

let bicycle = Bicycle()
bicycle.hasBasket = true

bicycle.currentSpeed = 15.0
print("bicycle: \\(bicycle.description)")

class Tandem: Bicycle {
		var currentNumberOfPassengers = 0
}

let tandem = Tandem()
tandem.hasBasket = true
tandem.currentNumberOfPassengers = 2
tandem.currentSpeed = 22.0
print("Tandem: \\(tandem,description)")

Overrinding(오버라이딩,오버라이드,재정의)

Overriding (오버라이딩 / 재정의)