목차 | |
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;
}
}
▷ 출력
▣ 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;
}
}
▷ 출력
▣ 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();
}
}
▷ 출력
▣ 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();
}
}
▷ 출력
2. 느낀 점
카드 팩에서 사용되는 코드 중에서 잘 이해하지 못했던 코드들이 있었다. 특히 카드의 print 함수를 이용해서 카드 팩을 출력하는 코드를 짜기 어려웠던 것 같다. 오늘 배운 카드 팩 코드를 중심으로 복습을 해야겠다.
'Java' 카테고리의 다른 글
Java 기초(interface)- AWS 풀스택 과정 49일차 (4) | 2024.10.02 |
---|---|
Java 기초(extends, abstract)- AWS 풀스택 과정 48일차 (2) | 2024.09.30 |
Java 기초(method)- AWS 풀스택 과정 46일차 (2) | 2024.09.26 |
Java 설정 및 기초- AWS 풀스택 과정 45일차 (4) | 2024.09.25 |
Java 기초(static) - AWS 풀스택 과정 8일차 (0) | 2024.07.24 |