[JAVA] this 사용법과 스타크래프트 게임 만들기 그리고 CRUD

this가 하는 일



● 인스턴스 자신의 메모리를 가리킴
● 생성자에서 또 다른 생성자를 호출 할때 사용
● 자신의 주소(참조값)을 반환 함

 

public class Person {

String name;

int age;

 

public Person() {

this("이름없음", 1);

}

 

public Person(String name, int age) {

this.name = name;

this.age = age;

}

}


자신의 주소를 반환하는 this

public class Person {

String name;

int age;

 

public Person() {

this("이름없음", 1);

}

 

public Person(String name, int age) {

this.name = name;

this.age = age;

}

 

public Person getPerson() {

return this;

}

 

public static void main(String[] args) {

 

Person p = new Person();

p.name = "James";

p.age = 37;

 

Person p2 = p.getPerson();

System.out.println(p);

System.out.println(p2);

}

}

 

this를 사용한 예제

클래스

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");

}

 

// this는 자기 자신을 반환(주소값) 시킬 수 있다.

public Person getPerson() {

return this;

}

} // end of class

객체

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

사용자 정의 생성자 기능 종료 -- 1

사용자 정의 생성자 기능 종료 -- 2

사용자 정의 생성자 기능 종료 --3

예제2

클래스

public class Company {

 

// 속성, 기능, 생성자, this 3가지 용법을 설계 해주세요

// showInfo() 메서드도 추가해주세요

int age;

String birthmonth;

String zodiac;

 

public Company(){

 

}

 

public Company(int age) {

this.age = age;

System.out.println("1");

}

 

public Company(int age, String birthmonth) {

this(age);

this.birthmonth = birthmonth;

System.out.println("2");

 

}

 

public Company(int age, String birthmonth, String zodiac) {

this(age, birthmonth);

this.zodiac = zodiac;

System.out.println("3");

 

}

 

public Company getCompany() {

return this;

}

 

public void showInfo() {

System.out.println(birthmonth +"의 별자리는 : " + zodiac + " 입니다");

}

} // end of class

객체

package ch07;

 

public class CompanyMainTest {

 

public static void main(String[] args) {

Company do0 = new Company(10);

Company do1 = new Company(10, "9");

Company do2 = new Company(10, "9","Virgo");

do2.showInfo();

 

}

 

}

결과

1

1

2

1

2

3

9의 별자리는 : Virgo 입니다

객체2

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("아니요 주소값은 다릅니다");

}

 

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);

}

 

}

결과

사용자 정의 생성자 기능 종료 -- 1

사용자 정의 생성자 기능 종료 -- 1

ch07.Person@7c30a502

ch07.Person@49e4cb85

아니요 주소값은 다릅니다

----------------------

주소값이 같습니다

주소값이 같습니다

---------------------

티모

티모

-----------------------

야스오

스타크래프트 게임 만들기

클래스

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 scanner = new Scanner(System.in);

int unitChoice = -1;

 

// 반복문을 활용한 코드 실행

// do while 활용하기

boolean flag = true;

do {

System.out.println("유닛을 선택 하세요 ");

System.out.println("1.질럿\t 2.마린\t 3.저글링\t 4.종료");

int at = scanner.nextInt();

if (at == GAME_END) {

System.out.println("게임 종료");

break;

}

System.out.println("공격할 유닛을 선택 하세요 ");

System.out.println("1.질럿\t 2.마린\t 3.저글링\t 4.종료");

int be = scanner.nextInt();

 

if ((at == 1 && be == 1) || (at == 2 && be == 2) || (at == 3 && be == 3)) {

System.out.println("자기 자신을 때릴 수 없습니다");

} else if (at == ZEALOT && be == MARINE) {

zealot1.attackMarine(marine1);

marine1.showInfo();

} else if (at == ZEALOT && be == ZERGLING) {

zealot1.attackZergling(zergling1);

zergling1.showInfo();

} else if (at == MARINE && be == ZEALOT) {

marine1.attackZealot(zealot1);

zealot1.showInfo();

} else if (at == MARINE && be == ZERGLING) {

marine1.attackZergling(zergling1);

zergling1.showInfo();

} else if (at == ZERGLING && be == MARINE) {

zergling1.attackMarine(marine1);

marine1.showInfo();

} else if (at == ZERGLING && be == ZEALOT) {

zergling1.attackZealot(zealot1);

zealot1.showInfo();

} else if (at == GAME_END || be == GAME_END) {

System.out.println("게임 종료");

break;

} else {

System.out.println("잘못 입력하셨습니다");

}

 

if (marine1.getHp() == 0) {

System.out.println("마린 탈락");

} else if (zergling1.getHp() == 0) {

System.out.println("저글링 탈락");

} else if (zealot1.getHp() == 0) {

System.out.println("질럿 탈락");

}

 

if (zealot1.getHp() == 0 && marine1.getHp() == 0) {

System.out.println("저그 승리");

break;

} else if (zealot1.getHp() == 0 && zergling1.getHp() == 0) {

System.out.println("테란 승리");

break;

} else if(marine1.getHp() == 0 && zergling1.getHp() == 0) {

System.out.println("프로토스 승리");

break;

}

 

 

} while (flag);

 

} // end of main

 

}

C R U D 란 무엇일까?


Create - 새로운 데이터를 생성하는 것을 의미합니다
Read - 데이터를 조회하는 것을 의미합니다
Update - 기본의 데이터를 수정하는 것을 의미합니다.
Delete - 기본의 데이터를 삭제하는 것을 의미합니다.

'JAVA' 카테고리의 다른 글

[JAVA] 상속  (0) 2023.08.07
[JAVA] 배열  (0) 2023.08.04
[JAVA] 접근 제어 지시자  (0) 2023.08.01
[JAVA] 생성자를 사용하여 클래스 설계하여 객체 생성  (0) 2023.07.31
[JAVA] 클래스와 객체  (0) 2023.07.28