본문 바로가기

JAVA/쓸만한 코드

Singleton//싱글톤//기본 코드

1번문제 : MyClass에서 싱글턴을 통해 YouClass로 숫자 넘기기 

2번문제 : YouClass에서 싱글턴을 통해 HeClass로 문자 넘기기

->> 모두 Main에서 함수 호출

 

 

**Singleton : 하나의 instance에 접근하여 데이터를 송수신 할 수 있는 Patten
                 어디서든 호출하면 접근 가능.

public class SingletonClass {
	private static SingletonClass sc=null;
	public int snumber;
	public String str_;
	
	private SingletonClass() {
	}
	public static SingletonClass getInstance() {
		if (sc == null) {
			sc = new SingletonClass();
			//privat 싱글턴 메서드는 같은 클래스 안에서 수정 가능
			//sc가 처음에 생성됐고 두번째부터는 false가 되서 첫번째 들어온 값이 평생감.
		}
		return sc;
	}
}

 

MyClass

public class MyClass {
	private int number;
	
	public MyClass() {//1번
		number = 12;
	}
/*
	public int getNumber() {
		return number;
	}
	*/
	public void method() {//1번
		SingletonClass sc = SingletonClass.getInstance();
		sc.snumber = this.number;//singleton snumber에 마이클래스 number대입
	}
}

YouClass

public class YouClass {
	private int tag;//1번
	private String str1;//2번
/*
	public void setTag(int tag) {//1번
		this.tag = tag;
	}
*/
	public YouClass() {//2번
		str1 = "싱글톤 넘기기";
	}
	public void func() {//1번
		SingletonClass sc = SingletonClass.getInstance();
		this.tag = sc.snumber;
		//마이클래스 number로 변한 singleton snumber를 tag에 대입
	}
	public void method() {//2번
		SingletonClass sc = SingletonClass.getInstance();
		sc.str_ = this.str1;
	}
	@Override
	public String toString() {//1번
		return "YouClass [tag=" + tag + "]";
	}
}

HeClass

public class HeClass {
	private int num;
	private String str2;//2번
	
	public void function() {
		SingletonClass sc = SingletonClass.getInstance();
		num = sc.snumber;
	}
	public void func() {//2번
		SingletonClass sc = SingletonClass.getInstance();
		this.str2 = sc.str_;
	}
	@Override
	public String toString() {//2번
		return "HeClass [str2=" + str2 + "]";
	}
}

Main

public class mainClass {

	public static void main(String[] args) {
		MyClass mcls = new MyClass();
		YouClass ycls = new YouClass();
		HeClass hcls = new HeClass();//2번
/*
		int n = mcls.getNumber();
		ycls.setTag(n);
*/
		//1번
		//MyClass에서 YouClass로 가져오기
		mcls.method();//sc.snumber = this.number;
		ycls.func();//this.tag = sc.snumber;
		System.out.println(ycls.toString());//->YouClass [tag=12]

		//2번
		//YouClass에서 HeClass로 가져오기
		ycls.method();
		hcls.func();
		System.out.println(hcls.toString());//->HeClass [str2=싱글톤 넘기기]
	/*	
		SingletonClass sc = SingletonClass.getInstance();
		System.out.println("sc : "+sc);
		
		SingletonClass scTag = SingletonClass.getInstance();
		System.out.println("scTag : "+scTag);
		//값이 sc와 똑같음.
	*/
	}
}

'JAVA > 쓸만한 코드' 카테고리의 다른 글

야구게임//memberNumber 코드 리스트/싱글톤 비교  (0) 2020.06.10
싱글톤//야구 멤버  (0) 2020.06.10
stack//스택// 원리 코드  (0) 2020.06.10
Map//Baseball 야구멤버  (0) 2020.06.09
HashMap 코드  (0) 2020.06.09