こんにちは!
ひっしーです。
昨今、コロナウィルス(COVID-19)の影響で外出自粛になってますね。。
都内のロックダウンで経済活動が危ないということと1世帯マスク2枚が世の中の話題で埋め尽くされております。
こんなみんなが大変な時期だからこそ力を合わせて危機を乗り越えないといけませんね。
収束するまでみんなで頑張って乗り越えましょう!!
さて、コロナウィルスといえば風邪ですね(正確には感染症?)
風邪といえば薬を飲みますよね!
薬といえばカプセル型のものが思い浮かびますね。
はい!ということで今回はカプセル化についてピックアップしていこうと思います。
見出しにあるようにカプセル化で少し難しいと感じた部分を解説していきます。
カプセル化をまず、ざっくりと説明するとクラスの中に定義したデータのアクセス権限を制御する方法です。
カプセル化を使うことで変数の変更に制限をかけることが出来て勝手に変数の中身を変えることが出来なくなるのです。
僕としてはアクセス制限の種類が難しいと感じる部分でした。
アクセス修飾子(アクセス制御の種類の宣言)は4つとそこまで多くないのですが、ややこしいので覚えるまでが大変でした。
private String pri ="プライベート";
String noModifier ="なし";
protected String pro ="プロテクト";
public String pub ="パブリック";
上記の変数は上から制限力の強いもの順で並んでます。
private : 同クラス
なし :同クラス、同パッケージ
protected :同クラス、同パッケージ、継承したサブクラス
public :どこからでもアクセスできる
という風にアクセスできる範囲を制限されることになります。
なのでprivateが一番強いセキュリティになりますね。
privateはこの変数を定義したクラスの中でしか使えません。
そのため外からアクセスするには直接ではなくアクセスできる道を作る必要があります。
それが、ゲッターとセッターです!
ゲッターセッターとは、全体に公開しているメソッドを使ってアクセス制限のかかっている変数に変更と取得を可能にするものです。
ゲッターとセッターは次のようになりますね!
//変数priのゲッター
public String getPri() {
return pri;
}
//変数priのセッター
public void setPri(String pri) {
this.pri = pri;
}
ゲッターが何をしているかというと単純でgetPri()を呼び出すと変数priに入っている値をメソッドの返り値として出力します。
ここで注目するのはpriはprivateなので普通には外に持っていくことが出来ないのですが、priの中身だけを外に出すことはできるんですね。
これがゲッターの機能です。
次にセッターです。
セッターのほうがややこしいかもしれないですね。
セッターメソッドに適切な値を渡すことで呼ばれたクラス内のprivate変数を変更しています。
冒頭でカプセル化は外から値を変更できないようにするという解説をしましたが、この方法だと変更が可能なんですね。
これは見方によっては屁理屈のような内容ですが、値は外からもらったけど変更自体はクラス内で行っているから外部から変更されたわけじゃないよね!
ということになります。。
カプセル化はどこまでが変更出来てどこから変更できないのかを判断するのが難しいですが、使い方を正しく学べばとてもセキュリティの強い安定したシステムを組むことが出来そうです。
研修では、ソースコードを個人で書いていくため自分の中で変数の整理がついていれば特にカプセル化の必要性を感じることが難しかったです。
ですが、実際に開発することになった場合、いろいろな人と共同で開発することになるので勝手にいじられたくない変数はこのようにセキュリティをかけておくことでスマートな開発ができるのかなという印象でした。
まもなくJavaの課題も終盤に差し掛かり、次のステップが見えてきました。
ですが、リモートワークになりそうです。。。
家での学習になったとしても一層気を引き締めて課題を進めたいと思います!
皆さんに応援してもらえると励みになります!!