Java

Java 기초(class)- AWS 풀스택 과정 47일차

awspspgh 2024. 9. 27. 17:59
목차
1. class
2. 느낀 점

 

1. class

▣ Class02

package day02;

public class Class02 {
	// 생성자
	// Car c = new Car();  => 클래스 객체명 = new 생성자();
	// 생성자는 여러 개 만들 수 있음. (생성자 오버로딩)
	// 생성자명은 클래스명과 동일
	// 생성자가 하나도 없는 경우는 기본 생성자를 자동으로 생성 Car()
	// 생성자를 하나라도 생성하면 기본 생성자는 주지 않음.
	// 생성자를 사용자지정으로 생성하려면 기본생성자도 같이 생성해야 함.
	// 생성자 오버로딩 조건 (매개변수 개수가 달라야함 || 매개변수 타입이 달라야 함.)
	// 생성자 호출가능 (생성자 내에서만)
	// this : 내 클래스의 요소라는 것을 나타내는 키워드
	// super : 부모 클래스의 요소라는 것을 나타내는 키워드
	
	public static void main(String[] args) {
		
		Car C = new Car(); // 생성자 호출은 단 1번 객체생성시 가능
		
		C.setName("소나타");
		C.setColor("블랙");
		C.setColor("2024");
		C.printInfo();
		
		C.speedUp();
		C.power();
		C.speedUp();		
		C.power();
		C.speedDown();		
		C.speedDown();
		
		Car c1 = new Car ("BMW");
		c1.printInfo();
		Car c2 = new Car("BMW", "gray");
		c2.printInfo();
		Car c3 = new Car("BMW", "gray", "2024");
		c3.printInfo();
		
	}

}

// Car 클래스 생성
// 멤버변수 : name, color, year, power, speed => private 선언 (getter / setter 생성)
// 소나타(블랙/2024) => 출력 메서드
// power : 시동 상태 나타내는 메서드(true / false)
// speed : 속도 up / down 메서드

class Car{
	private String name; // 필수
	private String color; // 선택
	private String year; // 선택
	private boolean power;
	private int speed;
	
	// 멤버변수 => 생성자 => 메서드 => getter / setter
	// 생성자 위치
	// 객체를 생성할 때 초기값 지정
	// 생성자의 접근제한자는 반드시 public이여야 함.
	// 생성자명은 클래스명과 반드시 같아야 함
	// 생성자는 메서드와 달리 return 타입이 없음
	
	public Car () {} // 기본 생성자~!!
	public Car(String name) { // 이름만 넣는 생성자
		this.name = name;
	}
	public Car(String name, String color) {
		this.name = name;
		this.color = color;
	}
	// 생성자 호출 : 생성자 내에 다른 생성자의 값과 완전히 동일한 값이 있을 경우 사용 가능
	public Car(String name, String color, String year) {
		this(name, color); // 생성자 호출 : 반드시 첫줄에서 호출
//		this.name = name;
//		this.color = color;
		this.year = year;
	}
	// 불가능 : 오버로딩 조건에 충족이 안 됨.
//	public Car(String name, String year) {
//		
//	}
	public Car(String name, String color, String year, boolean power, int speed) {
//		this(name, color, year); 생성자 호출 : 반드시 첫줄에서 호출
		this.name = name;
		this.color = color;
		this.year = year;
		this.power = power;
		this.speed = speed;
	}
	
	public void printInfo() {
		System.out.println(name + "(" + color + "/" + year + ")");
	}
	
	public void print() {
		System.out.println("------------------");
		System.out.println("power:"+ ((power)? "ON" : "OFF"));
		
		if(speed > 0) {
			System.out.println("속도가 0이어야 합니다");
		}else if(!power) {
			System.out.println("시동을 켜주세요.");
		}
		if(speed > 200) {
			speed = 200;
			System.out.println("더 높일 수 없습니다.");
		}else if(speed < 0) {
			speed = 0;
			System.out.println("더 낮일 수 없습니다.");
		}else {
			System.out.println("speed:"+speed);			
		}
	}

	
	public void power() {
		if(speed > 0) {
			print();
		}else {
			this.power = !this.power;			
		}
//		if(this.power == false) {
//			this.power = true;
//			System.out.println("시동이 켜졌습니다.");
//		}else if(this.power == true) {
//			this.power = false;
//			System.out.println("시동이 꺼졌습니다.");
//		}
	}
	
	public void speedUp() {  // 200까지만
		if(power) {
			speed += 10;
		}
		print();
	}
	
	public void speedDown() {  // 0까지만
		if(power){
			speed -= 10;
		}
		print();
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public String getYear() {
		return year;
	}

	public void setYear(String year) {
		this.year = year;
	}

	public boolean isPower() {
		return power;
	}

	public void setPower(boolean power) {
		this.power = power;
	}

	public int getSpeed() {
		return speed;
	}

	public void setSpeed(int speed) {
		this.speed = speed;
	}
}

 

▷ 출력

출력 (1)

 

▣ Class03

package day03;

public class Class03 {

