본문 바로가기

ComputerScience/Java

[Java] 인터페이스가 다중 상속이 가능한 이유?

왜 클래스는 단일 상속만 가능한데, 인터페이스는 2개 이상 구현이 가능할까요?

 

일단 인터페이스에 대해 간단히 다시 요약해보겠습니다.

인터페이스

클래스가 어떤 메소드를 반드시 구현해야 하는지를 명시하는 역할을 합니다.

클래스는 인터페이스를 구현함으로써 이 인터페이스가 요구하는 메소드들을 모두 정의해야 합니다.

 

인터페이스는 메소드와 상수만을 가질 수 있으며, 이들은 모두 public이어야 합니다.

interface printable{  
	void print();  
}  
class A6 implements printable{  
	public void print(){
    	System.out.println("Hello");
    }  
  
    public static void main(String args[]){  
        A6 obj = new A6();  
        obj.print();  
     }  
}

 

인터페이스 다중 상속

class와 interface 관계도

인터페이스의 다중 상속의 예제는 다음과 같습니다.

interface Printable{  
	void print();  
}  
interface Showable{  
	void show();  
}  
class A7 implements Printable,Showable{  
	public void print(){System.out.println("Hello");}  
	public void show(){System.out.println("Welcome");}  
  
	public static void main(String args[]){  
		A7 obj = new A7();  
		obj.print();  
		obj.show();  
	 }  
}

다이아몬드 문제

이미지 출처: https://journaldev.nyc3.cdn.digitaloceanspaces.com/2013/07/diamond-problem-multiple-inheritance.png

 

 

다른 클래스는 단일 상속만 가능한 이유는 "다이아몬드 문제" 때문입니다.

 

다이아몬드 문제는 두 개 이상의 부모 클래스에서 동일한 메소드를 상속받을 때, 어느 부모 클래스의 메소드를 사용해야 하는지 모호함이 발생하는 문제를 말합니다.

이런 문제를 피하기 위해 Java는 클래스에 대한 단일 상속만을 허용합니다.

그러나 인터페이스는 상태(필드)를 가지지 않으며, 메소드는 선언만 있고 구현이 없습니다.

 

따라서 인터페이스를 통한 "다중 상속"에서는 다이아몬드 문제가 발생하지 않습니다. 인터페이스의 모든 메소드는 구현 클래스에서 명시적으로 구현되어야 하므로, 어떤 메소드를 사용해야 할지에 대한 모호함이 없습니다. 이렇게 인터페이스는 다중 상속의 장점을 가져오면서, 다이아몬드 문제를 피할 수 있게 해줍니다.

interface Printable{  
	void print();  
}  
interface Showable{  
	void print();  
}  
  
class TestInterface3 implements Printable, Showable{  
    public void print(){System.out.println("Hello");}  
    public static void main(String args[]){  
        TestInterface3 obj = new TestInterface3();  
        obj.print();  
     }  
}

위 코드를 보면, Printable과 Showable 모두 print라는 같은 이름의 메소드를 갖고있지만, 구현이 없으므로 어느 인터페이스의 print를 구현했는지는 문제가 되지 않습니다.

참고 자료

https://www.javatpoint.com/interface-in-java

 

Interface in Java - Javatpoint

Interface in Java, why use interface with examples and marker/tagged java interface with difference between abstract class and java interface, understanding relationship between class and interfaces, java interface example,what is marker in java, tagged in

www.javatpoint.com