싱글톤 패턴(singleton pattern)

서이·2022년 2월 19일
0

Java

목록 보기
5/27
public class Company {
	
    private static Company instance = new Company();
    // 정적 필드를 하나 선언하고 자신의 객체를 생성해 초기화 한다
    // 정적 필드도 private 접근 제한자를 붙여 외부에서 필드값을
    //변경하지 못하도록 막는다. 
    
    private Company() {
    
    }
    // 싱글톤을 만들려면 클래스 외부에서 new 연산자로 생성자를 호출
    //할 수 없도록 막아야한다. 생성자를 호출한 만큼객체가 생성되기 때문이다.
    
    public static Company getInstance() {
    	if( instance == null ) {
        	instance = new Company();
        }
        return instance;
    }
    // 외부에서 호출할 수 있는 정적 메소드인 getInstance()를 선언하고
    // 정적 필드에서 참조하고 있는 자신의 객체르 리턴해준다.
    // 외부에서 객체를 얻는 유일한 방법은 getInstance() 메소드를 호출하는 것
}



public static void main(String[] args) {

	Company company1 = Company.getInstance();
    Company company2 = Company.getInstance();
    
    System.out.println(company);
    System.out.println(company2); //같은 주소값이 나옴
    
}

 Company는 외부에서 생성할 수도 없고 내부에서 private으로 생성되어있고 getInstance메서드만 제공되기 때문에 이 메서드로 return으로 instance만 사용할 수 있다.
-> 유일한 객체를 제공할 때 싱글톤 패턴을 쓴다. (static을 사용해 쓸 수 있다)


     설명에 따른 객체를 구현하여 테스트 코드가 실행되도록 구현하기

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

	public static void main(String[] args) {
		CarFactory factory = CarFactory.getInstance();
		Car myCar = factory.createCar();
		Car yourCar = factory.createCar();
		
		System.out.println(myCar.getCarNum());
		System.out.println(yourCar.getCarNum());

	}

}

public class CarFactory {
	
	private CarFactory() {
		
	}
	
	private static CarFactory instance = new CarFactory();
	
	public static CarFactory getInstance() {
		if(instance == null) {
			instance = new CarFactory();
		}
		return instance;
	}
	
	public Car createCar() {
		Car car = new Car();
		return car;
	}
	
}




public class Car{
	private static int serialNum = 10000;
	int CarNum;
	
	public Car() {
		serialNum++;
		CarNum = serialNum;
	}
	
	public int getCarNum() {
		return CarNum;
	}
}



profile
작성자 개인이 잊을 때마다 보라고 정리한 글

0개의 댓글

관련 채용 정보