Card / CardPack 클래스 구현
/* 1장의 카드를 생성하기 위한 클래스
* - 숫자 : 1(A) ~10 J Q K ( 1~13 )
* - 기호 : ♠,♥,♣,◆
*
* - 한장의 카드를 출력하는 기능 print() => ♥1
* - ex) ◆12 => Q, ♠13 => K , &1 => ♥1 , ♥20 => ♥1
* - 카드를 생성하면 무조건 ♥1
*/
/* 클래스의 구성
* - 멤버변수 : 기호(shape), 숫자(num) => private (getter / setter)
* - 메서드 : print()
* - 생성자 : 기본생성자만 생성 => 카드를 생성하면 무조건 ♥1
*/
public class Card {
private String shape;
private int num;
public Card() { // 기본 생성자
this.shape = "♥";
this.num = 1;
}
public void print() { // 출력메서드
//1~13 1 => A 11 => J 12 => Q 13 => K
//출력 모양 설정
System.out.print(shape);
switch(num) {
case 1 : System.out.println("A");; break;
case 11 : System.out.println("J");; break;
case 12 : System.out.println("Q");; break;
case 13 : System.out.println("K");; break;
default:
System.out.println(num);
break;
}
}
public String getShape() {
return shape;
}
public void setShape(String shape) {
if(shape != "♥" && shape != "♠" && shape != "◆" && shape != "♣" ) {
this.shape = "♥";
this.num = 1;
} else {
this.shape = shape;
}
}
public int getNum() {
return num;
}
public void setNum(int num) {
if(num <= 0 || num >= 14 ) {
this.num = 1;
this.shape = "♥";
} else {
this.num = num;
}
}
}
/* 모든 카드 list
* - 숫자 : 1(A) ~10 J Q K ( 1~13 )
* - 기호 : ♠,♥,♣,◆
* ♠ 1~13 ♥ 1~13 ♣ 1~13 ◆ 1~13 52의 카드 한묶음.
* - 52장의 카드 한묶음 ( 배열생성)
* - 멤버변수 : 카드 한묶음을 저장한 배열
*
* - 카드 출력 - Card class print() 사용
* - 카드 섞는 기능
* - 카드 한장을 빼는 기능 => print
* - 카드 초기화 기능
*/
public class CardPack {
// int arr[] = new int[52]
private Card[] pack = new Card[52];
private int cnt = 0; // 카드의 배열 index 위치를 체크하기 위한 변수
public CardPack() { // 카드팩 생성
// 각 문양마다 13장
String shape = "♥";
for(int i = 1 ; i <= 4 ; i++) {
switch(i) {
case 1: shape = "♥"; break;
case 2: shape = "◆"; break;
case 3: shape = "♠"; break;
case 4: shape = "♣"; break;
} // 문양 4개
for(int j = 1; j <= 13; j++) { // 숫자 13개
Card c = new Card(); // 카드 1장
c.setShape(shape);
c.setNum(j);
pack[cnt] = c;
cnt++;
}
}
}
public void suf() { // 카드 섞기
for(int i = 0; i < pack.length; i++) {
int r = (int)(Math.random()*pack.length);
Card tmp = pack[i];
pack[i] = pack[r];
pack[r] = tmp;
}
}
public Card sub() { // 카드 한장 빼기
if(cnt==0) {
return null;
}
cnt --;
return pack[cnt];
}
public void reCard() {// 카드 초기화
cnt = 0;
String shape = "";
for(int i = 0 ; i <= 3 ; i++) {
switch(i) {
case 0: shape = "♥"; break;
case 1: shape = "♣"; break;
case 2: shape = "◆"; break;
case 3: shape = "♠"; break;
} // 문양 4개
for(int j = 1; j <= 13; j++) {
Card c = new Card(); // 카드 1장
c.setShape(shape);
c.setNum(j);
pack[cnt] = c;
cnt++;
}
}
}
public Card[] getPack() {
return pack;
}
public void setPack(Card[] pack) {
this.pack = pack;
}
public int getCnt() {
return cnt;
}
public void setCnt(int cnt) {
this.cnt = cnt;
}
} // class end
Static
static이 붙은 메서드/멤버변수 클래스 멤버변수/메서드 라고 한다.
- 객체의 생성없이 클래스가 만들어지면 생성
- 객체 없이 클래스 안으로 사용 가능.
- 클래스명.메서드() / 클래스명.멤버변수
- 객체를 생성해서 호출도 가능하지만 그렇게 사용하진않음.
- 클래스의 멤버변수/메서드는 하나의 멤버변수가 모든 객체에 공유(사용)할때 사용
static이 안붙은 메서드/멤버변수는 객체(인스턴스)의 멤버변수/메서드라고 한다.
- 객체의 멤버변수/메서드는 반드시 객체를 통해 사용되고, 생성된다.
- 객체를 만들지 않으면 생성이 안된다.
- 객체명.메서드() / 객체명.멤버변수
- 각 객체마다 독립적인 변수 독립적인 메서드를 생성
클래스 / 객체는 생성 시점이 달라서 메서드를 사용할 수 있는 환경이 다르다.
- 객체의 멤버는 객체가 생성되고, 객체가 생성되고 난 후 사용 할 수 있음.
- 클래스 멤버는 클래스가 생성되면 사용가능.
- 클래스 멤버는 클래스멤버 / 객체의 멤버에서도 모두 사용 될 수 있다.
- 객체의 멤버는 객체에서만 사용 할 수 있다.
메서드 오버로딩
- 동일한 이름의 메서드를 여러개 만드는 케이스
- 리턴타입은 상관없음. 매개변수명도 상관없음.
- 오버로딩 조건
1. 매개변수의 개수가 달라야 한다.
2. 매개의변수의 타입(종류)가 달라야한다
둘 중 하나만 해당해도됨.
가변인자 메서드
- 매개변수의 개수가 고정되어 있지 않는 경우 사용
public static void main(String[] args) {
Method08 m8 = new Method08();
System.out.println(m8.sum(1,2,3,4,5,6));
}
public int sum(int ...num) { // num을 배열처럼 처리
int result = 0;
for(int a : num) {
result += a;
}
return result;
}
}
객체를 생성시 값을 초기화 하는 방법
- 기본값, 명시적 초기값, 초기화블럭, 생성자
1. 기본값 : 기본적으로 지정되는 값. 0 null
2. 명시적 초기값 : 변수를 선언함고 ㅏ동시에 값을 지정하는 방법
3. 초기화 블럭 : { } 멤버변수를 초기화
4. 생성자 : 객체를 생성할 때 초기화 값을 부여해서 생성
초기값의 우선순위
기본값 -> 명시적 초기값 -> 초기화 블럭 -> 생성자 (가장 우선순위가 높다.)