★국비지원 9일차(객체)★
1. 객체
이번 글에는 수업시간에 배운 객체에 대한 개념을 정리하고, 객체를 생성하여 클래스를 통해 객체를 호출하는 방법을 작성하려고 한다.
public class MyClass01 {
//객체 생성
//객체의 메소드 호출
public String name;
public int age;
public void introduce() {
this.name = "메소드 안에서 만든 이름 ㅎㅋ";//this: 현재 객체 (public string name에 있는 name을 가르키는 거임)
System.out.println("안녕 나는 MyClss01 타입이야");
System.out.println("내 이름은 "+ name);
System.out.println("내 나이는 "+ age);
}
public void myMethod01() {
System.out.println("MyClass01의 mymethod01 호출됨 ...");
}
public void myMethod02() {
System.out.println("MyClass의 myMethod02 호출됨 ...");
}
}
위에서 작성한 this
this: 현재 객체 (public string name에 있는 name을 가르킴
지역변수 vs 필드(==인스턴스변수,전역변수,클래스변수,멤버변수)
-서로 같은 이름을 사용할 수 있다.
-메소드 안에서는 지역변수가 선택된다.
-this.변수명으로 써주면 필드가 선택된다.
import practice.MyClass01;
public class Run {
public Run () {}
public static void main(String[] args) {
System.out.println("Run 클래스의 main 메소드 호출됨...");
System.out.println("=========================");
//객체 생성(MyClass01 클래스 파일을 이용해서 객체 생셩)
MyClass01 mc01 = new MyClass01(); //클래스가 mc01이라는 참조변수의 타입이 될 수 있다. mc01은 main메소드 내부안에 있는 변수이므로 지역변수ok.
//객체의 메소드 호출(MyClss01 클래스 파일의 myMethod01 호출)
mc01.myMethod01(); //.은 해당 객체에 접근하기 위함이다. mc01이라는 참조변수를 통해 .객체를 생성하고 그 주소값이 mc01에 들어가서 mc01(리모콘)을 통해 객체 myMethod에 접근하겠다.
mc01.myMethod02(); //한 객체를 통해 여러가지 메소드를 호출할 수 있다. (myMethod01, myMethod02```)
//객체생성
MyClass01 mc = new MyClass01();
mc.age = 20;
mc.name = "홍길동";
mc.introduce();
}
}
위와 같이 MyClass01클래스 파일의 main메소드를 실행할 Run클래스 파일을 만들어준 다음 각 메소드를 참조변수를 통해 9(.) 호출해주면
Run 클래스의 main 메소드 호출됨...
=========================
MyClass01의 mymethod01 호출됨 ...
MyClass의 myMethod02 호출됨 ...
안녕 나는 MyClss01 타입이야
내 이름은 메소드 안에서 만든 이름 ㅎㅋ
내 나이는 20
이런 결과가 나온다.
.
.
.
.
🚩 객체를 배우면서 알게된 점은
-지역변수는 stack에
-인스턴스변수(멤버변수)는 heap에
-클래스변수(static)은 static에
-클래스내부 -->멤버변수
-메소드내부 -->지역변수 (메소드 실행시 메모리에 생성되었다가 메모리 종료시에 사라진다.)
또, 객체와 인스턴스는 같은 개념이고, 객체는 heap메모리에 할당이 되는 것을 알 수 있다.
2. 객체를 이용한 서비스, 게임 만들기
일주일 전에 제어문을 이용하여 가위바위보 게임과, 업다운 게임을 만들었는데 객체를 이용하여서도 보다 더 복잡한 게임을 간결하게 만들 수 있었다.
(1) up&down 게임
import java.util.Random;
import java.util.Scanner;
public class GameManagerUpDown {
public final String gameName = "업다운";
public void gameStart() {
System.out.println(gameName + " 게임시작 ~~~");
// 컴퓨터가 랜덤 숫자 하나 생각하게 하고
// 정수 하나 받고
// 업다운 얘기해주고
// 틀리면 다시하게 하고
// 맞추면 정답입니다
//랜덤숫자
// int a = (int) ((Math.random()*100) + 1);
int a = new Random().nextInt(50);
// Random randomObject = new Random();
// int r = randomObject .nextInt(50);
//입력
Scanner sc = new Scanner(System.in);
//업다운 판단
while(true) {
int input = sc.nextInt();
if(input > a ) {
System.out.println("다운");
} else if( input < a) {
System.out.println("업");
} else if( input == a ) {
System.out.println("정답입니다.");
} else {
System.out.println("다른 수를 입력해주세요");
}
}
}
}
-
제어문을 통해서 컴퓨터의 랜덤값을 받았을 때는 Math.random함수를 이용하여 double형 값을 직접 형변환을 통해 랜덤값을 받았는데,
-
객체로 만들면,
int a = new Random().nextInt(50);
// Random randomObject = new Random();
// int r = randomObject .nextInt(50); -
이와 같은 객체를 만들어 보다 다른 방법으로 쉽게 랜덤값을 받을 수 있다는 점이 새로웠다.
(2) 가위바위보 게임과 up&down 게임 mix 하기
import java.util.Random;
import java.util.Scanner;
public class GameManagerRcp {
public final String gameName = "가위바위보";
public void gameStart() {
System.out.println(gameName + " 게임 시작 ~~~");
//가위바위보 게임
//컴퓨터 패 선택
int comNum = new Random().nextInt(3) + 1;
String com = "";
switch(comNum) {
case 1 : com = "가위"; break;
case 2 : com = "바위"; break;
case 3 : com = "보"; break;
default : System.out.println("errer !!!");
}
//사용자 입력
Scanner sc = new Scanner(System.in);
String user = sc.nextLine();
System.out.println("com: "+com);
System.out.println("user: "+user);
//판단
//문자열끼리 비교하려면, 문자열.equals(문자열);
if(com.equals("가위")) {
if(user.equals("가위")) {
System.out.println("비김");
}else if(user.equals("바위")) {
System.out.println("사용자 승");
}else {
System.out.println("컴퓨터 승");
}
}
else if(com.equals("바위")) {
if(user.equals("가위")) {
System.out.println("컴퓨터 승");
}else if(user.equals("바위")) {
System.out.println("비김");
}else {
System.out.println("사용자 승");
}
}
}//main
}//class
위 결과를 Run 클래스를 통해 호출하면
public class RunRcp {
public static void main(String[] args) {
GameManagerRcp gm = new GameManagerRcp();
gm.gameStart();
}
}
게임이 잘 작동되는 것을 확인할 수 있다.
(3) 카페 서비스 이용하기
public class CounterEmployee {
//카운터 직원
/*/
* <객체지향>
* -닉네임
* -시급 :시급 9천원
* -주문 받는 기능
* -계산 기능
*
*/
public String nick;
public int money;
public void order() {
System.out.println("주문받기 ~~~");
}
public void calc() {
System.out.println("계산하기 ~~~");
}
}
public class KitchenEmployee {
//주방직원
/*/
* -닉네임
* -시급: 만원
* -음료 제조 기능
* -음료 건내는 기능
*
*
*/
public String nick;
public int money;
public void cook() {
System.out.println("음료제조 ~~~");
}
public void complete() {
System.out.println("음료완성 ~~~");
}
}
Run 클래스를 통해 위 두개의 클래스를 호출해보면,
import cafe.employee.CounterEmployee;
import cafe.employee.KitchenEmployee;
public class Run {
public static void main(String[] args) {
//객체의 메소드 사용
//객체의 데이터 (변수) 접근 가능
System.out.println("cafe open ~~~");
System.out.println("======================");
CounterEmployee ce = new CounterEmployee();
KitchenEmployee ke = new KitchenEmployee();
ce.order();
ce.calc();
ke.cook();
ke.complete();
ce.nick = "홍길동";
ke.nick = "베철수";
System.out.println("카운터 직원 닉네임 : " + ce.nick);
System.out.println("주방 직원 닉네임 : " + ke.nick);
//기본형 자료형의 경우 기본값이 false ,0 ,0.0f 등등이 있지만 참조형 변수는 기본값이 null
//(0은 휴지심만 남아있는 것, null 휴지심조차 없이 아무것도 없는 상태이다.)
}
}
cafe open ~~~
======================
주문받기 ~~~
계산하기 ~~~
음료제조 ~~~
음료완성 ~~~
카운터 직원 닉네임 : 홍길동
주방 직원 닉네임 : 베철수
잘 호출이 되는 것을 알 수 있다.
Author And Source
이 문제에 관하여(★국비지원 9일차(객체)★), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@noome777/국비지원-9일차객체저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)