본문 바로가기
프로그래밍 기초/JAVA

interface와 abstract class의 차이

by junsday 2016. 10. 26.

클래스는 일반 클래스와 추상 클래스로 나뉘는데 추상 클래스는 본문 중에 '추상 메소드'가 하나 이상 포함되는 경우를 말한다. 인터페이스는 모든 메소드가 추상 메소드인 경우 선언하는 경우가 많다.


추상 메소드라 함은 메소드의 선언부만 있고 본문이 없는 것을 말한다.

예를 들어


abstract public void test( int a ); 


이와 같이 선언만 하고 구현은 자식 클래스에서 하게 되는 방법이다.

{} 부분을 body부분이라고 하는데 body부분에 내용이 없더라도 {}가 존재한다면 추상 메소드가 아니다.

예를 들어


abstract public void test( int a )

{


}


이러한 경우는 추상 메소드가 될 수 없다.


일반 클래스의 경우 상속받은 자식 클래스가 반드시 부모 클래스의 메소드를 '오버라이딩'할 필요가 없지만 추상 클래스를 상속받은 자식 클래스는 반드시 추상 메소드를 오버라이딩해야 한다.


---------------------------------------------------------------------------------------------------------


JAVA는 오로지 단일 상속만을 지원하기 때문에 추상 클래스를 상속받는 클래스는 다른 클래스를 상속받을 수 없다. 그러나 인터페이스를 포함하는 클래스는 다른 클래스를 상속받을 수 있다.


보통 인터페이스를 사용하는 이유로서 다중상속을 통해 벌어지는 문제점을 해결하기 위해서이다.

C++ 언어에서는 다중상속을 문제없이 지원하며 인터페이스라는 개념이 없다.


자바는 상속을 통해 일어나는 생성자와 소멸자, 오버라이딩 등의 문제를 해결하기 위해서 상속을 사용하지 않고 되도록이면 구성(Composition)을 이용하도록 한다. 그리고 공통적인 인터페이스로 특정 지을 수 있는 클래스들은 인터페이스를 구현(implements)함으로서 결함도를 줄일 수 있다.


출처 : http://silverktk.tistory.com/134




추상클래스(abstract class)

- 몸체(body) 없는 메소드를 하나라도 포함하고 있는 클래스

- 몸체 없는 메소드를 포함하고 있지 않더라도 클래스를 선언할 때 abstract 키워드를 포함하고 있는 경우

- 추상 메소드를 포함하고 있지 않으면 abstract 키워드를 이용해서 클래스 자신도 추상 클래스라는 것을 반드시 명시해야 한다.

- 추상 메소드를 포함하고 있지 않더라도 클래스에 abstract 키워드가 있으면 추상클래스이다.

- 반드시 추상메소드만 사용되어지는 것은 아니고, 일반 메소드도 사용할 수 있다.


출처 : http://www.hoons.net/board/asptip/content/23472

'프로그래밍 기초 > JAVA' 카테고리의 다른 글

[Java8] Default Method와 Static method  (1) 2017.06.20
[Java8] 함수형 프로그래밍  (0) 2017.06.20
쿠키와 세션, 캐시  (0) 2016.10.26
서블릿(Servlet)이란?  (0) 2016.10.26

댓글