Swift・iOS

Swiftを中心に学んだことを記録に残すブログです。技術に関係ない記事もたまに書いています。

【Swift】クラスメンバーとインスタンスメンバーの使い分け

■はじめに

クラスプロパティの説明として、「インスタンスに依存しない値を扱う際に使う」、クラスメソッドの説明として「インスタンスに依存しない処理を扱う際に使う」とありますが、インスタンスメンバーとの使い分けがわかるようなわからないような・・・。分かっていないため調べました。

 

■クラス設計の問題/可能な限りインスタンスメソッドで実現する

Swiftでの記事があまり見つからなかったこともあり、Rubyでの使い分けに関する以下記事を参考にしました。

基本的にはインスタンスメソッドで実現することをまずは考えること、複雑な処理をクラスメソッドで記述して、コントローラで呼び出すなどがクラスメソッドの使いどきのようです。

例えば、Singleton パターンでオーディオの再生や停止等を司るコントローラを実装する際にクラスメンバが登場するのかもという印象ですね。

 

 「インスタンスメソッドとクラスメソッドの使い分け」ですが、これはクラスにどんな仕事をさせるべきかを考えるということに等しいので、つまりクラス設計の問題だと考えることができます。」

「データを元にクラスからインスタンスを生成し、インスタンスはそのデータを元にして仕事をする、というのがオブジェクト指向の基本形の考え方」

インスタンスメソッドとクラスメソッドの使い分け、というよりは、まずインスタンスメソッドで実現できないか?を考えるべき」

「どのようなときにクラスメソッドを用いれば良いのでしょうか?(中略)上記の例で言えば「外部からデータを取得する処理」が一番多いシチュエーションだと思います。」

※引用:https://blog.mah-lab.com/2014/11/13/instance-method-and-class-method-with-ruby/

 

「基本的にはインスタンスメソッドで全てまかなってみるというのが根本的思想のように思います。では、クラスメソッドはいつ使えばいいのかですが、これは新しいインスタンスを生成するときに使われることが多い印象です。単純なwhereやfindでは作れない複雑な条件を書くときはクラスメソッドで記述して、それをコントローラで呼び出すということがよく行われている気がします。」

※引用:【Ruby】クラスメソッドとインスタンスメソッドについてザクッと分かりやすく説明してみる - Qiita

 

■おわりに

インスタンスメンバで基本的には対応し、コントローラ等を実装する時にはクラスメンバで対応で一旦認識しました。まだ完全に理解できていないので、今後指摘や学習する中で気づいたことがあれば本記事に反映したいと思います。

 

■関連リンク

https://blog.mah-lab.com/2014/11/13/instance-method-and-class-method-with-ruby/

【Ruby】クラスメソッドとインスタンスメソッドについてザクッと分かりやすく説明してみる - Qiita