Javaのカプセル化の疑問を解決。要件やアクセサメソッドの使い方
オブジェクト指向のプログラムでは、オブジェクトが他のオブジェクトの影響を受けないよう「カプセル化」を行います。Javaを専門的に扱うにはカプセル化を知っておく必要が生じてきます。カプセル化の方法や仕組みについて、詳しく見ていきましょう。
問題解決力を身に付ける若手、新人SE・PG向けの通年Java研修(1~3ヶ月コース)はこちら
目次[非表示]
- 1.Javaのカプセル化をわかりやすく解説
- 1.1.カプセル化とは
- 1.2.アクセス修飾子を使ってカプセル化
- 2.カプセル化によるメリット
- 2.1.誰でも扱えるようになる
- 2.2.不正な操作やバグを防止する
- 3.アクセサメソッドの使い方
- 3.1.アクセサメソッドとは
- 3.2.getterメソッドの意味と書き方
- 3.3.setterメソッドの意味と書き方
- 4.保護により外からアクセスできない仕組み
Javaのカプセル化をわかりやすく解説
オブジェクト指向のプログラムでは、カプセル化はほぼセットで行います。カプセル化とはどのようなものか、どのように行うのかを見ていきましょう。
若手、新人エンジニアの成長を阻む 人材育成5つの失敗と解決策はこちら
カプセル化とは
「カプセル」というと、卵の殻のように「外から中のモノを守る」というイメージが浮かぶのではないでしょうか。
そのイメージ通り、カプセル化とは、オブジェクトに対して別のプロジェクトや外部からのアクセスをできなくさせるために行います。C++やJavaのように、オブジェクト指向の言語では、オブジェクトと共に覚えておきたい概念です。
カプセル化は、以下の要件を満たすことで定義されます。
- フィールド変数を「private」にする
- 「public」のメソッドを用意する
アクセス修飾子を使ってカプセル化
アクセス修飾子とは、オブジェクト内のクラスやフィールド、メソッドについて、他のクラスへの公開範囲を決めるものです。アクセスが自由な「public」や継承したサブクラスからのアクセスを可能にする「protected」などがあります。
「private」は、クラスの内部からのみアクセスを可能とする修飾子です。上述したように、カプセル化にはアクセス修飾子の「public」と「private」を使うことになります。
■関連記事
カプセル化によるメリット
一見すると、アクセスを制限するカプセル化には、デメリットしかないように思えてしまいます。カプセル化にはどのようなメリットがあるのでしょうか。
学歴、学部による「IT知識」「基礎知識」の格差を無くす個別指導の新人研修プロエンジニア育成コース(Java2・3ヶ月コース)はこちら
誰でも扱えるようになる
カプセル化は、外部からデータを直接アクセスできないようにする代わりに、操作のためのインターフェイスを外部に渡す、という機能を有しています。
スマホで例えてみましょう。スマホ内部構造やシステム的なところまで、理解している人は少ないですが、スマホ自体の操作方法さえ知っていれば、アプリを利用したり電話を掛けたりできます。
このように、誰でも扱えるようになるのが、カプセル化のメリットの一つといえます。
不正な操作やバグを防止する
カプセル化のもう一つの役割が、「外部からの不正操作やバグを防止する」ということです。
先ほどのスマホの話でまた例えてみましょう。「通話ボタンを押すと相手に電話が掛かる」という操作も、システムによって組み込まれています。
外部から簡単にデータが書き換えられてしまうと、「通話ボタンを押しても電話が掛からない」「別のアプリを起動してしまう」といった誤作動を生み出しかねません。
勝手に操作された結果、不正操作や個人情報の不正流出などに繋がってしまうこともあります。こうした不正操作やバグから、プログラムを守るのもカプセル化の役割です。
■関連記事
アクセサメソッドの使い方
カプセル化のメリットはありますが、外部からまったく操作できないというのも不便です。そこで、直接外部から操作する以外のアクセス手段として「アクセサメソッド」を用います。
全国の若手~ベテランエンジニアが受講している個別指導のオンライン・リモート講座(入門5日・基礎10日)はこちら
アクセサメソッドとは
アクセサメソッドとは、特定のオブジェクト内のクラスやフィールドを操作する際に、直接書き換えるのではなく専用のメソッドを通して操作を行うことです。
例えば、会員情報について、引っ越しや電話を買い換えることで「住所」や「電話番号」の情報は書き換わることがあります。
しかし、会員番号や誕生日など、不変の情報もあります。こうした際に、「住所と電話番号」など、可変の情報のみを操作するために、アクセサメソッドが使われるのです。
その性質から「getter」「setter」と呼ばれることがあります。
getterメソッドの意味と書き方
getterは、クラスを構成するメンバ変数から値を取得するためのメソッドです。以下のようにコードに記述します。
このように、getterは「get」から始まる名前をつけるというルールがあります。
setterメソッドの意味と書き方
一方でsetterは、メンバ変数を変更するメソッドのことです。
このような書き方をします。getterとは違い、戻り値は返しません。
■関連サイト
保護により外からアクセスできない仕組み
カプセル化は、オブジェクト内のクラスやメソッド、フィールドに対して外部からアクセスできない仕組みを生み出すことです。外部からのアクセスを遮断することで、プログラムに対する不正操作やバグを防止する役割を果たします。
全国の若手~ベテランエンジニアが受講している個別指導のオンライン・リモート講座(入門5日・基礎10日)資料ダウンロードはこちら
ただし、一切操作できないのでは不便なので、その場合はアクセサメソッドを用いて、操作を行うことになります。カプセル化はオブジェクト指向のプログラムでは必須の知識ですので、やり方や役割について理解しておきましょう。