Frog is cry
인터페이스와 추상클래스의 차이 본문
인터페이스와 추상클래스의 차이를 알아보자 !
설명 :
클래스는 크게 일반 클래스와 추상 클래스로 나뉘는데
추상 클래스는 클래스 내 '추상 메소드'가 하나 이상 포함되거나 abstract로 정의된 경우를 뜻한다.
반면 인터페이스는 모든 메소드가 추상 메소드인 경우입니다. ★★★★★
(JAVA8 에서는 defalt 키워드로 일반 메소드의 구현도 가능)
추상 클래스와 인터페이스는 상속받는 클래스 혹은 구현하는 인터페이스 안에 있는 추상 메소드를 구현하도록 강제한다.
Q&A : 둘 다 추상 메소드를 구현하는 일을 하는데 굳이 왜 둘다 필요한지?
우선 인터페이스와 추상 클래스는 존재 목적이 다름.
1. 추상 클래스는 그 추상 클래스를 상속받아서 기능을 이용하고, 확장시키는데 있음.
2. 인터페이스는 함수의 껍데기만 있으며, 그 이유는 그 함수의 구현을 강제하기 위해서임.
구현을 강제함으로써 구현 객체의 같은 동작을 보장할 수 있기 때문이다.
추상 클래스(abstratc class)의 특징 :
1. 추상 클래스는 new연산자를 사용하여 객체를 생성할 수 없다.
2. 추상 클래스(부모)와 일반클래스(자식)는 상속의 관계에 놓여있다.
3. 추상 클래스는 새로운 일반 클래스를 위한 부모 클래스의 용도로만 사용된다.
4. 일반 클래스들의 필드와 메소드를 통일하여 일반 클래스 작성 시 시간을 절약할수 있다.
5. 추상 클래스는 단일 상속만 가능하며 일반 변수를 가질 수 있다.
6. 추상 클래스는 동일한 부모를 가지는 클래스를 묶는 개념으로 상속을 받아서 기능을 확장시키는것이 목적이다.
인터페이스(interface)의 특징 :
1. 인터페이스는 모든 메서드가 추상 메서드인 경우를 말한다.
2. 인터페이스는 추상 클래스보다 한 단계 더 추상화된 클래스라고 볼 수 있다.
3. 인터페이스에 적는 모든 메서드들은 추상 메서드로 간주되기 때문에 abstract을 적지 않는다.
4. 인터페이스는 static final 필드만 가질 수 있다. 필드를 선언할 때는 public static final 기능이 생략되어있다.
5. public static final을 사용하는 이유는 다음과 같다.
> 구현 객체의 같은 동작을 보장하기 위한 목적(값을 추가하거나 그런것을 불가능하도록)
> 인터페이스의 변수는 스스로 초기화 될 권한이 없음
> 아무 인스턴스도 존재하지 않는 시점이기 때문
6. 인터페이스도 추상 클래스와 마찬가지로 new 연산자를 사용하여 객체를 생성할 수 없다.
7. 인터페이스는 구현 객체가 같은 동작을 한다는 것을 보장하는 것이 목적이다.
8. 인터페이스는 추상 클래스와 반대로 다중 상속이 가능하다.
추상 클래스와 인터페이스의 차이점
1. 추상 클래스(단일상속) / 인터페이스(다중상속)
2. 추상 클래스의 목적은 상속을 받아서 기능을 확장시키는 것
3. 인터페이스의 목적은 구현하는 모든 클래스에 대해 특정한 메서드가 반드시 존재하도록 강제하는 역할
(구현 객체가 같은 동작을 한다는 것을 보장하기 위함)