アクセス修飾
種類(Class, Field, Method, Constuctor) | 範囲 |
pubilic | どこでもオッケー |
(default) | 同じパッケージ内 |
private | 同じオブジェクト内 |
protectedは特殊なやつで、同じパッケージ内と継承したオブジェクトのみ使用可能。
今後、勉強するため、その際にまとめる。
OOTの原則である、カプセル化とも関係がある。
https://github.com/HyonHyonKOR/Thisisjava/tree/main/Chapter6/sec13
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;
//speed 필드의 Getter/Setter 선언
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
if(speed<0) {
this.speed=0;
return;
}else {
this.speed=speed;
}
}
//stop 필드의 Getter/Setter 선언
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
オブジェクト(インスタンス)を一つ生成し、コントロールする方法。
1. コンストラクタをprivateにする。
外部からのインスタンス化を防ぐためだ。
2. フィールドをprivate staticに宣言し、new演算子とコンストラクタを呼び出すことで、オブジェクトを生成する。
インスタンスにフィールドを持たせない。また、自動的にメソッドの静的フィールドにインスタンスの参照値(アドレス)をもたせる。生成されたオブジェクトは全部同じインスタンスを参照する。
3. public static + getInstanceで、生成されたオブジェクトをリターンするメソッドを宣言する。
インスタンス化をせずに(static)、どこでも生成できるように(public)するためだ。
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("같은 singleton 객체입니다.");
}else {
System.out.println("다른 singleton 객체입니다.");
}
}
}
같은 singleton 객체입니다.
'IT自主学習 (2023.05.23~) > Java(2023.05.23~)' 카테고리의 다른 글
プログラミング自主学習 46日目 instanceof /抽象クラス(abstract)/sealed(JAVA 15) (0) | 2023.07.11 |
---|---|
プログラミング自主学習 45日目 Class確認問題/継承(Inheritance)/protected/タイプ変換/多態性(ポリモーフィズム・Polymorphism) (0) | 2023.07.10 |
プログラミング自主学習 43日目 final・constant/package・import (0) | 2023.07.08 |
プログラミング自主学習 42日目 Method(overloading)/Instance Member/Static Member (0) | 2023.07.07 |
プログラミング自主学習 41日目 Constructor/method (0) | 2023.07.06 |