더북(TheBook)

3.9.6 상속

객체 지향 언어는 메서드 정의뿐만 아니라, 여러 클래스나 객체 간의 재사용도 허용한다. 록스는 단일 상속(single inheritance)을 지원한다. 클래스 선언 시 < 연산자로 상속할 클래스를 지정한다.

class Brunch < Breakfast {
  drink() {
    print "How about a Bloody Mary?";
  }
}

Brunch파생 클래스(derived class) 또는 서브클래스(subclass), Breakfast베이스 클래스(base class) 또는 수퍼클래스(superclass)다. 수퍼클래스에 정의된 메서드는 모두 서브클래스에서 그대로 사용할 수 있다.

extends 같은 새로운 키워드를 끌어들이고 싶지 않아 < 연산자를 대신 사용했다. 록스는 :을 다른 용도로 사용하지 않기 때문에 이것도 남겨두기 싫었다. 그래서 루비의 <를 차용하기로 결정했다.

타입 이론에 일가견이 있는 독자라면 이것이 완전히 임의적인 선택이 아님을 알 것이다. 서브클래스의 인스턴스는 모두 그 수퍼클래스의 인스턴스이지만, 반대로 서브클래스의 인스턴스가 아닌 수퍼클래스의 인스턴스가 있을 가능성이 있다. 즉, 객체 세상에서 서브클래스 객체의 집합은 수퍼클래스 객체의 집합보다 항상 더 작기 때문에 타입 이론에 심취한 사람들이 이러한 관계를 <: 식으로 표현하는 것이다.

var benedict = Brunch("ham", "English muffin");
benedict.serve("Noble Reader");
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.