Abstract 와 Interface의 공통점
- 선언만 가능하고, 직접 구현이 불가능하다.
- new 연산을 할 수 없으며 상속받은 자만이 new 연산이 가능하다.
- 구현이 반드시 필요하다.
Interface
인터페이스는 구현 객체들이 동일한 동작 할 수 있는 것을 보장한다.
- 자바의 다형성을 극대화하여 개발 코드의 수정을 줄이고 프로그램 유지보수성을 높이기 위해 사용한다.
- 밑 그림의 역할을 한다.
- 다중 상속이 가능하다.
장점
- 개발 시간을 단축 할 수 있다.
- 규약만 정해두어 각자의 부분만 따로 나눠서 작성된 코드를 컴파일 할 수 있다.
- 표준화가 가능하다
- 클래스의 기본틀을 제공하여 개발자들에게 정형화된 개발을 강요할 수 있다.
- 서로 관계 없는 클래스들에게 관계를 맺어 줄 수 있다.
- 코드의 종속성을 줄이고 유지보수성을 높인다. 즉 클래스 끼리 쓸데없는 상속을 피할 수 있다.
- 독립적인 프로그래밍이 가능하다.
- 직접적인 관계를 맺지않고 간접적인 방법으로 한 클래스의 변경이 다른 클래스에 영향을 미치지 않는 독립적인 프로그래밍이 가능하다.
Abstract
추상 클래스는 상속을 통해 기능 확장이 목적이다.
- 완성되지 않은 설계도 이다. 즉 상속을 하면서 완성을 해나가는 것이다.
- 하지만 상속을 통해 완성 시켜 나가는 것이 아닌 상속을 통해 공통적인 종속성을 가질 때 사용 할 수도 있다.
- 추상클래스를 상속받은 경우 추상메소드를 반드시 모두 구현해야 한다.
- 하나라도 구현하지 않으면 상속받은 클래스를 추상클래스로 지정해야 한다.
차이점 요약
인터페이스 (HAS - A) | 추상클래스 (IS-A) |
구현 객체가 같은 동작을 하는 것을 보장 | 상속받아 기능을 이용하고 확장한다. |
다중상속이 가능하다. | 다중 상속이 불가능하다. |
상수,추상 메소드만 가능하다.(자바8 이후 default 메소드와 static 메소드가 가능하다) | 일반 메소드,추상 메소드, 일반 변수 선언이 가능하다. |
생성자와,일반 변수를 가질 수 없다. | 생성자와 일반 변수를 가질 수 있다. |
implements | extends |
🔊 JAVA 8 이후 인터페이스 사용
public interface IFS {
// 상수 Immuatable 하다
String ConstantValue = "normal value";
public static final StaticConstantValue = "static value";
// abstract 메소드
(abstarct) void absMethod(String param1, ..);
// default 메소드 (JAVA8에서 가능)
default String defMethod(String param1, ..) {
...
}
// static 메소드 (JAVA8에서 가능)
static void staticMethod(String param1,..) {
...
}
'JAVA' 카테고리의 다른 글
Blocking , NonBolocking (0) | 2021.05.23 |
---|---|
Enum class (0) | 2021.05.17 |
static (0) | 2021.05.04 |
가비지 콜렉터의 종류 (0) | 2021.05.03 |
Garbage Collector (0) | 2021.04.25 |
댓글