Java/패스트캠퍼스

싱글톤 패턴

hs_developer 2022. 5. 30. 21:33

싱글톤 패턴이란?

프로그램에서 인스턴스가 한 개만 생성되어야 할 때 사용하는 디자인 패턴

static 변수, 메서드 이용해 구현

 

 

싱글톤 패턴으로 회사 객체 구현하기

Company@5ca881b5
Company@5ca881b5

public class Company {

	// 클래스 내부에 유일한 private 인스턴스 생성
	private static Company instance = new Company();
	
	// 생성자는 private로 선언
	private Company() {
		
	}
	
	// 외부에서 유일한 인스턴스를 참조할 수 있는 public 메소드 제공
	public static Company getInstance()
	{
	    if(instance == null)
	    {
	    	instance = new Company();
	    }
	    return instance;
	}
	
	public static void main(String[] args) {
		
		Company company1 = Company.getInstance();
		Company company2 = Company.getInstance();
		
		System.out.println(company1);
		System.out.println(company2);
	}
}

 

 

설명에 따른 객체를 구현해 테스트 코드 실행시키기

 

자동차 공장이 있다. 자동차 공장은 유일한 객체이고, 이 공장에서 생산되는 자동차는 제작될 때마다 고유의 번호가 부여된다. 자동차 번호가 10001부터 시작되어 자동차가 생산될 때마다 10002, 10003 이렇게 번호가 붙도록 공장 클래스, 자동차 클래스를 구현한다.

 

10001
10002
public class Car {

	private static int serialNum = 10000;
	private int carNum; // 차 번호는 고유 값이니까
	
	public Car()
	{
		serialNum++;
		carNum = serialNum;
	}

	public int getCarNum() {
		return carNum;
	}

	public void setCarNum(int carNum) {
		this.carNum = carNum;
	}
	
}
public class CarFactory {
	
	private static CarFactory instance = new CarFactory();
	
	private CarFactory() {
		
	}
	
	public static CarFactory getInstance()
	{
		if(instance == null)
		{
			instance = new CarFactory();
		}
		return instance;
	}
	
	public Car createCar()
	{
		Car car = new Car();
		return car;
	}
	
}
public class CarFactoryTest {

	public static void main(String[] args) {

	    CarFactory factory = CarFactory.getInstance();
	    
	    Car mySonata = factory.createCar();
	    Car yourSonata = factory.createCar();

	    System.out.println(mySonata.getCarNum()); // 10001
	    System.out.println(yourSonata.getCarNum()); // 10002
	}
}