Example
[E-Java] This 예시
송기동
2024. 2. 23. 20:06
728x90
package ch07;
public class Person {
// this 란
// 1. 인스턴스(객체) 자신의 메모리를 가리킨다.
// 2. 생성자에서 또 다른 생성자를 호출할 때 사용 가능 하다.
// 3. 자신의 주소(참조값, 주소값) 를 반환 시킬 수 있다.
String name;
int age;
String phone;
String gender;
public Person(String name, int age) {
// 1. 자기 자신을 가리키는 this
this.name = name;
this.age = age;
System.out.println("사용자 정의 생성자 기능 종료 -- 1");
}
public Person(String name, int age, String phone) {
// 2. 생성자에서 다른 생성자를 호출할 때 this를 사용할 수 있다
// ( ) <-- 괄호를 사용한다. tip
// this.name = name;
// this.age = age;
this(name, age);
this.phone = phone;
System.out.println("사용자 정의 생성자 기능 종료 -- 2");
}
public Person(String name, int age, String phone, String gender) {
this(name, age, phone);
System.out.println("사용자 정의 생성자 기능 종료 -- 3");
}
// 3
// this 는 자기 자신을 반환(주소값) 시킬 수 있다.
public Person getPerson() {
return this;
}
} // end of class
package ch07;
public class PersonMainTest {
// 메인 함수
public static void main(String[] args) {
// Person person1 = new Person("홍", 100, "1234");
Person person2 = new Person("강", 100, "1234", "여자");
} // end of main
} // end of class
사용자 정의 생성자 기능 종료 -- 1
사용자 정의 생성자 기능 종료 -- 2
사용자 정의 생성자 기능 종료 -- 3
같은 객체를 가르킨다는건 어떤 의미일까?
package ch07;
public class PersonMainTest2 {
public static void main(String[] args) {
Person person1 = new Person("홍길동", 50);
Person person2 = new Person("이순신", 80);
System.out.println(person1);
System.out.println(person2);
if (person1 == person2) {
System.out.println("주소값이 같습니다.");
} else {
System.out.println("아니요 주소값은 다릅니다");
}
System.out.println("-------------------");
Person person3 = person1;
if (person1 == person3) {
System.out.println("주소값이 같습니다.");
} else {
System.out.println("아니요 주소값은 다릅니다");
}
System.out.println("-------------------");
Person person4 = person1.getPerson();
if (person1 == person4) {
System.out.println("주소값이 같습니다.");
} else {
System.out.println("아니요 주소값은 다릅니다");
}
System.out.println("---------------");
// 레퍼런스(참조변수) 변수는 같은 객체를 가리키고 있다면
// 다른 참소변수에 접근에서 값을 변경하면 실제 객체인 멤버 변경 된다.
person4.name = "티모";
person2.name = "야스오";
System.out.println(person1.name);
System.out.println(person3.name);
System.out.println("----------------");
System.out.println(person2.name);
} // end of main
} // end of class
사용자 정의 생성자 기능 종료 -- 1
사용자 정의 생성자 기능 종료 -- 1
ch07.Person@7c30a502
ch07.Person@49e4cb85
아니요 주소값은 다릅니다
-------------------
주소값이 같습니다.
-------------------
주소값이 같습니다.
---------------
티모
티모
----------------
야스오
배웠던 내용을 활용해 Starcraft 만들어 보기
마린클래스
package com.tencoding.starcraft;
public class Marine {
private String name;
private int power;
private int hp;
public Marine(String name) {
this.name = name;
this.power = 3;
this.hp = 50;
}
// getter 메서드 만들기
public String getName() {
return name;
}
public int getPower() {
return power;
}
public int getHp() {
return hp;
}
// 질럿 공격
public void attackZealot(Zealot targetZealot) {
targetZealot.beAttacked(power);
System.out.println(this.name + " (이)가 " + targetZealot.getName() + "를 공격합니다");
}
// 저글링 공격
public void attackZergling(Zergling targetZergling) {
targetZergling.beAttacked(power);
System.out.println(this.name + " (이)가 " + targetZergling.getName() + "를 공격합니다");
}
// 자신이 공격을 당하다.
public void beAttacked(int power) {
if (this.hp <= 0) {
System.out.println(this.name + " 이미 사망 하였습니다 ");
return; // 실행에 제어권을 반환 한다.
}
this.hp -= power;
}
public void showInfo() {
System.out.println("== 상태 창 == ");
System.out.println("이름 : " + name);
System.out.println("공격력 : " + power);
System.out.println("체력 : " + hp);
}
} // end of class
질럿 클래스
package com.tencoding.starcraft;
public class Zealot {
private String name;
private int power;
private int hp;
public Zealot(String name) {
this.name = name;
this.power = 5;
this.hp = 80;
}
// getter 메서드 만들기
public String getName() {
return name;
}
public int getPower() {
return power;
}
public int getHp() {
return hp;
}
// 마린 공격
public void attackMarine(Marine targetMarine) {
targetMarine.beAttacked(power);
System.out.println(this.name + " (이)가 " + targetMarine.getName() + "를 공격합니다");
}
// 저글링 공격
public void attackZergling(Zergling targetZergling) {
targetZergling.beAttacked(power);
System.out.println(this.name + " (이)가 " + targetZergling.getName() + "를 공격합니다");
}
// 자신이 공격을 당하다.
public void beAttacked(int power) {
if (this.hp <= 0) {
System.out.println(this.name + " 이미 사망 하였습니다 ");
return; // 실행에 제어권을 반환 한다.
}
this.hp -= power;
}
public void showInfo() {
System.out.println("== 상태 창 == ");
System.out.println("이름 : " + name);
System.out.println("공격력 : " + power);
System.out.println("체력 : " + hp);
}
} // end of class
저글링 클래스
package com.tencoding.starcraft;
public class Zergling {
private String name;
private int power;
private int hp;
public Zergling(String name) {
this.name = name;
this.power = 2;
this.hp = 45;
}
// getter 메서드 만들기
public String getName() {
return name;
}
public int getPower() {
return power;
}
public int getHp() {
return hp;
}
// 질럿 공격
public void attackZealot(Zealot targetZealot) {
targetZealot.beAttacked(power);
System.out.println(this.name + " (이)가 " + targetZealot.getName() + "를 공격합니다");
}
// 마린 공격
public void attackMarine(Marine targetMarine) {
targetMarine.beAttacked(power);
System.out.println(this.name + " (이)가 " + targetMarine.getName() + "를 공격합니다");
}
// 자신이 공격을 당하다.
public void beAttacked(int power) {
if (this.hp <= 0) {
System.out.println(this.name + " 이미 사망 하였습니다 ");
return; // 실행에 제어권을 반환 한다.
}
this.hp -= power;
}
public void showInfo() {
System.out.println("== 상태 창 == ");
System.out.println("이름 : " + name);
System.out.println("공격력 : " + power);
System.out.println("체력 : " + hp);
}
} // end of class
결과
package com.tencoding.starcraft;
import java.util.Scanner;
public class StarcraftGame1 {
public static void main(String[] args) {
final int ZEALOT = 1;
final int MARINE = 2;
final int ZERGLING = 3;
final int GAME_END = 4;
Zealot zealot1 = new Zealot("질럿1");
Zealot zealot2 = new Zealot("발업질럿1");
Marine marine1 = new Marine("마린1");
Marine marine2 = new Marine("스팀팩마린1");
Zergling zergling1 = new Zergling("저글링1");
Zergling zergling2 = new Zergling("발업저글링1");
Scanner sc = new Scanner(System.in);
int unitChoice = -1;
// do while 활용하기
do {
System.out.println("유닛을 선택 하세요");
System.out.println("1.질럿\t 2.마린\t 3.저글링\t 4.종료");
unitChoice = sc.nextInt();
if (unitChoice == ZEALOT) {
System.out.println("질럿을 선택하셨습니다.");
zealot1.showInfo();
System.out.println("------------------");
System.out.println("공격할 유닛을 선택하세요");
System.out.println("2.마린 3.저글링");
System.out.println("게임을 종료하고싶으시면 4.를 입력해주세요");
System.out.println("------------------");
int num1 = sc.nextInt();
if (num1 == GAME_END) {
System.out.println("게임을 종료합니다.");
break;
}
System.out.println("몇 회 공격할지 숫자를 입력해주세요");
int num2 = sc.nextInt();
if (num1 == MARINE) {
for (int i = 0; i < num2; i++) {
zealot1.attackMarine(marine1);
}
marine1.showInfo();
} else if (num1 == ZERGLING) {
for (int i = 0; i < num2; i++) {
zealot1.attackZergling(zergling1);
zergling1.showInfo();
}
}
} else if (unitChoice == MARINE) {
System.out.println("마린을 선택하셨습니다.");
marine1.showInfo();
System.out.println("------------------");
System.out.println("공격할 유닛을 선택하세요");
System.out.println("1.질럿 3.저글링");
System.out.println("게임을 종료하고싶으시면 4.를 입력해주세요");
System.out.println("------------------");
int num1 = sc.nextInt();
if (num1 == GAME_END) {
System.out.println("게임을 종료합니다.");
break;
}
System.out.println("몇 회 공격할지 숫자를 입력해주세요");
int num2 = sc.nextInt();
if (num1 == ZEALOT) {
for (int i = 0; i < num2; i++) {
marine1.attackZealot(zealot1);
zealot1.showInfo();
}
} else if (num1 == ZERGLING) {
for (int i = 0; i < num2; i++) {
marine1.attackZergling(zergling1);
zergling1.showInfo();
}
}
} else if (unitChoice == ZERGLING) {
System.out.println("저글링을 선택하셨습니다.");
zealot1.showInfo();
System.out.println("------------------");
System.out.println("공격할 유닛을 선택하세요");
System.out.println("1.질럿 3.저글링");
System.out.println("게임을 종료하고싶으시면 4.를 입력해주세요");
System.out.println("------------------");
int num1 = sc.nextInt();
if (num1 == GAME_END) {
System.out.println("게임을 종료합니다.");
break;
}
System.out.println("몇 회 공격할지 숫자를 입력해주세요");
int num2 = sc.nextInt();
if (num1 == ZEALOT) {
for (int i = 0; i < num2; i++) {
zergling1.attackZealot(zealot1);
zealot1.showInfo();
}
} else if (num1 == MARINE) {
for (int j = 0; j < num1; j++) {
zergling1.attackMarine(marine1);
marine1.showInfo();
}
}
}
} while (unitChoice == GAME_END);
System.out.println("게임을 종료합니다.");
System.out.println("------------------");
} // end of main
} // end of class
728x90