👌
プログラミング自主学習 44日目 全体復習/アクセス修飾子/Getter・Setter/Singletone
アクセス修飾
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