Java

싱글톤 패턴

hs_developer 2022. 5. 30. 22:37

CarClass이라는 객체가 있다.

public class CarClass

 

 

어떻게 해야 Car 객체의 인스턴스가 하나만 존재하도록 할 수 있을까?

private CarClass() {

}

// 생성자가 private면 아무도 이 객체를 생성할 수 없는데..

 

 

그렇다면 자신을 멤버로 선언해서 메모리에 올려놓자 (static)

private static CarClass car new CarClass();

// 이렇게 해도 멤버로 선언된 CarClass 역시 private이다.

 

 

외부에서 멤버로 선언된 car을 가져올 수 있는 메서드를 생성하면 된다!

public static CarClass getInstance()
{
	return car;
}

// 이렇게 하면 getInstance 메서드 외에는 CarClass 객체를 생성 및 사용 할 수 없게 되었다.

 

 

구현 코드


public class CarClass {

	private static CarClass car = new CarClass();
	
	// 생성자
	private CarClass() {
		
	}
	
	// private인 car 인스턴스를 가져올 수 있는 메서드
	public static CarClass getInstance()
	{
		return car;
	}
	
	private static boolean isUse = false;
	
	// 차 사용 시작
	public static void drive()
	{
		isUse = true;
		System.out.println("운전 시작");
	}
	
	// 차 사용 종료
	public static void parking()
	{
		isUse = false;
		System.out.println("주차 됨");
	}
	
	public static boolean isEnableUseCar()
	{
		return !isUse;
	}
	
}

 

 

private static CarClass car = new CarClass();

 위 코드를 통해 최초 한 번만 객체를 생성하고 이후에 해당 객체를 getInstance 메서드를 활용 해 return 받아 사용하는데 해당 차 객체를 누군가 이용하고 있으면 이용할 수 없도록 구현했다.

 

 

// 차 사용

CarClass car = carClass.getInstance();

if(car.isEnableUseCar())
{
	car.drive();
}
// 차 사용 요청

if(car.isEnableUseCar())
{
	car.drive();
}
else
{
	System.out.println("++++ Wait ++++")
}

'Java' 카테고리의 다른 글

제네릭  (0) 2022.06.13
컬렉션 프레임워크  (0) 2022.06.10
[예제] 객체 지향  (0) 2022.05.25
멤버 변수  (0) 2022.05.24
자바 은닉화: 캡슐화 encapsulation  (0) 2022.05.24