추상클래스와 인터페이스



클래스는 보통 일반 클래스와 추상 클래스로 나뉜다.

추상 클래스는 클래스 안에 추상 메소드가 하나 이상 포함되거나

abstract로 정의된 경우이다. 인터페이스는 모든 메소드가

추상 메소드인 경우이다. 추상 클래스와 인터페이스의 차이는

명확하다. 구조, 사용법 등이 다르다. 하지만 하는 일은 비슷하다.


"추상 클래스와 인터페이스는 상속받는 클래스 또는 구현하는 인터페이스 안에

있는 추상 메소드를 구현하도록 강제한다."


라고 하는데 한번 읽어 본다면 "추상 메소드를 구현하는것" 이라고만

생각될 수 있다. 그럼, 추상 클래스 하나만 존재를 해야하고

추상 클래스 안에 추상 메소드를 여러개를 만들거나 전부 추상 메소드로만 두면

될 것인데 왜 인터페이스가 존재하는 것일까?


이것은 인터페이스와 추상 클래스의 존재 목적이 다르기 때문이다.

추상 클래스는 그 추상 클래스를 상속 받아서 기능을 이용하고

확장 시키는데 있다고 한다. 반면 인터페이스는 함수의 껍데기만 있는데

이유는 해당 함수의 구현을 강제하기 위해서 라고한다.

구현을 강제하면 구현 객체의 같은 동작을 보장할 수 있다.



1
2
3
4
5
6
class Test extends aaa, bbb {
@Override
    public void main() {
        super.action();
    }
}
cs


위 소스에서 aaa, bbb 클래스가 모두 action() 이라는 메소드를

가지고 있다면 어떤 메소드가 실행될지 모른다.


이것이 자바의 다중 상속의 모호성 이라고 한다.

자바는 그래서 다중 상속을 하지 못하게 했다.


하지만 인터페이스는 여러 개의 인터페이스를 구현할 수 있다.



1
2
3
4
5
6
class Test implements aaa, bbb
@Override
    public void action(){
    
    }
}
cs

여러 개를 상속받은 것처럼 보이지만 상속받은 것이 아니다.
상속은 상위클래스의 기능을 이용하거나 확장하기 위해 사용되지만
다중 상속은 사용할 수 없다. 모호성 때문에

인터페이스는 해당 인터페이스를 구현(implements)한 객체들에
대해서 동일한 동작을 약속하기 위해 존재한다.

그래서 누군가 또는 면접 질문으로 "추상 클래스와 인터페이스의 차이가 뭡니까?"
라고 질문을 받으면 외형차이 뿐만 아니라 상속이라는 개념과 다형성의 개념을 사용해
내형의 차이도 설명해야한다.


'JAVA' 카테고리의 다른 글

문자열에서 부분 문자열 검색하기!!  (0) 2018.10.06
String , 객체 equals 비교  (0) 2018.09.28
자바 스크립트와 제이쿼리 속도 비교하기  (0) 2018.09.14
CamelCase? 카멜케이스?  (0) 2018.06.17
JAVA - split() 사용하기  (0) 2018.04.25

댓글

Designed by JB FACTORY