본문 바로가기

Java

자바 인터페이스 추상클래스 차이점 쓰는 이유

728x90
반응형

자바에서는 추상메서드 형태로 생성해서 하위클래스에서 직접 메소드를 생성하는 추상클래스와 인터페이스가 있습니다.

비교가 많이 되는데 둘의 공통점은 추상메소드를 가지고 있다는 점입니다.

 

좀 더 자세히 알아보도록 하겠습니다.

 

추상클래스 

클래스 내에 추상메소드가 하나 이상 포함되거나 클래스가 abstract로 정의된 경우를 추상클래스라고 합니다.

 

인터페이스

모든 메소드가 추상메소드로 이루어진 경우를 말합니다.

(자바8부터는 default 키워드를 사용해서 일반 메소드 구현도 가능합니다.)

 

추상클래스와 인터페이스를 상속받은 클래스는 추상클래스 혹은 인터페이스에 있는 모든 추상메소드를 구현하도록 강제합니다. 

두 가지 모두 추상메소드 구현을 강제한다면 추상클래스만 있어도 될 것 같은 느낌이 들죠?

그런데, 왜 두 가지가 모두 존재하는 걸까요?

 

이 두 가지는 비슷하게 구현이 되지만 목적이 다릅니다.

추상클래스는 상속을 받아서 기능을 구현하고 확장하는데 목적이 있습니다.

인터페이스는 함수의 구현을 강제하기 위해 존재합니다.

즉, 구현을 강제하면서 구현객체의 같은 동작을 보장할 수 있습니다.

 

가장 명확한 이유는 자바는 다중상속을 지원하지 않습니다.

class myPad extends IPad, GalaxyPad {
   @Override
   public void powerOn() {
       super.powerOn();
   }
}

예를 들어 IPad와 GalaxyPad 모두 powerOn() 메소드를 가지고 있으면 어떤 메소드가 실행될까요?

이런 것이 애매해지기 때문에 자바는 다중상속을 지원하지 않습니다.

 

하지만 인터페이스는 다중 구현을 지원합니다.

class MyWork implements Pad, Laptop {
    @Override
    public void powerOn() {
     ...
    }
}

이런 식으로 여러 클래스를 상속받는 것처럼 구현할 수 있습니다.

이때문에 다중 상속의 문제가 해결된 것처럼 보이기도 하는데요.

 

상속의 경우 super class의 기능을 사용하거나 확장하는 용도로 사용되고 하나만 상속받을 수 있습니다.

인터페이스는 해당 인터페이스를 구현하는 객체들은 모두 동일한 동작을 약속받고 구현합니다.

 

 

728x90
반응형