/*내용을 복사 한 후 이클립스에서

ctrl + shift + F를 눌러주세요!!*/

 

//P.232 클래스 (포함관계)
//앞전은 상속을 공부했어~
//뒷장은 바로 포함관계지... 나누어 놨더군~
//예문은 쉽다~
//① 상속(inheritance) 는 '~은 ~ 이다'                 is-a 관계
//② 포함(composite) 은 '~은 ~ 을 가지고 있다'       has-a 관계
// 책을 쭉 읽어 봤으면 상속을 쓸건지 포함을 쓸건지 정도는 쉽게 알수 있을 것 같다.
//P.230쪽 예문보다는 P.232 예문이 더 길고 스릴이 넘치는 관계로 P.232 예문으로 정리해볼께!

package JavaTest;


//우선 클래스를 정의한당~ 책은 자꾸 클래스가 먼저 안나오는데..책을 때로는 무시도 해보자..ㅋㅋ

class Card{
 
 static final int kind_max = 4; // 세현이 씹탱 이거 무슨 변수냐?! 또 틀리면 죽인다!
 static final int num_max = 13; // 카드 종류 4개, 넘버는 13개 우선 이렇게 클래스 변수 선언!
 
 static final int spade = 4;
 static final int diamond = 3;
 static final int heart = 2;
 static final int clover = 1;
 
 int kind;
 int number;                        // 인스턴스 변수 각각 선언~
 
 Card(){                              // 카드 생성자 만들었엉~ 매개변수 하나도 없는...
  this(spade,1);                // 빨간줄 뜨지?! 이거 기억나면 좋을텐데.. this() 지금 매개변수가 하나도없는
 }                                      //Card() 생성자는 매개변수가 두개 있는 생성자를 복사해서 쓴다라는거 기억나지?
                                        // 코딩할때 이렇게 생각하고 쓴거얌! 밑에다가 그럼 두개짜리 만들어보자!
 
 Card(int kind,int number){     //자 여기서 매개변수 2개짜리 만들면 위에 빨갱이가 사라짐!
  this.kind = kind;               //kind 와 number를 각각 자기 자신을 표현해줌~~~
  this.number = number;
 }
 
 public String toString(){        //toString이라는 메서드 하나 만들께염~뒤에서 배울 Object 클래스-모든 클래스의 조상뉨!
  
  String kind = "";              //문자열 초기값 설정은 "" 표로 해주면 됩니당용!
  String number = "";
  
  switch(this.kind){                      //스위치문 그냥 싫어! 어저께 교수님이 문제 내줄때도 맘에 안들었음!
  case 4 : kind = "spade"; break;
  case 3 : kind = "diamond"; break;
  case 2 : kind = "heart"; break;
  case 1 : kind = "clover"; break;
  }
  
  switch(this.number){
  case 13 : number = "K"; break;
  case 12 : number = "Q"; break;
  case 11 : number = "J"; break;
  default : number = this.number + "";
  
  }
  
  return kind+","+number;      //    toString() 메서드의 리턴값을 한번 받아 보겠습니다.~~~
 }
 
}

//여기까지 Card 클래스 끝! 확실한건 책에 적혀 있는 순서대로 코딩하면 이해가 안돼..ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 


//여기서 부터는 Deck 이라는 클래스 코딩~

class Deck{   //잠깐!! 영어 공부!! deck 은 원래 '(배의)갑판',층 뭐 이런 뜻이다. 미쿡!에서는 숙어적인 의미로
                // '카드 한벌' or '카드 한통' 정도의 의미이더라~ 더럽게 난해한 단어 쓰고 X랄 이야.ㅠ
 final int card_num = 52;       //어라?! final 이 또 나타났네..이건 일단 패스~ 뒤에서 배울거임
                                         //우선은 최종값? 정도로 정리하자! 어쨌든 인스턴스 변수선언!
 
 Card c[] = new Card[card_num];    //자~ 요놈 위에 Card 클래스를 '포함관계(has-a)' 로 나타냈어!
                                                  //나름 이번 예문의 핵심이니 잘 보도록 하장! 배열은 짜증나지만...
 
 Deck(){                  //매개변수가 하나도 없는 생성자 만듬
  
  int i = 0;            // 넌 뭐니? 초기화? for 문 때문에 i 값 초기화를 해뒀음
  
  for (int k = Card.kind_max; k > 0 ; k--) {     
   for (int n = 1; n < Card.num_max+1; n++) {
    c[i++] = new Card(k,n);
   }
  }
  
  //썅~ 설명의 고비가 찾아왔다..ㅋㅋ;; 직설적 설명들어감..;; 카드 종류는 1씩 줄여라..(4,3,2,1)로..
  //카드 숫자는 1씩 증가해라.. 해당하는 값을 표현해라..와..이거 설명해주기 되게 힘드네..for 문은 이래서 짜증나.
 }
 
 Card pick(int index){    // 매개변수 한개 있는 pick 메서드 .....근데...Card가 왜 있는지 모르겠다...ㅠ_ㅠ알려줘
  
  if(index>=0 && index<card_num){
   return c[index];
  }else{
   return pick();       //매개변수 없는 pick() 메서드 호출 밑에서 또 만들어야 겠네
  }
 }
 
 Card pick(){
  
  int index = (int)Math.random()*card_num;  // 똑같이 형변환 시켜주고~
  return pick(index);            //리턴값으로 매개변수 한개있는 매서드를 호출 ..왔다갔다 하네..그려~
 }
 
 void shuffle(){    //메서드`
  
  for (int n = 0; n < 1000; n++) {
   int i = (int)(Math.random()*card_num);
   Card t = c[0];               
   c[0] = c[i];                   //이 친구들은 서로 값을 바꾸는것! 자주봤으니 설명은 pass~~!
   c[i] = t;
  }
 }
}

//여기까지 Deck 클래스 끝...Deck 클래스 정말 짜증난다.. 역시 카드는 변수가 너무 많아서 힘들어~~ㅠ


public class DeckTest {

 public static void main(String[] args) {

  //이제 신나게 한번 뽑아서 놀아봅시다!
  Deck d = new Deck();              //Deck 클래스 인스턴스~
  Card c = d.pick(0);                   //젤 위에꺼 일단 뽑아주시고~
  System.out.println(c);
  
  d.shuffle();                             //섞어 주시고~~
  c = d.pick(0);                          //또 젤 위에꺼 뽑아주시고~
  System.out.println(c);
  
 }

}

//아..코드 분석하는 중에 뛰쳐 나갈뻔했다..ㅠ_ㅠ 이 예문은 내일 또 보도록 해야지;;; 헷갈리는것도 많고....

//설명이 틀린것도 있지 않을까 싶다..;

'::::특별한 Java Story' 카테고리의 다른 글

오버라이딩(Overriding)  (0) 2013.06.06
단일상속(single inheritance)  (0) 2013.06.06
상속(inheritance)  (0) 2013.06.06
변수의 초기화  (0) 2013.06.04
클래스메서드(static 메서드) 와 인스턴스메서드  (0) 2013.06.03
Posted by 옆모습오빠
: