#pragma twice

KAB-studio > プログラミング > Javaのオブジェクト指向入門 > 3. メソッドで操作しよう > 3.5 GetterとSetter
 
前のページへつぎ

3.5 GetterとSetter

del.icio.us 登録する はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数 livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数 Yahoo!ブックマーク 詳細を表示 users RSSに登録
更新日: 2008/03/31
動作確認環境:Windows XP Professional SP2, Java SE 5

 publicとprivate、結局どう使えばいいの? と思われているかもしれません。
 実はパターンがあるんです。

GetterとSetter

 publicとprivateには「基本的な使い方」があります。
 それは「フィールドはprivate」「メソッドはpublic」というものです。

// GetterAndSetterRunner.java

/**
 * GetterとSetterを持つ、標準的なクラス。
 */
class GetterAndSetter
{
    // int型変数のフィールドです。privateです。
    private int data;

    /**
     * フィールドの値を取得します。
     */
    public int getData()
    {
        return data;
    }

    /**
     * フィールドに値を入れます。
     */
    public void setData( int param )
    {
        data = param;
    }
}

/**
 * 実行用クラス。このクラスを実行してください。
 */
class GetterAndSetterRunner
{
    public static void main( String[] args )
    {
        // GetterAndSetterクラスの参照型変数とインスタンスを作ります。
        GetterAndSetter ref = new GetterAndSetter();

        // Setterを使って数値を入れます。
        ref.setData( 100 );

        // Getterを使って数値を取り出します。
        int i = ref.getData();
        System.out.println( i );
        // 出力結果:
        // 100
    }
}
// GetterAndSetterRunner.java
/**
 * GetterとSetterを持つ、標準的なクラス。
 */
class GetterAndSetter
{
	// int型変数のフィールドです。privateです。
	private int data;
	/**
	 * フィールドの値を取得します。
	 */
	public int getData()
	{
		return data;
	}
	/**
	 * フィールドに値を入れます。
	 */
	public void setData( int param )
	{
		data = param;
	}
}
/**
 * 実行用クラス。このクラスを実行してください。
 */
class GetterAndSetterRunner
{
	public static void main( String[] args )
	{
		// GetterAndSetterクラスの参照型変数とインスタンスを作ります。
		GetterAndSetter ref = new GetterAndSetter();
		// Setterを使って数値を入れます。
		ref.setData( 100 );
		// Getterを使って数値を取り出します。
		int i = ref.getData();
		System.out.println( i );
		// 出力結果:
		// 100
	}
}

 GetterAndSetterクラスは、1つのフィールドと2つのメソッドを持つクラスです。
 まず、フィールドが1つあり、これがprivateになっています。

    // int型変数のフィールドです。privateです。
    private int data;
	// int型変数のフィールドです。privateです。
	private int data;

 このprivateという点が重要です。
 フィールドは通常、privateにします
 これから少しずつ説明しますが、実は、クラスにとって「クラスの外」は危険地帯です。何らかの危害を加えられる可能性があります。
 そういった危険から「内部データ」、つまりフィールドを守る必要があります。フィールドをがっちり守って、外から勝手に値を変えられないようにしなければいけません。
 そのために、ほとんどすべてのフィールドはprivateにするわけです。

 フィールドをprivateにする代わりに、フィールドとデータの入出力をするためのpublicメソッドを用意します。
 まず、フィールドから値を取得して返すメソッドを作ります。

    /**
     * フィールドの値を取得します。
     */
    public int getData()
    {
        return data;
    }
	/**
	 * フィールドの値を取得します。
	 */
	public int getData()
	{
		return data;
	}

 このgetData()メソッドは、dataフィールドから値を取得して返すだけのメソッドです。
 この「フィールドから値を取り出して返すメソッド」を「Getter」(ゲッター)と言います。
 メソッド名の作り方はルールが決められていて、「getィールド名」という名前にします。ただし「フィールド名」の所は頭文字を大文字にします。なので、「data」フィールドのGetterメソッドは「getData」というメソッド名になります。

 同じように、フィールドに値を入れるメソッドも作ります。

    /**
     * フィールドに値を入れます。
     */
    public void setData( int param )
    {
        data = param;
    }
	/**
	 * フィールドに値を入れます。
	 */
	public void setData( int param )
	{
		data = param;
	}

 このsetData()メソッドは、dataフィールドに値を入れるだけのメソッドです。
 この「フィールドに値を入れるメソッド」を「Setter」(セッター)と言います。
 こちらもメソッド名の作り方が決まっていて、「setィールド名」という名前にします。なので、「data」フィールドのSetterメソッドは「setData」というメソッド名になります。

 この例だと、フィールドをpublicにした時と変わらないので、なんのためにGetterとSetterを作るのか、と思われるのかもしれません。
 でも、先ほど言ったように、フィールドは守る必要があります。フィールドの前にGetterとSetterが門番として立ちはだかっているだけで意味があります。

 たとえば、dataフィールドを「テストの点数」を入れるフィールドとします。そうすると、dataフィールドには0~100の値が入ることになります。
 もしdataフィールドがpubilcだと、クラスの外には悪いヤツがいっぱいいますから、dataフィールドに-100とか10000といった無茶苦茶な値を入れられてしまうかもしれません。
 でも、Setterメソッドがあればそんなことさせません。Setterメソッド門番になって、入れようとする値が0~100かチェックすることができます。
 また、何らかの間違いでdataフィールドに-100とか10000が入っても、Getterメソッドでそれをチェックして正しい値を返すこともできます。

 フィールドは結局はただの変数ですから、なされるがままになってしまいます。
 でも、GetterとSetterというメソッドがフィールドの前にあれば、フィールドを守る事ができるわけです。

面倒でもGetterとSetterは作ろう!

 まぁ、実際にはGetterとSetterが必要ない場面も結構あります。
 それでも必ずGetterとSetterは作りましょう
 GetterとSetterは、Eclipse等のツールを使用すれば、フィールドから自動的に作ることができます。
 また、GetterとSetterはWebアプリケーションで使用する「JavaBeans」という種類のクラスでは必ず作らなければなりません。
 なので、めんどくさがらず必ず作るようにしましょう。
 (ただし、このコンテンツ内で、説明を分かりやすくするためGetterとSetterを作らないことがあります。その点はご了承ください)

3.5 GetterとSetter
このページは、Java言語を用いたオブジェクト指向プログラミングのチュートリアル解説を行う「Javaのオブジェクト指向入門」の一ページです。
詳しい説明は「Javaのオブジェクト指向入門」目次をご覧ください。