복습 - (static & 싱글톤 패턴)

일상 코딩·2022년 8월 8일

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

  • 자동차 공장이 있습니다. 자동차 공장은 유일한 객체이고, 이 공장에서 생산되는 자동차는 제작될 때마다 고유의 번호가 부여됩니다.
  • 자동차 번호가 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 출력
	}
}

02.테스트 코드 구현 실습

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

출력 결과

profile
일취월장(日就月將) - 「날마다 달마다 성장하고 발전한다.」

0개의 댓글