자바

인터페이스와 다형성

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";
	}
}

결론

어떤 클래스의 데이터 타입으로 어떤 인터페이스를 사용한다는 것은 마치 그 클래스를 그 인터페이스에서 정의한 멤버만을 가진 클래스인 것처럼 사용할 수있다.

 

어떤 클래스를 사용할 때 해당 클래스가 가진 모든 기능을 사용해야 한다면 당연히 데이터 타입을 그 클래스의 데이터 타입으로 지정해야겠지만 어떤 클래스를 사용할 때 그 클래스가 가진 여러 가지 기능 중에서 특정 인터페이스에 해당하는 기능만 사용한다면 데이터 타입으로 인터페이스를 지정해서 그 인터페이스에서 정의한 멤버를 제외한 나머지는 마치 존재 하지 않는 것처럼 만들어 이 클래스를 사용하는 사람이 신경 쓰지 않게 할 수 있다.