지난 시간에 카드 클래스를 만들었습니다. 카드 한 장을 의미하는 것이죠. 카드 한 장을 가지고는 게임을 진행 할 수 없습니다.
그 카드를 가지고있는 카드덱을 만들어야지요..
가지고 있다. 멤버 변수이지요?
CardDeck 클래스에는 카드가 20장 필요합니다. 카드 20장...
Card card1 = new Card("피", 1);
Card card2 = new Card("광", 1);
Card card3 = new Card("피", 2);
Card card4 = new Card("광", 3);
...
Card card20 = new Card("피", 10);
--> 이런식으로 만드는 것은 아닙니다.. 안될건 없지만... 영~ 아니올시다~ 입니다.
다들 아시겠지만 그래서 나온 것이 배열입니다.
얘기 했는가 모르겠는데 자바에서는 배열도 객체입니다.(자바에서는 모든게 객체라고 했지요??)
Card[] cardDeck = new Card[20]; // 카드객체가 만들어 지는게 아니라.. 카드에 대한 배열객체가 만들어집니다..
요런 식으로 배열을 만들어서 사용하시면 됩니다.
이건 머.. c랑 똑같잖아!! 자반데... 뭐 없어요?? 하시는 분들이 계실껍니다..
그래.. 자반데...
그래서 ArrayList를 제공합니다.
자바5에 들어와서 C와는 확연하게 차이를 보이며, 편해진 기능(클래스)가 바로 ArrayList입니다.
크기를 지정해서 사용하지 않으며, 개체를 추가하거나, 삭제, 길이를 알아본다거나 마음대로 섞고, 정렬할 수도 있습니다. Java API를 참고하세요.. (java.util.ArrayList)
이 ArrayList는 굉장히 많이 쓰입니다. 정말..정말.. 많이 쓰이므로 사용법을 확실하게 알아두세요!!
(안드로이드 프로그램을 공부하실 때에도 많이 쓰인답니다...)
ArrayList를 사용하시려면, java.util패키지의 ArrayList를 포함 시켜야 합니다.
자바파일 맨 위에 import java.util.ArrayList; 라고 임포트문을 넣으셔야 합니다.
안그러면 ArrayList라는 클래스를 찾지 못하게 됩니다.
패키지 작성법도 나중에 다~ 배우게 될 겁니다.. ㅎㅎ
ArrayList<Card> myCardDeck; // Card객체를 담을 수 있는 myCardDeck을 ArrayList로 만듭니다.
myCardDeck = new ArrayList<Card>(); // 새로운 ArrayList<Card>객체를 생성하셔서 인스턴스 변수에 연결하면.. 끝!
myCardDeck.add(Card one); // 추가하거나
myCardDeck.remove(Card one); 혹은 myCardDeck.remove(int index); // 삭제하면서 사용!
이렇게 쓰시면 됩니다.
이 카드덱을 가지고 있는(멤버 변수) 클래스를 만듭니다... -> 문서화 잊지마세요..
-
import java.util.ArrayList;
-
import java.util.Collections;
-
/**
-
* CardDeck클래스 일반적인 카드덱을 의미합니다. <br />
-
* CardDeck은 추상클래스로 인스턴스화 하지 못합니다. <br />
-
* 이 카드덱을 확장하여(상속받아) 구체적인 카드덱을 생성하도록 할 것입니다. <br />
-
* 이 카드덱으로 트럼프, 화투 등의 여러 가지 구체적인 카드덱을 생성할 수 있습니다.
-
* @author 내이름
-
* @version 1.0
-
* @see Card
-
*/
-
public abstract class CardDeck {
-
private ArrayList<Card> deck; // 멤버로 Card클래스를 담는 ArrayList인 deck을 가지고 있네요!!
-
/**
-
* 각각의 메소드에 대한 설명.. 잊지 마세요!!! 나중에 하려면 귀찮아 집니다..
-
*/
-
-
/**
-
* 생성자들..도 각각 설명을 자세하게 주석을 달아주세요!!!
-
*/
-
public CardDeck(){
-
deck = new ArrayList<Card>();
-
}
-
public CardDeck(ArrayList<Card> setDeck){
-
deck = new ArrayList<Card>();
-
deck = setDeck;
-
}
-
public CardDeck(String[] aShape, int[] aNum){
-
deck = new ArrayList<Card>();
-
Card addCard = new Card();
-
for(String shape:aShape){ // 재미있는 for문이 나왔지요? 요런형태로 배열을 순회합니다.
-
for(int num:aNum){
-
addCard = new Card(shape, num);
-
deck.add(addCard);
-
}
-
}
-
}
-
/**
-
* shuffle메소드는 Collections객체의 static클래스를 가져다 사용합니다.
-
*/
-
public void shuffle(){
-
Collections.shuffle(deck); // 요셔플 때문에 Collections클래스를 임포트
-
}
-
public Card getOne(){
-
Card rtnCard=null;;
-
if(deck.size()!=0){
-
rtnCard = deck.remove(0);
-
}
-
return rtnCard;
-
}
-
public int size(){
-
return deck.size();
-
}
-
public boolean add(Card one){
-
return deck.add(one);