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