클래스간의 관계(포함관계) has-a
::::특별한 Java Story 2013. 6. 6. 18:11 |/*내용을 복사 한 후 이클립스에서
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 |