0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails】なぜ"private" "protected" "public"に分けるのか

Last updated at Posted at 2022-03-23

概要

あるメソッドを実装するときに「アクセス権をどうするか?」という問題に必ず直面すると思います。
それぞれの特徴を知っておくことで、効率良く設計・開発が可能です。
ちなみにこれはカプセル化と言い、、オブジェクト同士の紐付き(関係性)を薄くし独立性を高め、再利用や交換といった保守性を高める効率の考え方です。

特徴

publicメソッド

- クラスの主な責任や目的を明らかにする
- 外部から実行されることが想定される
- 思いつくままに変更されたりはしない
- 他者が依存したとしても安全
- テストで完全に文書化されている

privateメソッド

- 実装の詳細に関わる部分
- 外部から実行されることは想定されていない
- 変更されやすい
- 他者が依存するのは危険
- 基本的にはテストはしない(個人的な意見です。諸説あり。)

protectedメソッド

- 外部からは隠蔽されている
- 仲間(自クラスかサブクラスのレシーバー、親子関係にあるクラスのみ)からは実行可能

判断のポイント

  • なるべく狭い範囲で設定するようにする。
    • 余計なアクセス権は想定外の場所の不具合を生む原因にもなりかねないため。
  • privateメソッドを多用しないようにする。
    • 本来そのクラスの責務でないものを抱えてしまうことが可能性があるため。
    • 「別のクラスのpublicメソッドにする」可能性を視野に入れる。
  • 最も範囲が狭いprivateをベースとして設計する。
  • 継承先、あるいは継承元で呼び出したり上書きしたい場合はprotectedにする。
  • 外部からのアクセスを可能にしたい場合はpublicにする。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?