javaを扱うときにはオブジェクト指向やカプセル化といった概念の話が数多く出てきます。初めは理解するまでに時間がかかるかもしれませんが、きちんと学習することで慣れることができます。
この記事ではカプセル化の概念について紹介していきます。本記事を読むだけで「カプセル化」に関してはマスターになることができるのでぜひめげずに最後まで読んでみてくださいね!
カプセル化とは

カプセル化とは、「ソースをカプセルのように閉じ込めて安全に利用できるようにしましょう」という考え方です。
javaは大規模開発なでどで使われることが多く、そのリソースは数十年も継続して使われる場合もあります。また、他の人が作ったリソースを導入してシステムを開発するといったこともあるので、作った製品は「想定外の場所で知らず知らずの間に変更がかかってしまった」などといったことのないよう、安全に使用できるようにしておかなくてはなりません。
よって、カプセル化とは概念のことです。それではカプセル化を実現するための方法について学んでいきましょう。
カプセル化の実現方法

では、実際にカプセル化を実現する方法を紹介をします。カプセル化を実現するためには主に「アクセス修飾子」と「ゲッター・セッター」を使用します。
アクセス修飾子
アクセス修飾子とは「メソッド」「フィールド」「クラス」のアクセス範囲を限定するために使用する修飾子」です。public, protected, デフォルト, privateの4種類があります。
アクセス修飾子 | 可視性 | 概要 |
public | + | 「すべてのクラス」からアクセス可能 |
protected | # | 「現在のクラス」と「サブクラス」からアクセス可能 |
なし(デフォルト) | ~ | 「現在のクラス」と「同じパッケージのクラス」からアクセス可能 |
private | – | 「現在のクラス」からだけアクセス可能 |
public class Sample {
//フィールド名はプライベートにする
private String name;
private int score;
}
一般的に「フィールド」に対してはprivate修飾子を使うことが定められています。Sampleクラスを見てみましょう。このようにすることで外部クラスから知らぬ間にデータが書き換わるということを防ぎます。
ゲッター・セッター
public class Sample {
private String name;
private int score;
//ゲッター
public String getName(){
return name;
}
//セッター
public void setName() {
this.name = name;
}
}
---------------------------------------
import文;
public class Sample_2{
Sample sample = new Sample();
//エラー発生(アクセス権がない)
sample.name = 10;
}
先ほど学習した、アクセス修飾子でSampleクラスのフィールドをprivateにし、新しくSample_2クラスを定義しました。フィールドがprivateになっている場合、インスタンスを生成し、代入演算子を使って情報の取得・変更を行おうとするとコンパイルエラーが生じます。Sample_2クラスでは値の代入演算子では値の取得や変更ができないので、このような場合に「ゲッター」や「セッター」を使用します。
ゲッター・セッターはアクセス修飾子によって、取得変更ができなくなったフィールドを安全に取り出すために使用します。
「ゲッター」とは
public class Sample {
private String name;
public String getName(){
return this.name;
}
}
ゲッターは「他のクラスでフィールドを安全に取得するためのメソッド」です。メソッド名は自分で定義するので変えることはできますが、ゲッターはgetフィールド名という定義方法をするという共通認識があるので変更してはいけません。また、getの後ろの一文字目は大文字で記述します。(キャメルケースを適応します。)
セッターとは
public class Sample {
private String name;
public void setName() {
this.name = name;
}
}
セッターは「他のクラスからフィールドの中身を安全に置き換えるためのメソッド」です。ゲッターと同様、メソッド名は任意ですが、setフールド名で定義する共通認識があります。
また、一般的にセッターとゲッターは自分で記述しなくてはなりませんが、Lombokというライブラリを使用すると「@Data」アノテーションのみでセッター、ゲッターを定義することもできます。
最後に
カプセル化は安全にメソッドを管理するためには欠かせない考え方です。クラスを作成する際はしっかりとカプセル化を行い、外から想定外の変更がかからないようにしましょう。