추상 클래스
|
인터페이스
|
||
공통점
|
객체 생성
|
객체를 생성(인스턴스화) 할 수 없다
|
|
추상 메서드
|
추상 메서드를 포함한다
|
||
기능적 목적
|
상속받는 클래스에서는 추상 메서드를 반드시 재정의 하여 구현해야 한다
|
||
차이점
|
개념적 목적
|
상속받아서 기능을 확장 시키는데 목적
|
구현 객체의 동일한 실행 기능을 보장하기 위한 목적
|
클래스
|
abstract class( 클래스 o)
|
interface( 클래스 x)
|
|
일반 메서드
|
일반 메서드 정의가 가능
|
일반 메서드 정의 불가능
(Java8 이후 static, default 메서드 정의 가능)
|
|
멤버 변수
|
클래스와 동일하게 변수 선언 및 사용 가능
|
상수만 사용 가능
|
|
상속 키워드
|
extends
|
implements
|
|
다중 상속
|
불가능 (단일상 속만 가능)
|
가능
|
둘 다 추상 메서드라는 내용에 대한 구현이 없는 선언 부만 가지고 있는 메서드를 가지고 있으며, 독립적으로 객체를 생성할 수 없다는 공통점이 있다
사용하는 목적에 있어서도 추상 클래스나 인터페이스 모두 여러 곳에서 사용될 공통된 기능에 대한 구현을 강제하기 위한 기능을 하고 있다
차이점은?
추상 클래스는 extends(기능 확장의 느낌) 키워드 그대로 자신의 기능들을 하위로 확장시키는 것
인터페이스는 implements(실행하는 기능 구현의 느낌) 키워드처럼 인터페이스에 정의된 메서드를 각 클래스의 목적에 맞게 동일한 기능으로 구현하는 것
추상클래스
class 앞에 'abstract' 키워드를 사용
하나 이상의 추상 메서드를 가지는 클래스
추상 메서드를 선언하여 상속을 통해 하위 클래스에서 구현하도록 강제하는 클래스
- 인스턴스, 즉 객체를 만들 수 없는 클래스 (new 키워드로 객체 생성 불가)
- 추상 클래스는 상속 키워드로 extends를 사용(일반 클래스 상속과 동일)
- 추상 메서드는 (추상 클래스를 상속받는) 하위 클래스에서 메서드의 구현을 강제해야 함(오버라이드 @override)
- 추상 메서드를 포함하는 클래스는 반드시 추상 클래스여야함( 추상 메서드가 하나라도 존재하면 추상 클래스가 되어야 함)
- 다중 상속이 불가능
인터페이스(interface)
'interface' 키워드 사용
추상 메서드와 상수(static final) 만 가지고 있는 것을 인터페이스라고 한다
implaements 하는 (상속받는) 클래스에서 구현하도록 강제한다
- 인터페이스의 모든 멤버 변수는 public static final 이어야 하며, 이를 생략할 수 있음
- 인터페이스의 모든 메서드는 public abstract이어야 하며, 이를 생략할 수 있음
- java8부터는 static, default method를 사용할 수 있음
- 인터페이스 상속 키워드로 implements를 사용
- 다중 상속이 가능
추상 클래스와 인터페이스 언제 사용할까?
추상 클래스는 상속을 하므로 is-a 관계인데에 반해, 인터페이스는 특정 기능이 있음을 나타내는 has-a 관계이다
is-a 관계를 나타내며 코드 재 사용 문제를 해결하려면 추상 클래스를 사용하고, has-a 관계를 나타내며 코드 재 사용이 아난 추상화 문제를 해결하려면 인터페이스를 사용하면 된다.
'CS' 카테고리의 다른 글
[CS] Model1과 Model2 (0) | 2024.05.08 |
---|---|
[CS] N+1 문제 해결 (0) | 2024.05.08 |
[CS] 영속성 컨텍스트 (Persustence Context) (0) | 2024.05.08 |
[CS] ORM(Object Relation Mapping) (0) | 2024.05.08 |
[CS] JDK란? (0) | 2024.05.08 |