day16_SingletonTestEx05

육희영·2021년 10월 28일
0
package com.java1.day16;

/*생성자의 접근제어자*/
//생성자에 접근제어자를 사용함으로써 인스턴스의 생성을 제한할 수 있다.

public class SingletonTestEx05 {
//static int a = 0;
	public static void main(String[] args) {
// Singleton s = new Singleton();// 에러!!! Singleton() has private access in Singleton 
        Singleton s1 = Singleton.getInstance(); 
        Singleton s2 = Singleton.getInstance(); // 인스턴스 객체가 생성 되는게 아니다.
// a = 1;
        
        System.out.println(s1.hashCode());	//hashCode()는 주소를 반환해 준다.
        System.out.println(s2.hashCode());	//s1과 s2 의 주소가 같은 주소를 출력함을 자세히 보자..(같은 객체라는 뜻이다.)
	}
}

class Singleton { 
    private static  Singleton instance; //private 이므로 직접 접근은 할수 없다.
    
    private Singleton() { 	//생성자의 접근제어자를 private으로 지정하면
         					//외부에서 생성자에 접근 할수 없으므로
    } 						//인스턴스를 생성 할수 없다. 
    						//그러나 클래스 내부에서는 생성 할수 있다.
    
    // 인스턴스를 생성하지 않고도 호출할 수 있어야 하므로 static이어야 한다. 
    public static Singleton getInstance() { //인스턴스를 반환//static 매서드 안에는 클래스 맴버 변수를 쓸수있고//인스턴스 변수는 사용할수 없다.
    	if(instance == null)	//생성되어진 인스턴스가 없다면 인스턴스를 생성하자
    		instance = new Singleton();	//외부 에서는 new 를 사용해서 생성을 할수 없지만 내부에서는 가능하다.
    	return instance; 		//생성된 인스턴스가 있으면 새로 만들지 말고 기존의 인스턴스를 리턴해주자!			
    }	//공통의 업무 로직을 사용할때는 static 매서드를 사용한다. 그러나 static 변수는 가급적 사용하지 않도록 한다.       								
} 

/* 제어자의 조합 */
/* 클래스가 사용할수 있는 제어자 (protected 와 private 사용 불가)
- public, (default), final(상속 불가), abstract */

/* 매서드가 사용할수 있는 제어자
- 모든 접근 제어자, final(오버라이딩 불가), static, abstract */

/* 맴버 변수가 사용할수 있는 제어자
- 모든 접근 제어자, final, static  */

//지역 변수가 사용할수 있는 제어자 - final

출력결과

474675244
474675244

0개의 댓글

관련 채용 정보