본문 바로가기

자바 수업 정리

수업정리 8일차.

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. 생성자 : 객체를 생성할 때 초기화 값을 부여해서 생성
 초기값의 우선순위
 기본값 -> 명시적 초기값 -> 초기화 블럭 -> 생성자 (가장 우선순위가 높다.)

'자바 수업 정리' 카테고리의 다른 글

수업정리 9일차.  (1) 2024.09.30
자바 설정 관련  (1) 2024.09.25
수업정리 7일차.  (2) 2024.07.23
수업정리 6일차.  (2) 2024.07.22
수업정리 5일차.  (0) 2024.07.19