Abstract와 Interface의 비교

|

1) Prototye만 있고 Body가 없는 메소드 즉 abstract메소드라고 하는데, Abstract 클래스는 abstract메소드와 일반 메소드를 혼용해서, 가질수 있습니다. 즉, 일반메소드 + abstrace메소드 형태를 유지한다는 겁니다.
하지만, interface는 모든 메소드들이 abstract 메소드로 존재 해야 합니다. 소스 1에서 보는봐와 같이 func1(), func2()는 모두 Body(내용) 이 없이 Prototype(선언만) 이 존재합니다.

2) interface와 abstrace클래스를 상속받을때, 상속받는 키워드 가 다릅니다.
abstract클래스는 소스2처럼, extends를 사용하고, interface클래스는 implements 을 사용합니다.

3) 다중상속 가능유무 입니다.
보통 자바에서는 일반 클래스에서는 다중상속을 지원하지 않습니다. 즉 2개이상의 클래스를 상속 받지 못하게 되어 있죠. 하지만, interface의 경우에는 다중상속이 가능합니다.

4) 클래스 시작 키워드가 다르죠.
abstract클래스는 abstract class.. 형태로 시작하고, 인터페이스 클래스는 interface..로 시작합니다.

결국 큰범주에서 보면, abstract method로만 이루어진 abstract class가 interface 인셈이죠




http://blog.naver.com/pramer/30001834840

5.3 Abstract와 Interface의 비교

abstract와 interface는 비슷한 점이 많습니다. interface 자체가 abstract클래스의 의미를 담고 있기 때문에 interface는 abstract메서드의 특징을 그대로 가지고 있습니다. 하지만 interface는 작업의 레벨 분할을 위해서 사용되기 보다는 오히려 공동작업을 위한 인터페이스를 위해서 사용됩니다. 알고 보면 interface가 더 큰 범위를 가지고 있다는 느낌이 들 것입니다. 물론 둘 다 클래스의 설계를 할 때 사용되어지지만 설계의 쓰임새가 다릅니다.

 

단순히 abstract는 추상메서드를 단 하나라도 포함한다면 추상 클래스가 되고 interface는 모든 메서드가 추상 메서드로 이루어져 있다라고 생각한다면 엄청난 오류를 범하게 됩니다. 다음을 차근 차근 따져 보시기 바랍니다.

 

abstract

n        abstract클래스는 클래스이다.

n        추상메서드와 일반 메서드 일반 멤버메서드를 가질 수 있다.

n        상속을 위해서 extends를 사용한다.

n        오직 단일적으로 extends를 사용한다.

n        모든 추상 메서드는 구현하여야 사용할 수 있다.

n        작업의 레벨 분할을 위해서 사용된다.

n        upcasting이 가능하다.

 

interface

n        인터페이스도 클래스의 일종이다. 특히 추상클래스의 일종이다.

n        추상메서드와 static final멤버필드만 가질 수 있다.

n        구현을 위해서 implements를 사용한다.

n        여러 개를 중복하여 implements할 수 있다.

n        모든 추상 메서드를 구현하여야 사용할 수 있다.

n        공동작업을 위한 상호간의 인터페이스를 위해 사용된다.

n        upcasting이 가능하다.

 

 abstract와 interface에 대해서 알아보면서 대부분의 사항은 알아 보았습니다. 하지만 아직 abstract와 interface의 upcasting의 활용이라는 측면은 알아 보지 않았습니다. 이 절에서는 단순히 abstract와 interface를 한번 비교 해 보는 것을 끝내겠습니다. 그리고 다음절에서 진정한 의미의 upcasting에 관해서 알아 보도록 하겠습니다


And