우테코 로또 미션을 진행하던 중 나의 페어가 일급 컬렉션을 구현하기 위해 by 키워드를 사용함으로써 사용하고 싶은 컬렉션의 기능을 코드를 직접 작성할 필요없이 사용할 수 있도록 했다. 그래서 클래스 위임에 대해 알아보았다.
어떤 클래스에서 사용하고 싶은 기능을 다른 객체에게 위임함으로써 코드를 작성하지 않아도 사용할 수 있도록 하는 기능이다.
클래스 위임을 하기 위해선 제공하려는 기능을 포함한 인터페이스를 구현한 다른 객체가 필요하다.
컴파일 에러가 안뜨는 것을 볼 수 있다.
프로퍼티로 만든 객체 또한 컴파일 에러가 안뜨는 것을 볼 수 있다.
컴패니언 오브젝트의 객체에게 위임해도 된다. 참고로 다른 클래스의 컴패니언 오브젝트도 가능하다.
위와 같이 주 생성자로 받지 않는 프로퍼티에게는 위임할 수 없다. 왜냐하면 위 코드의 프로퍼티들은 객체가 생성되고 나서 프로퍼티가 초기화되기 때문이다. 객체가 생성되기 전에 생성된 객체에게만 위임할 수 있다.
List 인터페이스와 Set 인터페이스를 모두 구현하려면 시그니쳐가 겹치는 메소드는 재정의해야 한다.