코딩항해기
[실습/JAVA] 동물의 숲 주민 만들기 본문
고양이 주민 1호와, 개구리 주민 레이니와 아이다를 만든다.
모든 주민은 주민을 상속받는다.
주민은 타입과 이름을 가지고, hello()와 action(도구)을 할 수 있다.
타입(고양이, 개구리 등)은 무조건 존재한다. 이름은 주민을 생성할 때 반드시 설정되어야한다.
hello() : 행복함/무난함/슬픔/화남 중에서 1개를 랜덤으로 출력함
action(도구) : 잠자리채, 낚싯대, 삽을 도구로 받아 곤충채집, 생선낚시, 땅파기를 한다.
모든 고양이 주민은 hello() 끝에 ", 야옹"을 붙인다.
모든 개구리 주민은 hello() 끝에 ", 개굴"을 붙인다.
[실습코드]
package class02;
import java.util.Random;
class Citizen {
//필드
String type; //무조건 있음
String name; //주민을 생성할 때, 이름을 반드시 설정하며 만들어야함
static String[] emotion = {"행복하다","무난하다","슬프다","화났다"}; //모두가 갖는 값이므로 static 지정
static Random rand = new Random();
//생성자
Citizen(String type, String name){
this.type=type;
this.name=name;
}
//메소드
//감정을 출력하는 메소드
void hello(){
System.out.println(randEmotion());
}
//감정을 랜덤 지정해주는 메소드
String randEmotion() {
return emotion[rand.nextInt(Citizen.emotion.length)];
}
//입력받은 도구에 따라 액션을 취하는 메소드
void action(String equip) {
String motion;//도구에 따른 행동
if(equip.equals("잠자리채")) {
motion = "곤충채집";
}
else if(equip.equals("낚싯대")) {
motion = "생선낚시";
}
else if(equip.equals("삽")) {
motion = "땅파기";
}
else {
System.out.println(equip+" 도구는 사용할 수 없습니다.");
return;
}
System.out.println(this.name+"(이)가 "+equip+"(으)로 "+motion+"(을)를 합니다.");
}
}
//주민을 상속받는 고양이 클래스
class Cat extends Citizen {
Cat(String name){
super("고양이", name);
}
@Override
void hello() {
System.out.println(randEmotion()+", 야옹~");
}
}
//주민을 상속받는 개구리 클래스
class Frog extends Citizen {
Frog(String name){
super("개구리", name);
}
@Override
void hello() {
System.out.println(randEmotion()+", 개굴~");
}
}
public class Test01 {
public static void main(String[] args) {
Citizen[] datas = new Citizen[3];
datas[0] = new Cat("1호");
datas[1] = new Frog("아이다");
datas[2] = new Frog("레이니");
int cnt = 3;
for(int i=0;i<cnt;i++) {
datas[i].hello();
}
System.out.println();
datas[0].action("나뭇가지");
datas[0].action("잠자리채");
datas[1].action("낚싯대");
datas[2].action("삽");
}
}
String[] emotion = {"행복하다","무난하다","슬프다","화났다"};
Random rand = new Random;
부분을 처음에는 randEmotion에 함께 넣어두었는데, 지도 후 모든 객체가 공통되는 부분이므로 static으로 뺐다.
static부분을 좀 더 고려하면 좋을 것 같다.
(new의 경우 사용될 때마다 heap메모리에 공간이 할당되므로 많이 사용하지 않는 편이 좋다)
'problem solving > 과제&실습 코딩' 카테고리의 다른 글
[실습/JAVA] 캐릭터와 무기 (+풀이 0712) (0) | 2024.07.12 |
---|---|
[실습/JAVA] 포켓몬 프로그램에 추상화, 캡슐화 더하기 (2) | 2024.07.12 |
[실습/JAVA] 모양을 상속받는 원과 사각형 (+풀이 0703) (0) | 2024.07.03 |
[과제/JAVA] 학생부 프로그램에 객체 더하기 (+풀이 0703) (1) | 2024.07.02 |
[실습/JAVA] Car class로 오버로딩 연습 (+풀이 0702) (0) | 2024.07.02 |