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 메서드를 사용합니다.
'Java' 카테고리의 다른 글
[Java] 배열과 ArrayList - 객체 배열 (0) | 2020.07.13 |
---|---|
[Java] 배열과 ArrayList - 배열이란? (0) | 2020.07.13 |
[Java] 클래스와 객체 - static 응용 - singleton Pattern (0) | 2020.07.13 |
[Java] 클래스와 객체 - static 변수, 메서드 (0) | 2020.07.13 |
[Java] 클래스와 객체 - 예제2 (0) | 2020.07.12 |