본문 바로가기
개발공부/Java

[Java] 11. static과 싱글톤 패턴 예제

by sangyeon 2021. 11. 28.
728x90

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

자동차 공장이 있다.
자동차 공장은 유일한 객체이고, 이 공장에서 생산되는 자동차는 제작될 때마다 고유의 번호가 부여된다.
자동차 번호가 10001부터 시작되어 자동차가 생산될 때마다 +1 번호가 붙도록,
다음 CarFactoryTest.java 테스트 코드가 수행되도록
자동차 공장 클래스, 자동차 클래스를 구현하여라.

> 정답은 맨 아래

 

# 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 출력
}
}

 

정리

1. CarFactory는 유일한 객체이기 때문에 싱글톤 패턴으로 private static으로 Client 코드에서 CarFactory 인스턴스를 둘 이상 생성할 수 없도록 제한한다.

2. Client 코드(CarFactoryTest.java)를 보면, Car 객체 생성 시에 CarFactory 객체의 createCar라는 메서드를 사용하기 때문에 CarFactory.java 파일에 Car 객체를 생성하는 코드가 있어야 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

====================================================================

정답

====================================================================

 

# CarFactory.java

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;
}

public static Car createCar() {
Car car = new Car();
return car;
}
}

 

# Car.java

package ch19;

public class Car {

private static int serialNum = 10000;
private int carNum;

public Car() {
serialNum++;
carNum = serialNum;
}

public int getCarNum() {
return carNum;
}
}
728x90