인터페이스

문제 1: 기본적인 인터페이스 구현

public class Main {
    public static void main(String[] args) {
        Printer printer = new ConsolePrinter();
        printer.print("Hello World!");
    }
}
public class ConsolePrinter implements Printer {
    @Override
    public void print(String message) {
        System.out.println(message);
    }
}
public interface Printer {
    void print(String message);
}

문제 2: 다중 구현 연습

public class Main {
    public static void main(String[] args) {
        GameObject obj = new GameObject();
        obj.move(2, -5);
        obj.draw();
    }
}
public interface Drawable {
    void draw();
}
public interface Movable {
    void move(int x, int y);
}
public class GameObject implements Movable, Drawable {
    int x;
    int y;

    @Override
    public void move(int x, int y) {
        this.x += x;
        this.y += y;
    }

    @Override
    public void draw() {
        System.out.println("객체가 (" + x + ", " + y + ") 에 그려졌습니다.");
    }
}

문제 3: 인터페이스를 통한 기능 확장

public class AdvancedCalculator implements Calculator, Multiplicable {
    @Override
    public int add(int a, int b) {
        return a + b;
    }

    @Override
    public int subtract(int a, int b) {
        return a - b;
    }

    @Override
    public int multiply(int a, int b) {
        return a * b;
    }
}
public class BasicCalculator implements Calculator {
    @Override
    public int add(int a, int b) {
        return a + b;
    }

    @Override
    public int subtract(int a, int b) {
        return a - b;
    }
}
public interface Calculator {
    int add(int a, int b);

    int subtract(int a, int b);
}
public interface Multiplicable {
    int multiply(int a, int b);
}

문제 4: 인터페이스를 이용한 전략 교체 (Strategy Pattern 맛보기)

public class Main {
    public static void main(String[] args) {
        Character character = new Character();
        character.setAttackStrategy(new BowAttack());
        character.performAttack();
        character.setAttackStrategy(new SwordAttack());
        character.performAttack();
    }
}
public interface Attackable {
    void attack();
}