	public static void main(String[] args) {

		// Tv 클래스 생성
		/* 멤버변수 : brand, power, ch, vol
		 * 메서드 :
		 * power()
		 * chUp() / chDown() : 1씩 증가 20까지 있음. 20이 넘어가면 다시 0번으로 돌아오는 순환구조
		 * volUP() / volDown() : 1씩 증가 / 1씩 감소 10까지 있음 10이 넘어가면 10, 0이면 음소거 출력
		 */
		
		// final : 변경할 수 없는 값을 지정. 대문자로 쓰는 것을 원칙으로 함.
		
		Tv T = new Tv();
		
//		T.setBrand("LG");
		T.chUp();
		T.power();
		T.chUp();
		T.chDown();
		T.chDown();
		T.chDown();
		T.chUp();
		T.chUp();
		T.volDown();
		T.volDown();
		T.power();
		

	}
}

	class Tv {
		private final String BRAND = "LG";
		private boolean power;
		private int ch;
		private int vol;
		
		public Tv() {
			this.vol = 1;
		}
		
//		public void brand(String brand) {
//			this.brand = brand;
//		}
//		
//		public void print() {
//			System.out.println(brand);
//		}
		
		public void power() {
			if (this.power) {
				this.power = false;
				System.out.println("TV가 꺼졌습니다.");				
			}else{
				this.power = true;
				System.out.println("TV가 켜졌습니다.");
			}
		}
		
		public void chUp() {
			if (power) {
				ch++;
				if (ch > 20) {
					ch = 0;
				}
				System.out.println("현재 채널은 " + ch + "입니다.");
			}else {
				System.out.println("TV가 꺼져있습니다.");								
			}
		}
		
		public void chDown() {
			if (power) {
				ch--;
				if (ch < 0) {
					ch = 20;
				}				
				System.out.println("현재 채널은 " + ch + "입니다.");
			}else {
				System.out.println("TV가 꺼져있습니다.");								
			}
		}
		
		public void volUp() {
			if (power) {
				vol++;
				if (vol > 10) {
					vol = 10;
					System.out.println("음량의 최대치입니다.");
				}else {
					System.out.println("현재 음량은 " + vol + "입니다.");					
				}
			}
		}
		
		public void volDown() {
			if (power) {
				vol--;
				if (vol < 0) {
					vol = 0;
					System.out.println("음소거입니다.");
				}else {
					System.out.println("현재 음량은 " + vol + "입니다.");					
				}
			}
		}

//		public String getBrand() {
//			return brand;
//		}
//
//		public void setBrand(String brand) {
//			this.brand = brand;
//		}

		public boolean isPower() {
			return power;
		}

		public void setPower(boolean power) {
			this.power = power;
		}

		public int getCh() {
			return ch;
		}

		public void setCh(int ch) {
			this.ch = ch;
		}

		public int getVol() {
			return vol;
		}

		public void setVol(int vol) {
			this.vol = vol;
		}
		
	}

 

▷ 출력

출력 (2)

 

▣ Card

package day03;

/* 1장의 카드를 생성하기 위한 클래스
 * - 숫자 : 1 ~ 13 1(A) 11(J) 12(Q) 13(K)
 * - 모양 : ◆, ♥, ♠, ♣
 * - 한 장의 카드를 출력하는 print() => ♥A ◆3
 * - ♣11 => ♣J / ♣12 => ♣Q / ♣13 => ♣K
 * - #1 => ♥A / #25 => ♥A / ♣15 => ♥A
 */
/* 클래스 구성
 * - 멤버변수 : 모양(shape), 숫자(num) => private getter / setter
 * - 메서드 : print()
 * - 생성자 : 기본생성자만 생성 => ♥A
 * - setShape() / setNum() : 설정할 수 있는 숫자와 모양을 제한
 */

public class Card {
	public char shape;
	public int num;
	
	public Card() {
		this.num = 1;
		this.shape = '♥';
	}

	public char getShape() {
		return shape;
	}

	public void setShape(char shape) {
		switch(shape) {
		case '◆':
			this.shape = shape;
			break;
		case '♥': 
			this.shape = shape;
			break;
		case '♠': 
			this.shape = shape;
			break;
		case '♣':
			this.shape = shape;
			break;
		default:
			this.shape = '♥';
			break;
		}
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		if (num < 1 || num > 13) {
			this.num = 1;
		}else {
			this.num = num;			
		}
	}
	
	public void print() {
		System.out.print(shape);
		switch(num) {
		case 1:
			System.out.print('A');
			break;
		case 11:
			System.out.print('J');
			break;
		case 12:
			System.out.print('Q');
			break;
		case 13:
			System.out.print('K');
			break;
		default:
			System.out.print(num);
			break;
		}
	}

}

 

▣ CardPack

package day03;
/* 카드 한 묶음을 나타내는 클래스
 * ◆, ♥, ♠, ♣
 * ◆1~13, ♥1~13, ♠1~13, ♣1~13
 * 52장의 카드를 담을 수 있는 배열 (카드 한묶음 배열) - 멤버변수
 * 
 * 생성자 - 52장의 카드를 순서대로 생성되게 만들기
 * 메서드 :
 * - 카드 출력기능 : Card class => print() 사용
 * - 카드 초기화 기능 :
 * - 카드 한 장을 나눠주는 기능
 * - 카드를 섞는 기능
 */
public class CardPack {
	private Card pack[] = new Card[52];
	// 카드의 index를 체크하기 위한 변수
	private int cnt = 0;
	
