💡 클래스 사이의 중간매개 역할까지 담당하는 일종의 추상 클래스
interface
키워드를 통해 인터페이스를 선언합니다.public
, default
를 사용할 수 있습니다.public static final
이어야 하며, 이는 생략할 수 있습니다.public abstract
이어야 하며, 이는 생략할 수 있습니다.extends
키워드를 통해 상속합니다.interface Movable {
void move (int x, int y);
}
interface Attackable {
void attack (int z);
}
interface Fightable extends Movable, Attackable {
void move (int x, int y);
}
implements
키워드를 사용합니다.abstract
를 붙여서 추상 클래스로 선언해야 합니다.class Unit {
int currentHR;
int x;
int y;
}
abstract class FighterAbs implements Fightable {
public void move(int x, int y}
}
class Fighter extends Unit implement Fightable {
public void move(int x, int y) { ... }
public void attack(Fightable f) { ... }
interface I {
public void methodB();
}
class B implements I {
public void methodB() {
System.out.println("methodB from B");
}
}
class C implements I {
public void methodB() {
System.out.println("methodB from C");
}
}
class A {
public void methodA(I i) {
i.methodB();
}
}
public class InterfaceTest {
public static void main(String[] args) {
A a = new A();
a.methodA(new B()); // methodB from B
a.methodA(new C()); // methodB from C
}
}
Client
클래스에서 Shape
인터페이스를 통해 다양한 모양(Shape)을 생성하고 호출할 수 있습니다. 먄약, 새로운 모양을 추가하고 싶다면, Shape
인터페이스를 구현하는 새로운 클래스를 만들면 됩니다.interface Shape {
void draw();
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Circle: draw()");
}
}
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Rectangle: draw()");
}
}
public class Client {
public static void main(String[] args) {
Shape shape1 = new Circle();
shape1.draw(); // Circle: draw()
Shape shape2 = new Rectangle();
shape2.draw(); // Rectangle: draw()
}
}
// Before
interface Calculator {
int add(int a, int b);
}
class BasicCalculator implements Calculator {
@Override
public int add(int a, int b) {
return a + b;
}
}
public class Client {
public static void main(String[] args) {
Calculator calculator = new BasicCalculator();
int result = calculator.add(5, 3);
System.out.println("Result: " + result); // Result: 8
}
}
// After
interface Calculator {
int add(int a, int b, int c);
}
class BasicCalculator implements Calculator {
@Override
public int add(int a, int b, int c) {
return a + b + c;
}
}
public class Client {
public static void main(String[] args) {
Calculator calculator = new BasicCalculator();
int result = calculator.add(5, 3, 8);
System.out.println("Result: " + result); // Result: 16
}
}