minlog
article thumbnail

 

싱글톤 패턴이란?

한 번의 메모리만 할당하고 그 할당한 메모리에 대해 객체로 관리하기 위함입니다.
프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴
ex ) Calendar 클래스


🍫 싱글톤패턴
company.java

package ch18;

public class Company {
	// 2. 유일한 인스턴스가 바로 생성될 수 있도록 내부에서 static으로 생성해준다.
	private static Company instance = new Company();
	
	// 1. 다른 곳에서 생성 하지 못하게 하기 위해 private로 생성자를 만들어준다.
	private Company() {}
	
	// 3. 유일한 인스턴스를 외부에서 접근하기 위한 메서드
	public static Company getInstance() {
		// 4. 혹시나 인스턴스가 생성이 안되었으면 생성
		if (instance == null) {
			instance = new Company();
		}
		return instance;
	}
	
}

CompanyTest.java

package ch18;

public class CompanyTest {

	public static void main(String[] args) {
		//static으로 생성이 되어 있어 new 없이 클래스 이름으로 바로 사용가능
		Company company = Company.getInstance();
		Company company2 = Company.getInstance();
		
		System.out.println(company);
		System.out.println(company2);
	}

}

결과값 > 동일한 주소값을 받아오는 것을 볼 수 있다.





🍫 static과 싱클톤 패턴 문제풀어보기

자동차 공장이 있습니다. 자동차 공장은 유일한 객체이고, 이 공장에서 생산되는 자동차는 제작될 때마다 고유의 번호가 부여됩니다. 자동차 번호가 10001부터 시작되어 자동차가 생산될 때마다 10002, 10003 이렇게 번호가 붙도록 자동차 공장 클래스, 자동차 클래스를 구현하세요 다음 CarFactoryTest.java 테스트 코드가 수행 되도록 합니다.
package ch19;
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 출력
	}
}

결과값 출력

 

package ch19;

public class CarFactory  {
	//유일한 공장 객체 생성
	private static CarFactory carfactory = new CarFactory();
	//객체 선언
	private CarFactory() {}
	
	public static CarFactory getInstance() {
		if(carfactory == null) {
			carfactory = new CarFactory();
		}
		return carfactory;
	}
	// Car 객체 생성
	public Car createCar() {
		Car car = new Car();
		return car;
	}
	
}
package ch19;

public class Car {
	
	private static int CARNUMBER = 10001; //고유의 차 번호
	private int CarNum;
	
	public Car() {
		CarNum  = CARNUMBER++;
	}
	
	public static int getCARNUMBER() {
		return CARNUMBER;
	}
	
	public int getCarNum() {
		return CarNum;
	}
	public void setCarNum(int carNum) {
		CarNum = carNum;
	}

}

 

profile

minlog

@jimin-log

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!