더북(TheBook)

init() 메서드 역시 상속된다. 서브클래스는 자기 init() 메서드를 따로 정의하는 게 보통이지만, 수퍼클래스가 자신의 상태를 유지하려면 원본 메서드 역시 호출해야 할 필요가 있다. 내 인스턴스에서 내 자신의 메서드는 건드리지 않은 상태로 수퍼클래스에 있는 메서드를 호출할 방법은 없을까?

록스는 생성자를 상속하지 않는 C++, 자바, C#과는 달리, 생성자를 상속하는 스몰토크, 루비와 닮았다.

자바처럼 super를 사용하면 된다.

class Brunch < Breakfast {
  init(meat, bread, drink) {
    super.init(meat, bread);
    this.drink = drink;
  }
}

객체 지향은 이게 전부다. 이 책의 구조상 기능 가짓수는 최소화하려고 노력했다. 록스는 순수한 객체 지향 언어가 아니다. 진짜 OOP 언어는 모든 객체를 클래스의 인스턴스로 취급한다. 숫자나 불리언 같은 프리미티브 값(primitive value)도 예외가 아니다.

내장 타입으로 작업을 시작하고 나서야 클래스를 구현하기 때문에 꽤 어려웠을 것이다. 프리미티브 타입 값은 클래스의 인스턴스라는 의미에서 실제 객체가 아니다. 메서드, 프로퍼티도 없다. 내가 처음부터 진짜 사용자가 쓸 진짜 언어를 만들 생각이었다면 이 문제를 해결했을 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.