🔥 상속의 개념과 서브클래싱

362자
5분

객체 지향 프로그래밍에서 상속(Inheritance)은 매우 중요한 개념 중 하나입니다. 상속을 통해 기존 클래스의 특성을 물려받아 새로운 클래스를 만들 수 있죠. 이렇게 상속을 받은 클래스를 서브클래스(Subclass)라고 하고, 상속을 해준 클래스를 수퍼클래스(Superclass)라고 합니다.

서브클래싱(Subclassing)은 수퍼클래스를 기반으로 새로운 클래스를 만드는 것을 말해요. 서브클래스는 수퍼클래스의 특성을 상속받아 그대로 사용할 수도 있고, 필요에 따라 수정하거나 새로운 특성을 추가할 수도 있습니다.

서브클래스 정의하기

Swift에서 서브클래스를 정의할 때는 클래스 이름 뒤에 콜론(:)을 붙이고 수퍼클래스 이름을 적어주면 됩니다.

class SomeSubclass: SomeSuperclass {
    // 서브클래스 정의
}
swift

예를 들어, Vehicle이라는 클래스를 수퍼클래스로 하는 Bicycle 서브클래스를 정의해볼까요?

class Bicycle: Vehicle {
    var hasBasket = false
}
swift

Bicycle 클래스는 Vehicle의 모든 특성을 자동으로 상속받습니다. 예를 들면 currentSpeeddescription 속성, 그리고 makeNoise() 메서드 등이 있죠.

상속받은 특성 외에도 Bicycle 클래스는 hasBasket이라는 새로운 저장 속성을 정의하고 있어요. 이 속성의 기본값은 false이고, Swift는 타입 추론을 통해 Bool 타입으로 판단합니다.

서브클래스 인스턴스 사용하기

Bicycle 인스턴스를 생성하면 기본적으로 바구니가 없는 상태로 만들어집니다. 하지만 인스턴스 생성 후에 hasBasket 속성을 true로 설정할 수 있죠.

let bicycle = Bicycle()
bicycle.hasBasket = true
swift

또한 상속받은 currentSpeed 속성을 수정하거나 description 속성을 조회할 수 있습니다.

bicycle.currentSpeed = 15.0
print("Bicycle: \(bicycle.description)")
// Bicycle: traveling at 15.0 miles per hour
swift

서브클래스의 서브클래싱

서브클래스 자체도 또 다른 클래스의 수퍼클래스가 될 수 있어요. 다음 예제는 Bicycle을 수퍼클래스로 하는 2인용 자전거 Tandem 클래스를 만드는 코드입니다.

class Tandem: Bicycle {
    var currentNumberOfPassengers = 0
}
swift

TandemBicycle의 모든 속성과 메서드를 상속받고, BicycleVehicle의 모든 속성과 메서드를 상속받죠. 추가로 Tandem 클래스는 currentNumberOfPassengers라는 새로운 저장 속성을 가지며, 기본값은 0입니다.

Tandem 인스턴스를 생성하면 새로 추가된 속성과 상속받은 속성을 모두 사용할 수 있어요. 또한 Vehicle로부터 상속받은 읽기 전용 description 속성도 그대로 사용 가능합니다.

let tandem = Tandem()
tandem.hasBasket = true
tandem.currentNumberOfPassengers = 2
tandem.currentSpeed = 22.0
print("Tandem: \(tandem.description)")
// Tandem: traveling at 22.0 miles per hour
swift

이렇게 상속과 서브클래싱을 활용하면 코드의 재사용성을 높이고 클래스 간의 계층 구조를 만들 수 있습니다. 공통된 특성을 수퍼클래스에 정의하고, 서브클래스에서는 이를 상속받아 필요한 부분만 추가하거나 변경하는 식으로 말이죠.

상속 관계 이해하기

상속 관계를 이해하는 것은 매우 중요합니다. 다음 다이어그램은 Vehicle, Bicycle, Tandem 클래스 간의 상속 관계를 보여줍니다.

lecture image

Vehicle은 가장 상위의 수퍼클래스이고, BicycleVehicle을 상속받는 서브클래스입니다. 그리고 TandemBicycle을 상속받는 서브클래스죠.