単品クラスとメンバーのアクセス権の最小化
単品クラスとメンバーのアクセス権の最小化
設計が悪い素子と設計が良い素子の最大の違いは,クラス内部データと内部実装情報が外部素子にどれだけ隠されているかである.丹念に設計されたコンポーネントは、すべての内部インプリメンテーションを非表示にし、インプリメンテーションをAPIから分離します。APIを通じて他のコンポーネントとコミュニケーションするだけで、お互いの内部操作方式に関心がありません。情報を隠すか、パッケージ化するか、この概念はソフトウェア設計の基礎である。
情報を隠すメリット
情報を隠すメリットは本当に多いです.その大部分は、システムを構成する要素とは独立しており、開発、テスト、最適化、応用、分析、および修正を単独で行うことができる.
システム開発のスピードを速める。
複数の構成部品を並列に開発できるからです.
システム管理費用を削減する。
これは、各構成部品をより迅速に理解し、デバッグし、他の構成部品に影響を与えることなく、これらの構成部品のみを最適化できるためです.
ソフトウェアの再利用性の向上
外部にほとんど依存せずに独立して動作する素子であれば,その素子とともに開発されていない見慣れない環境でも有用である可能性が高いからである.
大きなシステムを作る難易度を下げる。
システム全体が完了していなくても、各素子の挙動を検証することができるからである.
アクセス制限
基本原則
基本原則は簡単だ.すべてのクラスとメンバーのアクセス性をできるだけ縮小します.これは、ソフトウェアが正常に動作している限り、常に最小限のアクセスレベルを付与する必要があることを意味します.
最上位レベルに縮小します.
メンバーおよびアクセス・レベル
メンバー(フィールド、メソッド、ネストされたクラス、ネストされたインタフェース)に4つのアクセスレベルを付与できます.
適用されます).
クラスとアクセス範囲
共通クラスと保護されたクラス
メンバーのアクセス制限
テストとアクセス範囲
共通クラスとインスタンスフィールド
整列
// 보안 허점이 숨어 있다.
public static final Thing[] VALUES = {...};
private static final Thing[] PRIVATE_VALUES = { ... };
public static final List<Thing> VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));
private static final Thing[] PRIVATE_VALUES = { ... };
public static final Thing[] values() {
return PRIVATE_VALUES.clone();
}
Java 9に追加されたモジュールシステムとアクセスレベル
コアの整理
プログラム要素のアクセス性はできるだけ小さくします.必要な、最も少ない設計の共通APIのみを選択します.それ以外に、クラス、インタフェース、メンバーを意外にAPIで公開しないでください.
publicクラスには、定数のpublic static finalフィールドでない限り、publicフィールドは存在しないでください.
public static finalフィールドが参照するオブジェクトが変わらないことを確認します.
Reference
この問題について(単品クラスとメンバーのアクセス権の最小化), 我々は、より多くの情報をここで見つけました https://velog.io/@banjjoknim/아이템-15.-클래스와-멤버의-접근-권한을-최소화하라テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol