Rustを勉強した時にTrait
というものを知ったが、これはRust固有というよりも、そもそもTrait
という考え方があることを知ったので調べてみた
こちらの記事が参考になった qiita.com
プログラミングにおけるtrait
は、主にオブジェクト指向プログラミング(OOP)や型システムを持つ言語で使用される概念
trait
は、クラスやオブジェクトに特定の振る舞い(メソッドやプロパティ)を追加するためのモジュール的な機能として使われる
直接インスタンス化できるわけではなく、他のクラスや型に適用することでコードの再利用性を高めることができる
メリット
コードの再利用性
共通の振る舞いをまとめることで、同じコードを複数回書く必要がなくなる多重継承の代替
複数のtrait
を1つのクラスにミックスインできる(多重継承が使えない言語でも利用可能)柔軟性
既存のクラスに振る舞いを追加しやすい
注意点
- 多くの
trait
をミックスインすると複雑な依存関係が生まれ、デバッグが難しくなる可能性がある - 実装の競合(同じ名前のメソッドを複数の
trait
で持つ場合)が発生することがある
「コードのモジュール化」と「柔軟な振る舞いの付与」がtrait
の主な目的とわかった
ただ、ただ一箇所にまとめただけのモジュール化になりかねないので注意が必要だと思った