👌

プログラミング自主学習 44日目 全体復習/アクセス修飾子/Getter・Setter/Singletone

2023/07/09に公開

アクセス修飾

Getter, Setter

外部からオブジェクトのフィールドを勝手に読み、変更する場合、オブジェクトは壊れる。
例えば、自動車の速度は負数にはなれない。しかし、外部で負数に変更すれば、
オブジェクトのデーターの整合性(date integrity) が損なう。

Car myCar = new Car();
myCar.speed = -100;

そのため、アクセス修飾子でカプセル化をし、フィールドにアクセスを防ぐ代わりに、Setter methodを活用するができる。

Private double speed;

public void setSpeed(double speed){
  if(speed < 0 ) {
      this.speed = 0;
      return;
  } else {
  this.speed = speed;
  }
}

また、オブジェクトののフィールドを読みたい際に、メソッドが必要な場合もある。

private double speed;   //speedはmile

public double getSpeed(){
     double km  = speed*1.6;
     return km;
 }

//fieldの値 mileをkmに変換した後、return

この際にはGettter methodを活用する。

private fieldtype fieldName;    <--- インスタンスフィールドはprivate

//getter
public fieldtype getFieldName(){                    *booleanはgetをisに変更する。
return fieldName;
}

//setter
public void setFieldName(fieldtype fieldName){
this.fieldname = fieldname;
}

package ch06.sec14;

 
public class Car {


private int speed;
private boolean stop;


public int getSpeed() {
  return speed;
}

public void setSpeed(int speed) {
if(speed<0) {
  this.speed=0;
  return;
}else {
  this.speed=speed;
 }
}

 
public boolean isStop() {
 return stop;
}

public void setStop(boolean stop) {
 this.stop = stop;
 if(stop == true) this.speed=0;
  }
}
package ch06.sec14;

 

public class CarExample {

public static void main(String[] args) {


Car myCar = new Car();


myCar.setSpeed(-50);
System.out.println("현재 속도: " + myCar.getSpeed());
myCar.setSpeed(60);
System.out.println("현재 속도: " + myCar.getSpeed());


if(!myCar.isStop()) {
   myCar.setStop(true);

}

System.out.println("현재 속도: " + myCar.getSpeed());
System.out.println(myCar.isStop());

Singletone

オブジェクト(インスタンス)を一つ生成し、コントロールする方法。

package ch06.sec15;

 

public class Singleton {

private static Singleton singleton = new Singleton();

 
private Singleton() {};
public static Singleton getInstance() {
return singleton;

  }

}
package ch06.sec15;

 

public class SingletonExample {

 

public static void main(String[] args) {

/*

* Singleton obj1 = new Singleton();

* Singleton obj2 = new Singleton();

*

*

*/

 
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();


if(obj1 == obj2) {

System.out.println("same singleton");

}else {

System.out.println("different singleton");

 } 

}


}

 

//result : same singleton

Discussion