본문 바로가기

Dev-/Java

인터페이스, 추상 클래스의 차이

클래스인터페이스의 차이, 

즉, 상속구현의 차이는 비교적 명확하다고 생각합니다.


대략, 아래처럼 숙지하고 있었습니다.


상속: 기존의 것을 재사용하여 코드의 중복을 줄인다. 개발시간을 줄인다.

구현: 설계 지침을 따른다. (인터페이스는 다중 상속이 가능하다.)


---------------------------------------------------------------------------------------



그러다 문득,

추상 클래스인터페이스의 구별이 모호해 한번 알아보았습니다.


우선 정의만 본다면, 이 둘은 설계 지침서에 가깝습니다.


메서드를 명시만 하고, 실제 구현내용이 없으며

그것을 상속, 구현하는 클래스에게 구현을 강제합니다.



여기서 중요한 점이 있는데,

일반 클래스가 하나라도 추상 메서드를 가진다면 그 클래스는 추상 클래스가 됩니다.

바꿔 말하면, 추상 클래스인터페이스와 다르게 구현된(내용이 있는) 메서드를 가질 수 있습니다.


---------------------------------------------------------------------------------------



결론적으로는,


기존의 어떤 클래스가 존재할 때, 자식 클래스가 필수적으로 구현해야 할 것이 있다면

추상 메서드를 추가해 줌에 따라 자연히 상 클래스변경되는 것이고,


조금 더 본질적으로 설계 지침서에 가까운 것인터페이스라고 생각하시면 될 것 같습니다.


(추가로, 인터페이스를 사용하게 되면, 소스 코드를 변경하지 않고

구현 객체만 변경하더라도 다형성을 구현할 수 있다는 장점이 있습니다.)






참고)

그리고 인터페이스에서도 구현된 메서드를 가질 수가 있습니다.


이미 구현된 인터페이스새로운 메서드를 추가해야 하는데,

구현 클래스를 다룰 수 없을 경우, 추가한 추상 메서드재정의하지 못해 문제가 발생합니다.

이도저도 못하는 상황이 되어버리죠.


이런 경우, 

강제성이 없고, 구현된 메서드인 디폴트 메서드를 따로 추가해 주어 해결이 가능합니다.


강제성이 없어 이미 구현된 클래스에서도 문제가 발생하지 않고,

새롭게 구현한 클래스에서 디폴트 메서드그대로 사용하거나, 재정의해서 사용할 수 있는 것이죠.



'Dev- > Java' 카테고리의 다른 글

프로세스, 스레드  (0) 2018.08.22
Java equals(), hashCode()의 차이  (0) 2018.08.22
Getter, Setter를 사용하는 이유  (3) 2018.08.21
Java 용어 정리  (0) 2018.08.21
Java 작동 원리, 특징  (0) 2018.08.21