[Java] 클래스와 객체 - 예제3

나영원·2020년 8월 27일
0

Java_basic

목록 보기
33/60

static과 singleton pattern

카드 회사가 있습니다. 카드회사는 유일한 객체이고, 이 회사에서는 카드를 발급하면 항상 고유번호가 자동으로 생성됩니다.
10001부터 시작하여 카드가 생성될 때 마다 10002, 10003식으로 증가 됩니다.
다음 코드가 수행 되도록 Card클래스와 CardComapny 클래스를 구현하세요.

public class Card {
	//1번
	private static int serialNum = 10000;
	private int cardNum;
	//2번
	public Card() {
		serialNum++;
		cardNum=serialNum;
	};
	//3번
	public int getCardNum() {
		
		return cardNum;
	}
}
  • 1번 : Card 클래스를 만들고 cardNum과 cardNum을 카운트하기위한 serialNum을 private으로 선언하고 serialNum은 static으로 선언하여 여러 인스턴스에서 접근가능하도록 합니다.
  • 2번 : Card 생성자를 만들고 인스턴스가 생길때마다 serialNum이 증가하고 증가한 수가 carNum이 되도록 작성합니다
  • 3번 : private인 cardNum을 읽기위한 getCardNum 메서드를 작성합니다.
public class Company {

	//2번
	private static Company instance = new Company();
	//1번
	private Company () {}
	//3번
	public static Company getInstance() {
		
		return instance;
		
	}
	//4번
	public static Card createCard() {
		
		Card card = new Card();
		return card;
	}
}
  • 1번 : Company 클래스를 만들고 Company 생성자를 private으로 만들어 외부에서 인스턴스를 생성할수 없게 만듭니다.
  • 2번 : private으로 클래스 내부에서 i단 하나의 인스턴스를 생성합니다
  • 3번 : 외부에서 Comapny instance 를 읽기 위해 사용할 getInstance메서드를 작성하고 static을 통해 인스턴스를 생성하지 않고도 메서드를 사용할 수 있게 합니다.
  • 4번 : Card 인스턴스를 생성할 createCard메서드를 만들고 역시 인스턴스 생성없이 사용할수 있게 static을 붙여줍니다.
public class CardTest {

	public static void main(String[] args) {
		//1번
		Company company = Company.getInstance();
		//2번
		Card myCard = company.createCard();
		Card yourCard = company.createCard();
		//3번
		System.out.println(myCard.getCardNum()); //10001
		System.out.println(yourCard.getCardNum()); //1002
		
	}

}
  • 1번 : Company 인스턴스를 불러오기 위해 Company.getInstance 메서드를 사용합니다.
  • 2번 : Card 인스턴스를 사용하기 위해 company.createCard()메서드를 사용합니다.
  • 3번 : cardNum을 확인하기 위해 출력문에 getCardNum 메서드를 사용합니다.
profile
배우는 개발 일기

0개의 댓글