2021年06月18日


( ここをクリックしてください )

モノトーン


モノトーンオブジェクト(Single Color Objects):このタイプでは、ヒップ領域に1つのオブジェクトしか作成できません.
お尻ですべてのオブジェクトを共有するために使用します.典型的な優先パラメータ.
環境設定情報をフィールドとして含むモノトーンオブジェクトがあります.
この設定情報は、1つのオブジェクトにのみ存在する必要があります.複数のオブジェクトに異なる内容がある可能性があるからです.
1つのオブジェクトのみが存在し、プログラムが起動して終了するまで生きていなければなりません.(=ゴミ収集器GC操作X)
ごみの対象
生成され、誰も使用していない場合は、GCが起動します.

モノトーンの作り方


  • new演算子呼び出しジェネレータの外部使用を阻止
    :作成者の前にプライベートアクセス制限子を配置する

  • 静的フィールドをクラス独自のタイプとして宣言
    :独自のオブジェクトを作成して初期化します.
    privateアクセス制限を貼り付けて、外部でフィールド値を変更しないようにします.
    //staticはclazzに属します.メソッド領域を一度に挿入したclazzオブジェクトは、プログラムが終了するまで消えません.
    (gcはhip領域のオブジェクトにのみ適用されます)

  • 外部呼び出し用の静的メソッドgetInstance()宣言
    :静的フィールドで参照したオブジェクトを返します.
    オブジェクトを作成せずにメソッドを呼び出す必要があるため、静的メソッドとして宣言!!!
    (プライベートなのでオブジェクトXを作成)
  • //외부에서 역시 접근 불가능하게 private 접근제한자(access modifier) 로 은닉화(캡슐화)
    // 단 한 번 생성될 싱글톤 객체의 주소를 보관할 필드 선언		-------------------(2)
    private static Singleton singleton = new Singleton();
    
    /////////////////
    //모든 쓰레드, 모든 객체에서 공유할 데이터를 보관할 필드를 선언
    /////////////////
    private int[] intArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    
    
    static {
    	log.debug(">>>>>> static initializer invoked.");
    		
    	Singleton.singleton = new Singleton();
    } //static initializer : JVM이 오직 단 한번만 호출되도록 보장하는 블록 
    	
    //외부에서는 호출 불가능하게 private접근제한자로 은닉화(캡슐화)
    private Singleton() {	//외부에서 new연산자로 호출 못하도록 private으로 선언  ---------(1)
    	;;
    } //default constrctor
    	
    //외부에서 언제든 호출 가능하도록 하려면, 객체생성 없이도 호출할 수 있도록 static 메소드로 선언	
    //싱글톤 객체이 주소를 보관하고 있는 필드의 값을, 언제든 필요로 하는 다른 객체에 줄 수 있도록 
    //정적 메소드를 선언						-------------------(3)
    static Singleton getInstance() {	
    	return singleton;
    } //getInstance
    配列(intArray)に静的キーワードを貼り付けないのはなぜですか?
    ->>単一のトーンは共有され(heap領域のすべてのオブジェクトが共有されます)、保護されたボックスです.
    このボックスはprivate staticとして作成され、データ配列(intArray)が含まれています.
    これは、Clazzオブジェクトとして作成することを意味しません.
    メソッド領域の大きさは大きくありません.この中で列を拡大するのは危険です.(仮想マシンが死ぬ可能性があります)
    最も重要なのは、モノクロオブジェクトが「オブジェクト」です.
    オブジェクトのデータは「フィールド」として存在します.
    このフィールドはインスタンスフィールドです>>オブジェクトに存在するので、もちろん
    したがって、静的キーワードX
    テスト
  • Singletonオブジェクト1
  • 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) {
    		log.info("같은 Singleton 객체 입니다.");
    	}else {
    		log.info("다른 Singleton 객체 입니다.");
    	} //if-else
    }//main
    ->同じオブジェクトであることを確認できます.
  • Singletonオブジェクトテスト2
  • public static void main(String[] args) {
    	/*
    	 * Singleton obj1 = new Singleton(); //컴파일 에러
    	 * Singleton obj2 = new Singleton(); //컴파일 에러
    	 */
    		
    	for(int i=1; i<=10; i++) {
    		Singleton obj = Singleton.getInstance();
    		log.info(String.format("[%d] obj : [%s]", i, obj));
    	}//for
    		
    }//main

    ->参照値に等しくなります.(OIDと同じ)