본문 바로가기
🌈 백엔드/객체 지향

JAVA_객체지향_디자인 > 싱글톤 패턴

by 개발자 알마 2023. 6. 3.
반응형

 

[1] 싱글톤 패턴


(1) 싱글톤 패턴 정의 

  • 프로그램에서 인스턴스가 1개만 생성되어야 할때 사용하는 디자인 패턴 
  • static 변수와 메서드를 활용한다 

 

[2] 싱글톤 패턴 구현하기


(1) 생성자와 인스턴스를 private로 생성한다 

 

package 패키지;

public class Company {

	// 유일한 인스턴스
	private static Company instance = new Company();
	
	//생성자
	private Company() {}
	
    //가져오는 인스턴스는 유일한 인스턴스로만 출력한다 
	public static Company getInstance() {
		if(instance == null) {
			instance = new Company();
		}
		
		return instance;
	}
	
}

(2) 인스턴스 출력 

  • 인스턴스의 값이 없었기 때문에 company1로 인스턴스가 설정되었고 
  • 이미 인스턴스가 있어서 company2는 인스턴스1로만 출력되었다  
public class CompanyService {

	public static void main(String[] args) {
    
    
    	//인스턴스1
		Company company1 = Company.getInstance();
		
        //인스턴스2
		Company company2 = Company.getInstance();
		
		System.out.println(company1);
		System.out.println(company2);
		
		
	}
}

 

[3] 싱글톤 패턴 + static 활용 


  • 자동차 클래스 
  • 시리얼넘버 (static)
  • 자동차 고유넘버 
package 패키지;

public class Car {
	
    // 자동차가 생성될때마다 , 공통 변수
	private static int seiealNum = 10000;
	
	private int carNum;
	
	// 자동차 생성될때마다 증가 
	public Car () {
		
		seiealNum++;
		carNum = seiealNum;
	}

	public int getCarNum() {
		return carNum;
	}

	public void setCarNum(int carNum) {
		this.carNum = carNum;
	}

}
  • 자동차공장 클래스
  • 자동차 공장은 유일한 인스턴스 
  • 자동차공장 이름 가져올때 유일하게 적용되도록 하는 함수
  • 자동차 공장에서 자동차가 생성될때마다 자동차 인스턴스가 생긴다는 함수 
package 패키지;

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;
	}
	
}
  • 서비스 패키지 
  • 자동차 공장의 이름 factory로 넣기 
  • 자동차 공장에서 소나타1이 생성되었다
  • 자동차 공장에서 소나타2가 생성되었다 
  • 소나타1과 소나타2의 고유번호를 출력하라 
package 패키지;

public class Service {

	public static void main(String[] args) {

		//자동차 공장의 이름 가져오기
		CarFactory factory = CarFactory.getInstance();
		
        // 자동차 공장에서 소나타1 생성 + 고유번호 추가
		Car 소나타1 = factory.createCar();
		
        //자동차 공장에서 소나타2 생성 +고유번호 추가 
		Car 소나타2 = factory.createCar();
		
		System.out.println(소나타1.getCarNum()); // 10001출력  
		System.out.println(소나타2.getCarNum()); // 100022출력 

		
	}

}

 

 

반응형

댓글