Development Palette

싱글톤패턴(Singleton Pattern) 본문

Java

싱글톤패턴(Singleton Pattern)

징주 2021. 8. 23. 00:21
싱글톤패턴(Singleton Pattern): 하나의 인스턴스만을 생성하고 사용할 경우에 쓴다

 

일반객체

public class Speaker1 extends Object{
	private int volume;
	
	public Speaker1() {
		volume=5;
	}

	public int getVolume() {
		return volume;
	}

	public void setVolume(int volume) {
		this.volume = volume;
	}

	@Override
	public String toString() {
		return "볼륨: " + volume;
	}
}

toString() 오버라이딩 안하면 주소값 출력됨

//일반 객체
public class Main1 {
	public static void main(String[] args) {
		Speaker1 s1=new Speaker1();
		Speaker1 s2=new Speaker1();
		Speaker1 s3=new Speaker1();
		
		System.out.println(s1);  // or  s1.toString()
		System.out.println(s2);
		System.out.println(s3);
		
		s1.setVolume(10);
		System.out.println(s1.getVolume());	//10
		System.out.println(s2.getVolume());	//5
		System.out.println(s3.getVolume());	//5
		
		s2.setVolume(20);
		System.out.println(s1.getVolume());	//10
		System.out.println(s2.getVolume());	//20
		System.out.println(s3.getVolume());	//5
	}
}

볼륨: 5
볼륨: 5
볼륨: 5
10
5
5
10
20
5

싱글톤패턴(Singleton Pattern)

public class Speaker2 {
	private static Speaker2 speaker;	//static
	private int volume;
	
	private Speaker2() {
		volume=5;
	}

	public static Speaker2 getInstance() {	//static
		if(speaker==null)
			speaker=new Speaker2();
		return speaker;	// <--- 이미 객체가 생성되어 있다면 기존 인스턴스를 리턴한다.
	}

	public int getVolume() {
		return volume;
	}

	public void setVolume(int volume) {
		this.volume = volume;
	}
}
package com.testex.t0823_debug.singletonex;

/* 싱글톤패턴(Singleton Pattern): 하나의 인스턴스만을 생성하고 사용할 경우에 쓴다 */
public class Main2 {
	public static void main(String[] args) {
		Speaker2 s1 = Speaker2.getInstance();
		Speaker2 s2 = Speaker2.getInstance();
		Speaker2 s3 = Speaker2.getInstance();
		
		System.out.println(s1);
		System.out.println(s2);
		System.out.println(s3);
		
		System.out.println(s1.getVolume());	//5
		System.out.println(s2.getVolume());	//5
		System.out.println(s2.getVolume());	//5
		
		s1.setVolume(10);
		System.out.println(s1.getVolume());	//10
		System.out.println(s2.getVolume());	//10
		System.out.println(s3.getVolume());	//10
		
		s2.setVolume(20);
		System.out.println(s1.getVolume());	//20
		System.out.println(s2.getVolume());	//20
		System.out.println(s3.getVolume());	//20
	}
}

com.testex.t0823_debug.singletonex.Speaker2@2a139a55
com.testex.t0823_debug.singletonex.Speaker2@2a139a55
com.testex.t0823_debug.singletonex.Speaker2@2a139a55
5
5
5
10
10
10
20
20
20

'Java' 카테고리의 다른 글

compareTo 정리  (0) 2021.09.29
HashMap 정렬  (0) 2021.09.29
Comparator / Comparable  (0) 2021.08.22
직렬화 Serializtion  (0) 2021.08.22
메모리  (0) 2021.08.08
Comments