Java の private フィールドとは?外部からアクセスを制限する
新人
「先輩、Javaでクラスを作るときにprivateって書かれていることがあるんですが、これは何ですか?」
先輩
「良いところに気づきましたね。privateはフィールドにアクセス制限をかけるキーワードなんです。」
新人
「アクセス制限?どういうことですか?」
先輩
「外から見えないように隠すことができるんです。ちょっと詳しく説明していきましょう。」
1. Java の private フィールドとは?(基本的な説明)
Java の private フィールドとは、クラスの中にある変数のことです。private というキーワードを付けることで、そのフィールドはクラスの外から直接アクセスできなくなります。これは、プログラムが勝手に変な値を入れたり、予期しない動きをするのを防ぐための大事な仕組みです。
例えば、クラスの中に「名前」や「年齢」を表す変数があったとします。その変数を他の場所から勝手に書き換えられてしまうと、プログラムの正しい動きができなくなるかもしれません。private を付けると、変数を守ることができます。
下の例は、private フィールドを持つ簡単なクラスの書き方です。
public class Person {
private String name;
private int age;
}
この例では、name と age が private フィールドです。外のプログラムからは直接見えません。
2. private フィールドを使う理由
プログラムでは、情報を守ることがとても大切です。private フィールドを使うと、他のクラスやプログラムから直接値をいじれなくなります。これを「カプセル化」といいます。
例えば、年齢がマイナスの値になるのはおかしいですよね。でも、private にしないと、外のプログラムから勝手にマイナスの値を入れられるかもしれません。そうすると、プログラムが間違った動きをするかもしれません。
このように、private フィールドを使うことで、プログラムの安全性が高まります。正しい値だけを使えるようにすることで、安心して使えるプログラムになります。
また、private フィールドを使うことで、プログラムの作り方を工夫しやすくなります。後からプログラムを直すときや、別の人がコードを読んだときに、わかりやすくなります。
下の例は、外から直接アクセスできないことを示す例です。試しに Person クラスのフィールドを外から使おうとすると、エラーになります。
public class Main {
public static void main(String[] args) {
Person person = new Person();
// これはエラーになる
// person.name = "Taro";
}
}
このように、private フィールドは、クラスの外から直接変数を変えられないように守ってくれる仕組みです。
3. private フィールドを使うときの注意点
ここまでで、private フィールドを使う理由はしっかり理解できたと思います。でも、実際に使うときにはいくつか注意点があります。
まず、private にすると外から直接見えなくなりますが、完全にアクセスできなくなると不便ですよね。例えば、名前や年齢を取り出すことができなくなると、プログラムとして意味がなくなります。だから、private にしたフィールドを使うときは、代わりにメソッドを作ってあげる必要があります。
このメソッドを「ゲッター」や「セッター」と呼びます。ゲッターは中の値を取り出すときに使い、セッターは新しい値を入れるときに使います。private にしてフィールドを守りつつ、必要なときだけゲッターやセッターを通してやり取りをします。
例えば、年齢のフィールドがマイナスにならないように、セッターの中で条件を付けることもできます。このようにして、間違った値が入らないように守れるのです。
また、private フィールドを使うときは、どの情報を外に見せるのか、どの情報は隠したいのかをしっかり考える必要があります。全部を隠す必要はありませんが、大事な情報は必ず private にしておくのがポイントです。
4. private フィールドの基本的な書き方
それでは、実際に private フィールドの書き方を見ていきましょう。ここでは、Person クラスにゲッターとセッターを追加して、private フィールドを守りつつ、必要なときだけアクセスできるようにする方法を説明します。
まず、private フィールドの基本的な書き方はとてもシンプルです。変数の宣言の前に private と書くだけです。例を見てみましょう。
public class Person {
private String name;
private int age;
}
このように書くことで、name と age はクラスの外から見えなくなります。でも、これだけでは外から値を取り出したり、入れたりできないので、次にゲッターとセッターを作ります。
ゲッターの例です。名前を取り出すためのメソッドを作ります。
public String getName() {
return name;
}
セッターの例です。名前を設定するためのメソッドを作ります。
public void setName(String newName) {
name = newName;
}
年齢の場合も同じように、ゲッターとセッターを作ります。
では、これらをまとめて Person クラスを完成させてみましょう。
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String newName) {
name = newName;
}
public int getAge() {
return age;
}
public void setAge(int newAge) {
if (newAge >= 0) {
age = newAge;
}
}
}
この例では、age のセッターの中に条件を付けて、マイナスの値が入らないようにしています。これがプログラムを守る大事なポイントです。条件を付けておくことで、間違った値が入らないようにチェックできます。
このようにして、private フィールドを守りながら、必要なときにだけゲッターやセッターを通して安全に使えるようにすることができます。
開発環境の pleiades でも、このように private フィールドを使う練習をすると、Java プログラムの基本をしっかり身につけることができます。最初は難しく感じるかもしれませんが、private というキーワードと、ゲッター・セッターの役割を覚えることで、プログラムがぐっとわかりやすくなります。
このように、private フィールドを使うと、プログラムがより安全で、正しく動くようになります。初心者の方は、必ずゲッターやセッターを一緒に覚えて、しっかり理解していきましょう。
5. private フィールドを使った簡単なサンプルプログラム
それでは、実際に private フィールドを使った簡単なサンプルプログラムを見ていきましょう。この例では、Person クラスを作り、name と age という二つの private フィールドを持たせています。そして、外からは直接アクセスできないようにしながら、ゲッターやセッターを使って正しい値を入れたり取り出したりするプログラムになっています。
下のサンプルプログラムは、pleiades という開発環境で作ることができます。pleiades を開いて、新しい Java プロジェクトを作成し、このコードをコピーして試してみてください。
// Person.java
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String newName) {
name = newName;
}
public int getAge() {
return age;
}
public void setAge(int newAge) {
if (newAge >= 0) {
age = newAge;
} else {
System.out.println("年齢は0以上にしてください。");
}
}
}
// Main.java
public class Main {
public static void main(String[] args) {
Person person = new Person();
// セッターを使って値を設定
person.setName("たろう");
person.setAge(25);
// ゲッターを使って値を取り出す
System.out.println("名前: " + person.getName());
System.out.println("年齢: " + person.getAge());
// 間違った値を入れようとするとエラーメッセージが出る
person.setAge(-5);
}
}
このプログラムでは、Person クラスの中の name と age は private になっていて、外のプログラム(Main クラス)からは直接アクセスできません。その代わりに、setName や setAge を使って値を入れています。そして、getName や getAge で値を取り出しています。
さらに、setAge の中に if 文を入れて、年齢が0以上のときだけ設定できるようにしています。こうすることで、間違った値がプログラムの中に入るのを防いでいます。
この例を実際に pleiades で試してみると、private フィールドをどうやって守っているかがよくわかります。もし private がなかったら、外から勝手に年齢をマイナスにすることができてしまいます。でも private にしておけば、必ず setAge を通すことになるので、安全に値を入れられるのです。
初心者の方でも、この例を動かしてみることで、「private ってこういうふうにプログラムを守ってくれるんだな」と実感できると思います。ぜひ、手を動かしてみてください。
6. private フィールドを使うメリットまとめ
ここまで、private フィールドについて詳しく見てきました。最後に、private フィールドを使うメリットをまとめておきましょう。
まず一つ目のメリットは、大切な情報を守れる ということです。外のプログラムから直接値を変えられないので、勝手に間違った値を入れられる心配がなくなります。例えば、年齢がマイナスになるのはおかしいですよね。private フィールドを使うことで、そういう間違いを防ぐことができます。
二つ目のメリットは、プログラムがわかりやすくなる ことです。private にすると、どの部分が外に見せたい情報で、どの部分が中だけの情報なのかがはっきりします。これは、プログラムを直すときや、他の人がプログラムを読むときにとても役立ちます。
三つ目のメリットは、プログラムを安全に作りやすくなる ことです。ゲッターやセッターを作ることで、値を入れる前に条件を付けたり、確認をしたりできます。例えば、年齢のセッターで0以上かどうかを確認するようにすれば、間違った値をプログラムに入れないようにできます。
これらのメリットをまとめると、private フィールドを使うと、プログラムが安全で正確 になり、さらに後から直しやすくてわかりやすい プログラムになります。だから、Java では private フィールドを使うのがとても大事なのです。
初心者のうちは、まだピンとこないかもしれません。でも、実際にプログラムを書いていくと、private を使う意味がだんだんわかってきます。まずは、今回のサンプルプログラムのように、小さなクラスで private を試してみるのがおすすめです。
そして、pleiades で作ったプログラムを動かしながら、「どうして private を使うのか?」を実際に感じてみてください。プログラムの基本をしっかり身につけていけば、もっと複雑なプログラムにも応用できるようになります。
これからも、private フィールドをうまく使って、安心でわかりやすい Java プログラムを書けるように練習していきましょう。