privateとpublicの違いとは?初心者向けにアクセス修飾子を分かりやすく解説
結論として、publicは「どこからでも利用できる」、privateは「そのクラスの中だけで利用できる」アクセス修飾子です。
JavaやC#などのオブジェクト指向言語では、データを安全に管理するためにアクセスできる範囲を制限します。初心者が最初につまずきやすいポイントですが、「公開するもの」と「隠すもの」を区別する仕組みだと考えると理解しやすくなります。
privateとpublicとは?
publicとは
public(パブリック)は、どのクラスからでもアクセスできるアクセス修飾子です。
例えば、社員管理システムで「社員情報を取得する機能」は、さまざまな画面や処理から利用されるためpublicにすることが多くあります。
| 特徴 | 内容 |
|---|---|
| アクセス範囲 | どこからでも利用可能 |
| 利用目的 | 外部へ公開する機能 |
| 主な用途 | メソッド、クラス、プロパティ |
privateとは
private(プライベート)は、そのクラスの内部からしかアクセスできません。
クラス内部でしか使わない変数や処理を外部から変更されないように保護するために使用します。
| 特徴 | 内容 |
|---|---|
| アクセス範囲 | 同じクラス内のみ |
| 利用目的 | 内部処理を隠す |
| 主な用途 | メンバー変数、補助メソッド |
イメージで理解する
会社のオフィスを例にすると理解しやすくなります。
| 例 | アクセス修飾子 |
|---|---|
| 受付 | public(誰でも利用できる) |
| 社長室 | private(限られた人しか入れない) |
受付は誰でも利用できますが、社長室には関係者しか入れません。同じように、publicは外部へ公開し、privateはクラス内部だけで利用します。
なぜprivateが必要なのか
もしすべての変数がpublicだった場合、どこからでも自由に値を書き換えられてしまいます。
例えば、社員番号や商品の在庫数が勝手に変更されると、システム全体に影響が及びます。
privateを使うことで、不正な値の設定や意図しない変更を防ぎ、安全なプログラムを作ることができます。
IT現場ではどんな場面で使われるのか
publicが使われる例
- 画面から呼び出される処理
- APIとして公開するメソッド
- サービスクラスの処理
- ライブラリの機能
privateが使われる例
- メンバー変数
- 入力チェック処理
- 計算用の補助メソッド
- 内部だけで使う共通処理
実務では「必要最低限だけpublicにする」という設計が基本です。
初心者が混乱しやすいポイント
privateだから使えないわけではない
privateは「利用できない」のではなく、「クラスの外から利用できない」という意味です。
クラス内部では通常どおり利用できます。
publicにすれば便利とは限らない
何でもpublicにすると、ほかのクラスから自由に変更されるため、不具合の原因になります。
private変数にはpublicメソッドからアクセスする
オブジェクト指向では、private変数を直接変更するのではなく、publicメソッドを経由して操作する設計が一般的です。
カプセル化との関係
privateとpublicは、「カプセル化(Encapsulation)」というオブジェクト指向の考え方を実現するために使われます。
カプセル化とは、データを隠し、安全な方法だけを外部へ公開する設計です。
| 役割 | アクセス修飾子 |
|---|---|
| データを隠す | private |
| 操作方法を公開する | public |
実際のIT現場での利用例
社内システムでは、社員情報や顧客情報などの重要なデータはprivateで保持されることがほとんどです。
データを更新する場合は、入力チェックや権限チェックを行うpublicメソッドを経由して変更します。
この設計により、不正なデータ登録や予期しない変更を防ぐことができます。
筆者が新人時代に失敗したこと
新人の頃、動作確認を優先するためにメンバー変数をすべてpublicにしたことがありました。
その結果、別のクラスから想定外の値を書き換えられ、不具合の原因調査に時間がかかりました。
それ以降は、「まずprivateで作り、本当に必要なものだけpublicにする」という設計を意識するようになりました。
業務でよくあるトラブル例
| トラブル | 原因 |
|---|---|
| 値が勝手に変更される | 変数をpublicにしている |
| データ不整合が発生する | 入力チェックを行わず直接変更している |
| コンパイルエラーになる | privateメンバーへ外部からアクセスしている |
| 保守しにくい | 公開範囲が広すぎる |
原因の切り分け
- エラーメッセージを確認する
- アクセスしようとしているメンバーがprivateか確認する
- publicメソッド経由で操作できないか確認する
- アクセス修飾子を変更する必要があるか検討する
- 設計上、本当に公開すべきか確認する
確認方法
GUIで確認する方法
Visual StudioやIntelliJ IDEA、Eclipseなどでは、変数やメソッドの宣言部分に「private」や「public」が表示されます。
コード補完機能では、アクセスできないprivateメンバーは候補に表示されない場合があります。
CUIで確認する方法
ソースコードを検索し、「private」「public」のキーワードを探すことで、アクセス修飾子を確認できます。
確認結果の見方
- publicなら他のクラスから利用できる
- privateならクラス内部だけで利用できる
- コンパイルエラーが出る場合はアクセス範囲を確認する
初心者がやりがちなミス
- すべてpublicにしてしまう
- private変数へ直接アクセスしようとする
- アクセス修飾子を理解せずに変更する
- 設計を考えず公開範囲を広げる
- エラーメッセージを読まずに修正する
業務で上司へ報告するポイント
- どのクラスでエラーが発生したか
- アクセスしようとしたメンバー名
- 現在のアクセス修飾子
- 変更による影響範囲
- 修正後の動作確認結果
エスカレーションするタイミング
- publicへ変更すると影響範囲が大きい場合
- 共通ライブラリを修正する場合
- 設計変更が必要な場合
- セキュリティに関わるデータを扱う場合
応用知識
JavaやC#にはprivateとpublic以外にもアクセス修飾子があります。
| 修飾子 | アクセス範囲 |
|---|---|
| public | どこからでもアクセス可能 |
| private | 同じクラスのみ |
| protected | 同じクラスと継承先 |
| (デフォルト)※Java | 同じパッケージ内 |
| internal ※C# | 同じアセンブリ内 |
実務では、まずprivateを基本とし、必要に応じてpublicやprotectedを選択する設計が推奨されています。
関連するIT用語
- クラス(Class)
- オブジェクト(Object)
- インスタンス(Instance)
- メソッド(Method)
- フィールド(Field)
- プロパティ(Property)
- カプセル化(Encapsulation)
- 継承(Inheritance)
- アクセス修飾子(Access Modifier)
よくある質問(FAQ)
publicだけ使っても問題ありませんか?
おすすめできません。どこからでも変更できるため、不具合や保守性の低下につながります。
private変数の値を取得したい場合はどうしますか?
一般的にはpublicメソッドやプロパティ(Getter)を通して取得します。
privateメソッドはいつ使いますか?
クラス内部だけで利用する補助処理や共通処理を実装するときに使用します。
実務ではどちらを多く使いますか?
メンバー変数はprivateが基本です。外部へ公開する必要があるメソッドやプロパティのみpublicにするケースが一般的です。
まとめ
privateとpublicは、プログラムの安全性や保守性を高めるための重要なアクセス修飾子です。
- publicはどこからでも利用できる
- privateはクラス内部だけで利用できる
- 重要なデータはprivateで保護する
- 外部へ公開する必要がある機能だけpublicにする
- 「まずprivate、必要ならpublic」が実務でよく使われる考え方
アクセス修飾子を適切に使い分けることで、予期しないデータの変更を防ぎ、チーム開発でも保守しやすいプログラムを作成できます。
