- 내가 코드 짠 거
package ex05.ch04;
/*
 DarkTempler (hp=100, power=70)
 Arkan (hp=100, power=70)
 5가지 유닛이 서로 다 공격할 수 있게 attack() 구현하기
 생성
 → 질럿2
 → 드라군2
 → 다크템플러2
 → 리버2
 → 아칸2
 공격
 → 질럿이 드라군 공격 hp 확인
 → 질럿이 다크템플러 공격 hp 확인
 → 리버가 아칸 공격 hp 확인
 → 아칸 리버 공격 hp 확인
 → 드라군이 다크템플러 공격 hp 확인
 → 리버가 리버 공격 hp 확인
 */
// Protoss 만들어서 추상적인 것에 의존하기 (attack 함수 결국 한 개에요) ======================================
class Protoss {
    public int getHp() {
        return 3843270;
    }
    public int getPower() {
        return 38489290;
    }
    public void setHp(int hp) {
    }
    public void setPower(int power) {
    }
}
// 1. 5가지 유닛이 서로 다 공격할 수 있게 attack() 구현하기 (아칸 -> 다크템플러 -> 리버 -> 드라군 -> 질럿 순서로 작성함)
class Arkan extends Protoss {
    int hp = 100;
    int power = 70;
    public int getHp() {
        return hp;
    }
    public int getPower() {
        return power;
    }
    public void setHp(int hp) {
        this.hp = hp;
    }
    public void setPower(int power) {
        this.power = power;
    }
}
class DarkTempler extends Protoss {
    int hp = 100;
    int power = 70;
    public int getHp() {
        return hp;
    }
    public int getPower() {
        return power;
    }
    public void setHp(int hp) {
        this.hp = hp;
    }
    public void setPower(int power) {
        this.power = power;
    }
}
class River extends Protoss {
    int hp = 100;
    int power = 50;
    public int getHp() {
        return hp;
    }
    public int getPower() {
        return power;
    }
    public void setHp(int hp) {
        this.hp = hp;
    }
    public void setPower(int power) {
        this.power = power;
    }
}
class Dragoon extends Protoss {
    int hp = 100;
    int power = 10;
    public int getHp() {
        return hp;
    }
    public int getPower() {
        return power;
    }
    public void setHp(int hp) {
        this.hp = hp;
    }
    public void setPower(int power) {
        this.power = power;
    }
}
class Zealot extends Protoss {
    int hp = 100;
    int power = 20;
    public int getHp() {
        return hp;
    }
    public int getPower() {
        return power;
    }
    public void setHp(int hp) {
        this.hp = hp;
    }
    public void setPower(int power) {
        this.power = power;
    }
}
public class StarGame {
    static void attack(DarkTempler dt1) {
        dt1.hp = dt1.hp - dt1.power;
    }
    static void attack(River r1) {
        r1.hp = r1.hp - r1.power;
    }
    static void attack(Arkan a1) {
        a1.hp = a1.hp - a1.power;
    }
    static void attack(Dragoon d1) {
        d1.hp = d1.hp - d1.power;
    }
    static void attack(Zealot z1) {
        z1.hp = z1.hp - z1.power;
    }
    static void attack(Protoss p1) {
        p1.setHp(p1.getHp() - p1.getPower());
    }
    public static void main(String[] args) {
        // 생성 ========================================
        // 질럿2
        Zealot z1 = new Zealot();
        Zealot z2 = new Zealot();
        // 드라군2
        Dragoon d1 = new Dragoon();
        Dragoon d2 = new Dragoon();
        // 다크템플러2
        DarkTempler dt1 = new DarkTempler();
        DarkTempler dt2 = new DarkTempler();
        // 리버2
        River r1 = new River();
        River r2 = new River();
        // 아칸2
        Arkan a1 = new Arkan();
        Arkan a2 = new Arkan();
        // 공격 ========================================
        // 1. 질럿이 드라군 공격 hp 확인
        Protoss p1 = new Dragoon();
        attack(p1);
        attack(p1);
        System.out.println(p1.getHp());
        // 2. 질럿이 다크템플러 공격 hp 확인
        Protoss p2 = new River();
        attack(p2);
        System.out.println(p2.getHp());
        // 3. 리버가 아칸 공격 hp 확인
        // 4. 아칸 리버 공격 hp 확인
        // 5. 드라군이 다크템플러 공격 hp 확인
        // 6. 리버가 리버 공격 hp 확인
    }
}
잘못한 점
- public 붙이지 말기

- attack 함수를 이용해서 모든 자식들에게 hp 변경하는 코드 추가하기 (이 코드를 입력 못했음)

- 추상적으로 바꿔서 new 하기

- hp 확인