	public CardPack() {
		// 52장의 카드를 생성하여 배열에 넣기
		// num : 1 ~ 13 / shape ◆ ♥ ♠ ♣
		char 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;
			}
			for(int j = 1; j <= 13; j++) {
				Card C = new Card();
				C.setShape(shape);
				C.setNum(j);
				pack[cnt] = C;
				cnt++;
			}
		}
	}
	
	public void shuffle() {
		for(int i = 0; i < pack.length; i++) {
			int random = (int)(Math.random()*pack.length);
			Card tmp = pack[i];
			pack[i] = pack[random];
			pack[random] = tmp;
		}
	}
	
	public Card pick() {
		if(cnt == 0) {
			return null;
		}
		cnt--;
		return pack[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;
	}
	
	
}

 

▣ CardMain

package day03;

public class CardMain {

	public static void main(String[] args) {
		
		Card C = new Card();
		
		C.setShape('◆');
		C.setNum(1);
		C.print();
		System.out.println();
		C.setShape('♥');
		C.setNum(11);
		C.print();
		System.out.println();
		C.setShape('♠');
		C.setNum(12);
		C.print();
		System.out.println();
		C.setShape('♣');
		C.setNum(13);
		C.print();
		System.out.println();
		C.setShape('◆');
		C.setNum(2);
		C.print();
		System.out.println();
		C.setShape('#');
		C.setNum(10);
		C.print();
		System.out.println();
		C.setShape('$');
		C.setNum(14);
		C.print();

		System.out.println();
		System.out.println("--------------------------");

		CardPack cp = new CardPack();
		
		cp.shuffle();
		
		// cp.getPack() : CardPack의 멤버변수 배열 pack[] pack[0] = cp.getPack()[0]
		int cnt = 0;
		for(int i = 1; i <= 4; i++) {           
			for(int j = 1; j <= 13; j++) {
				cp.getPack()[cnt].print();
				cnt++;
			}
			System.out.println();
		}
		
		System.out.println("-----------------");
		System.out.println("딜러가 카드를 나누고 있습니다.");
		Card player1 = cp.pick();
		Card player2 = cp.pick();
		Card player3 = cp.pick();
		Card player4 = cp.pick();
		Card player5 = cp.pick();
		System.out.println("카드를 모두 나누었습니다.");
		System.out.print("player1 : ");
		player1.print();
		System.out.print(" / player2 : ");
		player2.print();
		System.out.print(" / player3 : ");
		player3.print();
		System.out.print(" / player4 : ");
		player4.print();
		System.out.print(" / player5 : ");
		player5.print();
	}

}

 

▷ 출력

출력 (3)

 

▣ Student

package day03;

/* 학생 클래스 생성
 * 멤버변수 : 지점, 이름, 과정, 전화번호
 * 생성자 :
 * - 지점과 이름만 받는 생성자
 * - 지점, 이름, 과정, 전화번호를 받는 생성자 (생성자 호출로 호출)
 * 메서드 : 해당 내용을 출력하는 메서드 print()
 * - getter / setter
 */

public class Student {
	private String gigum = "incheon";
	private String name;
	private String process;
	private String phone;
	
	public Student() {}
	
	public Student(String gigum, String name, String process, String phone) {
		this.gigum = gigum;
		this.name = name;
		this.process = process;
		this.phone = phone;
	}
	
	public void saveInfo(String gigum, String name, String process, String phone) {
		this.gigum = gigum;
		this.name = name;
		this.process = process;
		this.phone = phone;
	}
	
	public void printInfo() {
		 System.out.println("학생 정보");
		 System.out.println(gigum + " | " + name + " | " + process + " | " + phone + " | ");
	}

	public String getGigum() {
		return gigum;
	}

	public void setGigum(String gigum) {
		this.gigum = gigum;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getProcess() {
		return process;
	}

	public void setProcess(String process) {
		this.process = process;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}
}

 

▣ StudentMain

package day03;

public class StudentMain {

	public static void main(String[] args) {
		
		Student S = new Student();
		
		S.saveInfo("인천","홍길동","AWS 풀스택 개발과정","010-XXXX-XXXX");
		S.printInfo();
		
	}

}

 

▷ 출력

출력 (4)

 

2. 느낀 점

카드 팩에서 사용되는 코드 중에서 잘 이해하지 못했던 코드들이 있었다. 특히 카드의 print 함수를 이용해서 카드 팩을 출력하는 코드를 짜기 어려웠던 것 같다. 오늘 배운 카드 팩 코드를 중심으로 복습을 해야겠다.