추상클래스, 인터페이스
추상클래스
-
추상메소드를 단 하나라도 가지고 있는 클래스는, 반드시 추상클래스로 정의해야한다.
-
추상메소드가 하나도 없지만 abstract 키워드를 가지고 있는 클래스
<br/>
<br/>
추상클래스 특징
-
추상클래스는 인스턴스를 생성 할 수 없다.
-
추생클래스를 상속받은 서브클래스는 추상메소드를 구현해야하고, 그렇지 않으면 추상클래스가 된다
<br/>
<br/>
추상클래스 용도
-
그럼 왜 추상클래스를 사용해야 할까??
-
첫째로, 다형성을 지원해준다.<br />
서브클래스는 추상클래스를 상속받아 목적에 맞게 구현하여, 객체지향의 특성이 다형성을 지원한다. -
둘째로, 설계와 구현을 분리해준다. <br />
추상클래스는 설계하고, 서브클래스는 목적에 맞게 구현되어, 설계와 구현을 분리 해준다. -
셋째로, 계층적 상속관계를 가지는 구조를 만들 때 사용한다.<br />
예를들어 사람이라는 추상클래스에 do()라는 추상메소드를 선언하고,<br />
농부, 어부, 개발자는 사람의 추상클래스를 상속받아 do() 메소드를 구현한다.<br />
사람 <- 농부,어부, 개발자 간의 계층적 상속구조를 만들 수 있다.
<br/>
<br/>
<hr />
인터페이스
모든 메소드가 추상메소드이며, 또한 상수만 가지는 것을 말한다.
<br/>
인터페이스 특징
-
인스턴스를 생성 할 수 없다.
-
인터페이스는 다른 인터페이스를 상속할 수 있다.
-
모든 메소드는 public 이며 생략가능하다
-
모든 상수도 public static final이며 생략가능하다.
-
다중상속을 지원한다
<br/>
<br/>
<br/>
<hr />
추상클래스 VS 인터페이스
- 추상클래스
<br/>
<ol style="margin-left:40px">
-
일반 메소드, 변수 포함
-
모든 서브클래스에 공동된 메소드가 있는 경우 추상클래스가 적합
<br/>
<br/>
- 인터페이스
<br/>
<ol style="margin-left:40px">
-
모든 메소드가 추상메소드
-
상수만 가능
-
다중상속 지원
<br/>
<br/>
<br/>
<br/>