catch-img

Javaのカプセル化の疑問を解決。要件やアクセサメソッドの使い方

オブジェクト指向のプログラムでは、オブジェクトが他のオブジェクトの影響を受けないよう「カプセル化」を行います。Javaを専門的に扱うにはカプセル化を知っておく必要が生じてきます。カプセル化の方法や仕組みについて、詳しく見ていきましょう。

目次[非表示]

  1. 1.Javaのカプセル化をわかりやすく解説
    1. 1.1.カプセル化とは
    2. 1.2.アクセス修飾子を使ってカプセル化
  2. 2.カプセル化によるメリット
    1. 2.1.誰でも扱えるようになる
    2. 2.2.不正な操作やバグを防止する
  3. 3.アクセサメソッドの使い方
    1. 3.1.アクセサメソッドとは
    2. 3.2.getterメソッドの意味と書き方
    3. 3.3.setterメソッドの意味と書き方
  4. 4.保護により外からアクセスできない仕組み

Javaのカプセル化をわかりやすく解説

オブジェクト指向のプログラムでは、カプセル化はほぼセットで行います。カプセル化とはどのようなものか、どのように行うのかを見ていきましょう。

カプセル化とは

「カプセル」というと、卵の殻のように「外から中のモノを守る」というイメージが浮かぶのではないでしょうか。

そのイメージ通り、カプセル化とは、オブジェクトに対して別のプロジェクトや外部からのアクセスをできなくさせるために行います。C++やJavaのように、オブジェクト指向の言語では、オブジェクトと共に覚えておきたい概念です。

カプセル化は、以下の要件を満たすことで定義されます。

  •  フィールド変数を「private」にする
  • 「public」のメソッドを用意する

アクセス修飾子を使ってカプセル化

アクセス修飾子とは、オブジェクト内のクラスやフィールド、メソッドについて、他のクラスへの公開範囲を決めるものです。アクセスが自由な「public」や継承したサブクラスからのアクセスを可能にする「protected」などがあります。

「private」は、クラスの内部からのみアクセスを可能とする修飾子です。上述したように、カプセル化にはアクセス修飾子の「public」と「private」を使うことになります。

■関連記事

  Javaのオブジェクトの概念を学ぼう。研修でつまづかないためにクラスや型などの要点解説 | Java・フロントエンド研修のジョブサポート Javaは「オブジェクト指向」のプログラミング言語です。Javaを学んでいくためには、「オブジェクトとは何か」を理解することが求められます。オブジェクトの概要をはじめ、クラス・型といったオブジェクトの要点について学んでいきましょう。 Java・フロントエンド研修のジョブサポート

オンライン・リモート講座(入門5日・基礎10日)ー株式会社ジョブサポート

カプセル化によるメリット

一見すると、アクセスを制限するカプセル化には、デメリットしかないように思えてしまいます。カプセル化にはどのようなメリットがあるのでしょうか。

誰でも扱えるようになる

カプセル化は、外部からデータを直接アクセスできないようにする代わりに、操作のためのインターフェイスを外部に渡す、という機能を有しています。

スマホで例えてみましょう。スマホ内部構造やシステム的なところまで、理解している人は少ないですが、スマホ自体の操作方法さえ知っていれば、アプリを利用したり電話を掛けたりできます。

このように、誰でも扱えるようになるのが、カプセル化のメリットの一つといえます。

不正な操作やバグを防止する

カプセル化のもう一つの役割が、「外部からの不正操作やバグを防止する」ということです。

先ほどのスマホの話でまた例えてみましょう。「通話ボタンを押すと相手に電話が掛かる」という操作も、システムによって組み込まれています。

外部から簡単にデータが書き換えられてしまうと、「通話ボタンを押しても電話が掛からない」「別のアプリを起動してしまう」といった誤作動を生み出しかねません。

勝手に操作された結果、不正操作や個人情報の不正流出などに繋がってしまうこともあります。こうした不正操作やバグから、プログラムを守るのもカプセル化の役割です。

■関連記事

  JavaとPythonのどちらを学ぶべき?将来性や特徴から考える | Java・フロントエンド研修のジョブサポート JavaもPythonもエンジニアにとって人気のあるプログラミング言語です。これからプログラムを学習しようと思う場合、どちらの言語を学ぶべきでしょうか。比較するために、それぞれの言語の将来性や特徴について解説します。 Java・フロントエンド研修のジョブサポート

短期Java講座(入門5日・基礎10日)ー株式会社ジョブサポート

アクセサメソッドの使い方

カプセル化のメリットはありますが、外部からまったく操作できないというのも不便です。そこで、直接外部から操作する以外のアクセス手段として「アクセサメソッド」を用います。

アクセサメソッドとは

アクセサメソッドとは、特定のオブジェクト内のクラスやフィールドを操作する際に、直接書き換えるのではなく専用のメソッドを通して操作を行うことです。

例えば、会員情報について、引っ越しや電話を買い換えることで「住所」や「電話番号」の情報は書き換わることがあります。

しかし、会員番号や誕生日など、不変の情報もあります。こうした際に、「住所と電話番号」など、可変の情報のみを操作するために、アクセサメソッドが使われるのです。

その性質から「getter」「setter」と呼ばれることがあります。

getterメソッドの意味と書き方

getterは、クラスを構成するメンバ変数から値を取得するためのメソッドです。以下のようにコードに記述します。

public <プロパティ型> get<プロパティ名>(){
return<プロパティ名>;
}

このように、getterは「get」から始まる名前をつけるというルールがあります。

setterメソッドの意味と書き方

一方でsetterは、メンバ変数を変更するメソッドのことです。

public void set<プロパティ名>(<プロパティの型> <引数名>){
       this.<プロパティ名>=<引数名>;
}

このような書き方をします。getterとは違い、戻り値は返しません。

■関連サイト

  通年開講プロエンジニア育成コース(Java研修1~3ヶ月)-株式会社ジョブサポート 若手、業界未経験者向け通年実施のJava研修です。開発環境(言語、バージョンアップなど)に影響されない技術力、チーム・組織で働くスキル、責任感を身に付けます。通学、オンライン受講の選択ができます。Java・フロントエンドの研修はジョブサポートにお任せ下さい。 Java・フロントエンド研修のジョブサポート


保護により外からアクセスできない仕組み

カプセル化は、オブジェクト内のクラスやメソッド、フィールドに対して外部からアクセスできない仕組みを生み出すことです。外部からのアクセスを遮断することで、プログラムに対する不正操作やバグを防止する役割を果たします。

ただし、一切操作できないのでは不便なので、その場合はアクセサメソッドを用いて、操作を行うことになります。カプセル化はオブジェクト指向のプログラムでは必須の知識ですので、やり方や役割について理解しておきましょう。

メールマガジンの購読設定

ジョブサポートの最新情報をお届けするほか、

人事、採用教育担当者、若手エンジニア向けに

役立つ情報をお届けします。

アップロードしています。少々お待ちください。