본문 바로가기
개발/JAVA

자바 객체지향(5) - 싱글턴 패턴

by chansungs 2020. 6. 14.
728x90
반응형

싱글턴 패턴

// 싱글턴 패턴
// - 특정 클래스의 객체를 단 한개만 생성하여 사용하도록 강제하는 패턴 
// - private 접근지정자를 갖는 생성자, 그리고 static 메소드를 결합한 패턴
class StaticD {
	private StaticD() {
		System.out.println("StaticD 객체 생성");
	}
	
	private static StaticD instance = null;
	public static StaticD getInstance() {
		if( instance == null )
			instance = new StaticD();
		return instance;
	}
}

public class Class_18_Static {
	public static void main(String[] args) {
		// private 접근지정자로 제한된 생성자는 외부에서 
		// 객체의 생성을 금지합니다.
		// StaticD s = new StaticD();
		
		// static 메소드를 통해 객체를 전달받는 코드
		// - 싱글턴 패턴을 구현한 static 메소드이므로
		//   프로그램의 구동동안 StaticD 클래스의 객체는
		//   단 한개만 생성되어 공유되는 모습을 보입니다.
		StaticD s1 = StaticD.getInstance();
		StaticD s2 = StaticD.getInstance();
		StaticD s3 = StaticD.getInstance();
		StaticD s4 = StaticD.getInstance();
		StaticD s5 = StaticD.getInstance();
	}
}

싱글턴 패턴 예제

// 자동차(Car)를 생산할 수 있는 공장(CarFactory) 클래스를 싱글턴 패터으로 구현한 후,
// 자동차(Car)를 생산하는 예제를 작성하세요
// (생산되는 자동차(Car)는 자동차 생산 번호가 10001부터 1씩 증가가 되도록 구현)
class Car {	
	private int productNumber;
	public Car(int productNumber) {
		this.productNumber = productNumber;
	}
	public void printNumber() {
		System.out.println(this.productNumber);
	}
}
class CarFactory {
	private static int productNumber = 10001;
	private CarFactory() {}
	private static CarFactory instance = null;
	public static CarFactory getInstance() {
		if( instance == null )
			instance = new CarFactory();
		return instance;
	}
	public Car createCar() {
		return new Car(productNumber++);
	}
}
public class Class_19_Static_EX {
	public static void main(String[] args) {
		CarFactory factory = CarFactory.getInstance();
		Car c1 = factory.createCar();
		Car c2 = factory.createCar();
		c1.printNumber();
		c2.printNumber();
	}
}

728x90
반응형