はじめに
度々出てくる委譲を良く分からずに使ってしまっているので、掘り下げたいと思います。
委譲とは?
一言で表すと、「任せる」すること。
あるオブジェクトが、他のオブジェクトの処理を委託します。
継承との違い
まず、継承とは親クラスのメンバをオーバーライドする形で機能を引き継ぐことです。
某ピンク饅頭キャラのように親の機能を「コピー」します。
親の機能を完コピした子クラスは、自分ものとしてメソッドを使うことができます。
そして、委譲とは子が親の機能に「委託」することです。
これが、ざっくりとした違いです。
メリデメの話
これだけだと、抽象的すぎるのでメリットとデメリットを整理しておきましょう。
継承のメリット
- コードの再利用が簡単
継承のデメリット
- 変更時に影響範囲が継承先に広がることがある
委譲のメリット
- 親の機能や責務を引き継がなくて済む
委譲のデメリット
- 「任せる」分だけインスタンス生成が必要
どんな課題を解決してくれるのか?
委譲のメリットにもあるように、親クラスの機能や責務を引き継がなくて済むことがあります。
Androidだと、Activity/FragmentでViewModelを委譲としてインスタンス化すると思います。
それも、責務が混在しないためにやっているのだなと改めて思いました。
おわりに
思うところがあれば、追記していきます。
そんなに大した概念ではないかなと思うのですが、意外とメリデメ分かってないのでそこの整理が出来て良かったです。
Kotlinでは、by
を使えば簡単に委譲を実現できます。