アクセス修飾子(public, private, protected)

オブジェクト指向プログラミング(OOP)において、「アクセス修飾子(Access Modifiers)」は、クラスのメンバ(フィールドやメソッド)に対するアクセス範囲を制御するために使用されます。これにより、**データの隠蔽(Encapsulation)**を実現し、設計上の安全性や保守性を高めることができます。

代表的なアクセス修飾子は以下の3つです:


1. public(公開)

  • 意味:どこからでもアクセス可能

  • 使用例

    cpp
    class Person { public: string name; void sayHello() { cout << "Hello, my name is " << name << endl; } };
  • 解説public に指定されたメンバは、クラス外部からも自由に参照・変更できます。インターフェースとして公開したいメソッドやプロパティに使われます。


2. private(非公開)

  • 意味:同じクラスの内部からのみアクセス可能。外部や派生クラスからはアクセス不可。

  • 使用例

    cpp
    class Account { private: double balance; public: void deposit(double amount) { if (amount > 0) balance += amount; } double getBalance() { return balance; } };
  • 解説private メンバはクラスの外から直接アクセスできません。これは情報隠蔽の重要な手段であり、外部の誤用を防ぐ設計になります。


3. protected(保護)

  • 意味:同じクラスおよびその派生クラスからアクセス可能。クラスの外部からはアクセス不可。

  • 使用例

    cpp
    class Animal { protected: string species; }; class Dog : public Animal { public: void setSpecies(string s) { species = s; // OK: DogはAnimalを継承している } };
  • 解説protected は、クラスの設計者が「継承先にだけ情報を提供したい」という意図を示すときに使用します。外部からのアクセスは制限されますが、サブクラスでは自由に使えるようにします。


アクセス修飾子の使い分け

修飾子 クラス内 継承先 クラス外
public
protected ×
private × ×

なぜアクセス修飾子が重要なのか?

  • モジュール性:内部実装を隠し、外部にはインターフェースだけを公開できる。

  • 保守性:内部の仕様変更が外部に影響を与えにくくなる。

  • 安全性:意図しない操作(例:無効な値の代入)を防止できる。

  • 継承設計:派生クラスに必要な情報のみを安全に提供できる。


まとめ

アクセス修飾子は、クラスの設計においてカプセル化を支える柱であり、OOPの三大要素の一つであるデータの隠蔽を実現するために不可欠です。適切に使い分けることで、クラス間の依存を最小限にし、堅牢で再利用可能なコードを設計できます。

生成日:2025/06/01