TIL-25.12.11

이준연·2025년 12월 11일

학습 키워드

  • Flowchart
  • 코드 실습

Flowchart


코드 실습

package com.example.firsttask;

public abstract class Champion {
    private String name;
    private int level;
    private int hp;
    private int attackDamage;
    private int defense;

    public interface MeleeChampion {
        void dash(Champion target); // 돌진 공격
    }

    public interface RangedChampion {
        void kite(); // 뒤로 빠지면서 공격
    }

    public Champion(String name, int hp, int attackDamage, int defense) {
        this.name = name;
        this.level = 1;
        this.hp = hp;
        this.attackDamage = attackDamage;
        this.defense = defense;
    }

    public String getName() {
        return name;
    }
    public int getLevel() {
        return level;
    }
    public int getHp() {
        return hp;
    }
    public int getAttackDamage() {
        return attackDamage;
    }

    public void takeDamage(int damage) {
        int actualDamage = damage - defense;
        if (actualDamage < 0) {
            actualDamage = 0;
        }
        hp -= actualDamage;
        System.out.println(name + "이(가) " + actualDamage + " 피해를 입음! 남은 체력: " + hp);
    }

    public void basicAttack(Champion target) {
        System.out.println(name + " → " + target.name + " 기본 공격!");
        target.takeDamage(attackDamage);
    }

    public abstract void useQ(Champion target);


}
package com.example.firsttask;

public class Garen extends Champion implements Champion.MeleeChampion {

    public Garen(String name) {
        super(name, 620, 66, 36);
    }
    @Override
    public void dash(Champion target) {
        System.out.println("Garen dash!");
        target.takeDamage(50);
    }

    @Override
    public void useQ(Champion target) {

        System.out.println("Garen이 Q스킬을 사용하였습니다!");
        target.takeDamage(getAttackDamage() + 30);
    }
}
package com.example.firsttask;

public class Ashe extends Champion {

    public Ashe(String name) {
        super(name, 570, 59, 28);
    }

    @Override
    public void useQ(Champion target) {

        System.out.println("Ashe가 Q스킬을 사용하였습니다!");
        target.takeDamage(getAttackDamage() * 2);
    }
}
package com.example.firsttask;

public class Main {
    public static void main(String[] args) {
        Champion ashe = new Ashe("애쉬");
        Champion garen = new Garen("가렌");

        ashe.basicAttack(garen);
        garen.basicAttack(ashe);

        ashe.useQ(garen);
        garen.useQ(ashe);
    }
}

☑️ 추상 클래스

  • 공통 속성 + 공통 행동 + “구현이 다른 행동(추상 메서드)” 제공

☑️ 상속

  • Garen, Ashe는 Champion을 상속받아 기본 기능을 자동으로 물려받음

☑️ 오버라이드

  • 챔피언마다 스킬 Q의 내용이 다르므로 재정의

☑️ 다형성

  • Champion 타입 하나로 여러 챔피언을 처리할 수 있음
  • 실제 호출되는 메서드는 “실제 객체 타입” 기준

☑️ 인터페이스

  • 근거리/원거리 같은 추가 속성을 조합해줄 때 사용
 @Override
    public void levelUp() {
        System.out.println("Garen이 레벨업했습니다!");
        int level = getLevel() + 1;
        int hp= getHp() + 10;
        int attackdamege = getAttackDamage() +10;
        System.out.println("가렌의 레벨이 " + level+ "렙이 되어 hp가 " + hp + "로 증가하고 평타 데미지는 " 
        + attackdamege + "으로 증가하였습니다.");
    }
 public void takeDamage(int damage) {
        int actualDamage = damage - defense;
        if (actualDamage < 0) {
            actualDamage = 0;
        }
        hp -= actualDamage;
        if(hp <= 0) {
            System.out.println(name + " 사망!");
        }
        System.out.println(name + "이(가) " + actualDamage + " 피해를 입음! 남은 체력: " + hp);
    }
profile
반갑습니다!

0개의 댓글