- 자동차 공장이 있습니다. 자동차 공장은 유일한 객체이고, 이 공장에서 생산되는 자동차는 제작될 때마다 고유의 번호가 부여됩니다.
- 자동차 번호가
10001부터 시작되어 자동차가 생산될 때마다10002,10003이렇게 번호가 붙도록 자동차 공장 클래스, 자동차 클래스를 구현하세요- 다음
CarFactoryTest.java테스트 코드가 수행 되도록 합니다.
CarFactoryTest.java
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 출력 } }
Car.java
package ch19; public class Car { private static int seralNumber = 1000; // static => 여러개의 인스턴스가 하나의 메모리를 공유한다. private int CarNumber = 0; public Car() { seralNumber++; CarNumber = seralNumber; // 모두가 공유하는 static 변수의 값을 인스턴스 객체의 메모리에 각각 할당 } public int getCarNum() { return CarNumber; } }
CarFactory.java
package ch19; public class CarFactory { // CarFactory 클래스 내부에서 유일한 인스턴스를 private으로 생성 private static CarFactory instance = new CarFactory(); // 기본 생성자 접근 제한 private CarFactory() { } // 자동차 객체 생성 메서드 public Car createCar() { Car car = new Car(); return car; } // 외부에서 유일한 인스턴스를 참조할 수 있는 public 메서드 제공 public static CarFactory getInstance() { if(instance == null) instance = new CarFactory(); return instance; } }
CarFactoryTest.java
package ch19; public class CarFactoryTest { public static void main(String[] args) { // getInstance()메서드가 정적 메서드 이므로 클래스명.정적 메스드명으로 인스턴스 생성 CarFactory factory = CarFactory.getInstance(); Car mySonata = factory.createCar(); Car yourSonata = factory.createCar(); System.out.println(mySonata.getCarNum()); System.out.println(yourSonata.getCarNum()); } }
출력 결과