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 |