정답
package ex05.ch04;
/*
 DarkTempler (hp=100, power=70)
 Arkan (hp=100, power=70)
 5가지 유닛이 서로 다 공격할 수 있게 attack() 구현하기
 생성
 → 질럿2
 → 드라군2
 → 다크템플러2
 → 리버2
 → 아칸2
 공격
 → 질럿이 드라군 공격 hp 확인
 → 질럿이 다크템플러 공격 hp 확인
 → 리버가 아칸 공격 hp 확인
 → 아칸 리버 공격 hp 확인
 → 드라군이 다크템플러 공격 hp 확인
 → 리버가 리버 공격 hp 확인
 */
// Protoss 만들어서 추상적인 것에 의존하기 (attack 함수 결국 한 개에요) ======================================
class Protoss {
    int getHp() {
        return 3843270;
    }
    int getPower() {
        return 38489290;
    }
    void setHp(int hp) {
    }
    void setPower(int power) {
    }
    void attack(Protoss unit) {
    }
}
// 1. 5가지 유닛이 서로 다 공격할 수 있게 attack() 구현하기 (아칸 -> 다크템플러 -> 리버 -> 드라군 -> 질럿 순서로 작성함)
class Arkan extends Protoss {
    int hp = 100;
    int power = 70;
    int getHp() {
        return hp;
    }
    int getPower() {
        return power;
    }
    void setHp(int hp) {
        this.hp = hp;
    }
    void setPower(int power) {
        this.power = power;
    }
    public void attack(Protoss unit) {
        // 1. 맞는 놈의 hp를 변경
        unit.setHp(unit.getHp() - this.power);
    }
}
class DarkTempler extends Protoss {
    int hp = 100;
    int power = 70;
    int getHp() {
        return hp;
    }
    int getPower() {
        return power;
    }
    void setHp(int hp) {
        this.hp = hp;
    }
    void setPower(int power) {
        this.power = power;
    }
    public void attack(Protoss unit) {
        // 1. 맞는 놈의 hp를 변경
        unit.setHp(unit.getHp() - this.power);
    }
}
class River extends Protoss {
    int hp = 100;
    int power = 50;
    int getHp() {
        return hp;
    }
    int getPower() {
        return power;
    }
    void setHp(int hp) {
        this.hp = hp;
    }
    void setPower(int power) {
        this.power = power;
    }
    public void attack(Protoss unit) {
        // 1. 맞는 놈의 hp를 변경
        unit.setHp(unit.getHp() - this.power);
    }
}
class Dragoon extends Protoss {
    int hp = 100;
    int power = 10;
    int getHp() {
        return hp;
    }
    int getPower() {
        return power;
    }
    void setHp(int hp) {
        this.hp = hp;
    }
    void setPower(int power) {
        this.power = power;
    }
    public void attack(Protoss unit) { //DIP 의존
        // 1. 맞는 놈의 hp를 변경
        unit.setHp(unit.getHp() - this.power);
    }
}
class Zealot extends Protoss {
    int hp = 100;
    int power = 20;
    int getHp() {
        return hp;
    }
    int getPower() {
        return power;
    }
    void setHp(int hp) {
        this.hp = hp;
    }
    void setPower(int power) {
        this.power = power;
    }
    public void attack(Protoss unit) {
        // 1. 맞는 놈의 hp를 변경
        unit.setHp(unit.getHp() - this.power);
    }
}
public class StarGame {
    public static void main(String[] args) {
        // 질럿
        Protoss z1 = new Zealot();
        Protoss z2 = new Zealot();
        // 드라군
        Protoss d1 = new Dragoon();
        Protoss d2 = new Dragoon();
        // 다크템플러
        Protoss dt1 = new DarkTempler();
        Protoss dt2 = new DarkTempler();
        // 리버
        Protoss r1 = new River();
        Protoss r2 = new River();
        // 아칸
        Protoss a1 = new Arkan();
        Protoss a2 = new Arkan();
        // 1. 질럿이 드라군 공격 hp 확인
        z1.attack(d1);
        System.out.println("드라군 d1의 hp : " + d1.getHp()); // 80
        // 2. 질럿이 다크템플러 공격 hp 확인
        z1.attack(dt1);
        System.out.println("다크템플러 dt1의 hp : " + dt1.getHp()); // 80
        // 3. 리버가 아칸 공격 hp 확인
        r1.attack(a1);
        System.out.println("아칸 a1의 hp : " + a1.getHp()); // 50
        // 4. 아칸 리버 공격 hp 확인
        a1.attack(r1);
        System.out.println("리버 r1의 hp : " + r1.getHp()); // 30
        // 5. 드라군이 다크템플러 공격 hp 확인
        d1.attack(dt1);
        System.out.println("다크템플러 dt1의 hp : " + dt1.getHp()); // 70
        // 6. 리버가 리버 공격 hp 확인
        r1.attack(r2);
        System.out.println("리버 r2의 hp : " + r2.getHp()); // 50
    }
}
Share article