[Swift] 상속

나는 사과·2021년 3월 8일
0

TIL

목록 보기
5/17

상속

Swift에서 상속은 다른 언어들의 상속과 비슷하다.
상속이란? 클래스가 다른 클래스로부터 메서드나 프로퍼티 등을 사용하기 위해 사용하는 방법이다.

  • 자식클래스 : 상속을 받는 클래스
  • 부모클래스 : 상속을 하는 클래스
class Vehicle {
	
    func horn() {
    	print("경적소리~")
    }
}

class Car: Vehicle{
    var speed: Int = 0
    
    override func horn() {
    	super.horn()
    	print("빵빵!!")
    }
}

위 코드에서 보면 Vehicle클래스와 Car클래스가 있다. 여기서 상속은class Car: Vehicle 부분에서 알 수 있다. 자식클래스는 상속을 받는 Car클래스고 부모클래스는 상속을 하는 Vehicle클래스다.

재정의

재정의도 다른 언어와 같이 override키워드를 사용한다.
위 코드에서도 부모클래스 Vehiclehorn()메소드를 상속받은 자식클래스 Car에서 재정의해서 사용한 모습을 볼 수 있다. 만약, 부모클래스의 특성을 자식클래스에서 사용하고 싶을 땐 super 프로퍼티를 사용하면 된다.
위의 예제에서 자식클래스의 horn()메서드를 호출하면 부모 클래스의 horn()메서드가 먼저 호출되고 자식클래스의 horn()가 호출된다.

메서드 뿐만 아니라 프로퍼티, 프로퍼티 감시자, 서브스크립트도 재정의할 수 있다. 다만, 프로퍼티 접근자와 프로퍼티 감시자는 동시에 재정의할 수 없다.
서브스크립트를 재정의할 때에도 주의해야 할 점이 있다. 재정의할 때 부모클래스의 서브스크립트의 매개변수와 반환 타입이 같아야 한다. 그래야만 재정의할 수 있다.

재정의 방지

부모클래스에서 상속받는 자식클래스의 특성을 재정의하는 것을 금지하고 싶다면 재정의를 방지하고 싶은 특성에 final 키워드를 명시하면 된다. 그럼 이 특성을 재정의하려고 하면 컴파일 오류가 발생하게 된다.

0개의 댓글