最近インターン先でのレビュー時に、アクセスコントロールについての指摘を受けて、普段は雰囲気で使っていたアクセスコントロールについてしっかり学び直したいと思い記事にしました!🙋♂️
#目次
・アクセスコントロールとは
・アクセスレベルとは
・アクセスコントロールを使うメリット
・アクセスコントロールの使い分け方法
#アクセスコントロールとは
モジュール内の型や型の要素(メゾットやプロパティ)に対する外部からのアクセスを制限する仕組み
この説明だけだとわかりにくいので、初めはswiftでコードを書く際のclass,func,let,varなどを別のファイルやモジュールでも利用できるかを指定できるって認識があれば大丈夫です。
ios開発駆け出しの人向けに説明を捕捉すると
ファイルはコードを普段書いてある場所で下記画像上でのSignUpviewControllerなどを挿します
モジュールは配布可能なプログラムの単位でimport xxの xx部分のライブラリなどがそれに当たります。(画像上のUIComponentなど)
#アクセスレベルとは
アクセスコントロールする上での制限範囲を差します。大きく五つあり、公開範囲が広い順に
・open
モジュール内外の全てのアクセスを許可する
・public
モジュール内外の全てのアクセスを許可するが、モジュール外で継承したり、オーバーライドすることができない
・internal
同一モジュール内のアクセスのみを許可する(デフォルトのアクセスレベル)
・fileprivate
同一ソースファイル内のアクセスのみを許可する
・private
対象の要素が属しているスコープ内のアクセスのみを許可する
#アクセスコントロールを使うメリット
自分は基本的に大きく二つあると考えています
・コードを書く際の検索範囲を減らす
コードを書く上でアクセスコントロールなどを一切付けないとコードを書く時の検索候補が増えてしまうことがあります。
そうしたときにアクセスコントロールを使うことで余分な検索候補を減らすことができます。(変数にprivateをつけるなど)
・第三者がコードを読む上で読みやすくする
アクセスコントロールを使うことで、メゾットやプロパティなどをより明示的に書くことができて、コードの可読性が上がります
#アクセスコントロールの使い分け
基本的に
・public(別のモジュールで使いたい時)
・internal(特にアクセスレベル意識しない時)
・private(他から実装を隠したい時)
の三つで使い分け、必要に応じてopen,fileprivateを使って行けばいいと思います🙆♂️