본문 바로가기
전공살리기/CS

[CS 면접 기본 - 자바] 9. 인터페이스와 추상클래스의 차이가 뭘까?

by 가든이당 2024. 10. 27.
반응형

- 추상 클래스 : abstract로 지시자로 정의되며, 추상메소드가 하나이상 포함 (상속을 위한 것)
 => 강아지와 고양이를 예로 공통점은 짖는다는 특징 : 
 => 차이점은 짖는 소리가 다르다. 
 => 짖는 소리에 대한 정의는 Dog 객체, Cat 객체 다르게 해주어야하기 때문에, 동물이라는 추상클래스를 만들고, 거기에 공통 특징은 일반메소드로 구현하고 
차이점은 추상 메소드로 정의만 한 뒤, 상속 받은 자식 클래스가 구체적인 구현을 맡긴다. 
 
- 인터페이스 : interface 지시자로 정의하며 모든 메소드가 추상메소드로 정의(보장을 위한 것)
인터페이스는 정의만 넣어두고 각 클래스는 그 기능을 구현하도록 강제한다. 다중 상속이 가능하다. interface swim, fly 등 다중으로 상속가능하다. 추상 클래스는 기본 동작을 공유하면서 일부 기능은 구현체에 맡기고, 인터페이스는 각 클래스가 특정 기능을 제공하게끔 규약을 정해주는 역할을 합니다.


면접 답변) 추상클래스를 통해 상속을 받아 부모클래스의 기능을 재활용하기 위해서 사용합니다. 
인터페이스는 함수의 구현을 강제해서 객체들이 모두 같은 동작을 할 수 있다를 보장하는 기능 

 

자바 8이전 이후 차이는 ????

 

인터페이스 기능 의 개선 - default  매소드 정의가 가능해짐. 원래는 추상 매소드만 구현 가능했음 

자바 8이전에는 인터페이스의 경우에는 interface 지시자로 정의하며 모든 메소드가 추상메소드로 정의(보장을 위한 것)하겠지만, java 8 이후에는 정적인 메소드, 디폴트 매소를 정의할 수 있게 되었다.

그러면 추상클래스랑 차이가 없지 않아? 아니야, 여전히 추상 클래스는 코드 재사용을 통한 확장의 목적이고 다중 상속을 지원하지않고, 인터페이스는 다중상속을 지원해, 인터페이스는 클래스들의 동일한 행동 규약의 개념이라 일반적으로는 접근제어자가 public이지만, 추상클래스는 privivate, 등 접근제어자를 다 쓸 수 있어, 

추상클래스는 또 상태관리가 가능해서 상속받은 하위클래스들이  super()등을 사용해서 공통된 상태를 활용하여 동작을 정의하거나 확장할 수 있고, 

인터페이스는 모든 메소드가 실제 데이터로 다뤄져야하기 때문에 상태관리가 불가능하다고 할 수 있습니다.  

 

반응형