자바
인터페이스와 다형성
devjones
2020. 10. 14. 20:54
package org.opentutorials.javatutorials.polymorphism;
public class Polymorphism2 {
public static void main(String[] args) {
I obj = new C();
}
}
interface I {
}
class C implements I {
}
C 클래스와 인스턴스의 데이터 타입인 I는 서로 다른다. 이 둘의 관계를 알아보자.
어떤 클래스가 어떤 인터페이스를 구현하고 있다면 그 클래스의 인스턴스는 그 인터페이스일 수 있다는 것이다.
인터페이스가 다형성에 어떻게 기여하고, 인터페이스가 어떻게 클래스가 할 수 없는 일을 할 수 있는지 살펴보자.
package org.opentutorials.javatutorials.polymorphism;
public class PolymorphismDemo3 {
public static void main(String[] args) {
D obj = new D();
I2 objI2 = new D();
I3 objI3 = new D();
obj.A();
obj.B();
objI2.A();
//objI2.B();
//objI3.A();
objI3.B();
}
}
interface I2 {
public String A();
}
interface I3 {
public String B();
}
class D implements I2, I3 {
public String A() {
return "A";
}
public String B() {
return "B";
}
}
결론
어떤 클래스의 데이터 타입으로 어떤 인터페이스를 사용한다는 것은 마치 그 클래스를 그 인터페이스에서 정의한 멤버만을 가진 클래스인 것처럼 사용할 수있다.
어떤 클래스를 사용할 때 해당 클래스가 가진 모든 기능을 사용해야 한다면 당연히 데이터 타입을 그 클래스의 데이터 타입으로 지정해야겠지만 어떤 클래스를 사용할 때 그 클래스가 가진 여러 가지 기능 중에서 특정 인터페이스에 해당하는 기능만 사용한다면 데이터 타입으로 인터페이스를 지정해서 그 인터페이스에서 정의한 멤버를 제외한 나머지는 마치 존재 하지 않는 것처럼 만들어 이 클래스를 사용하는 사람이 신경 쓰지 않게 할 수 있다.