인터페이스의 장점
- 두 대상(객체) 간의 '연결, 대화, 소통'을 돕는 '중간 역할'을 한다.
- 선언(설계)와 구현을 분리시킬 수 있게 한다.
- 껍데기 역할
class B {
public void method() {
System.out.println("methodInB");
}
}
interface I {
public void method() {
System.out.println("methodInB");
}
}
- 알맹이 (구현부)
- 껍데기와 알맹이를 분리함으로써 유연O, 변경에 유리 (다른 class가 들어올 수 있거나 다른 내용이 들어올 수 있거나 등..)
class B implements I {
public void method() {
System.out.println("methodInB");
}
}
직접적인 관계의 클래스, 간접적인 관계의 클래스 비교
class A {
public void methodA(B b) {
b.methodB();
}
}
class B {
public void methodB() {
System.out.println("methodInB()");
}
}
class interfaceTest {
public static void main(String args[]) {
A a = new A();
a.methodA(new B());
}
}
class A {
public void methodA(I i) {
i.methodB();
}
}
interface I { void methodB(); }
class B implements I {
public void methodB() {
System.out.println("methodInB()");
}
}
class C implements I {
public void methodB() {
System.out.println("methodInB() in C");
}
}
실습
class A {
public void method(I i) {
i.method();
}
}
interface I {
public void method();
}
class B implements I {
public void method() {
System.out.println("B클래스의 메서드");
}
}
class C implements I {
public void method() {
System.out.println("C클래스의 메서드");
}
}
public class InterfaceTest {
public static void main(String[] args) {
A a = new A();
a.method(new B());
a.method(new C());
}
}