본문 바로가기
IT/Java

자바 추상(Abstract) 클래스와 인터페이스(interface) 차이

by flatsun 2019. 2. 19.
반응형

추상 클래스와 인터페이스를 각각 알아봤으니

뭐가 다른지 한번 알아보자


1. 추상 클래스는 기능을 확장하는 것이 주 목적, 

인터페이스는 정의한 내용을 구현하는 것이 주 목적


추상 클래스는 추상 메소드 외에도 기존 메소드를 같이 상속시키면서

반드시 구현이 필요한 내용인 추상 메소드를 상속받은 클래스에서 구현시키는 것이 주 목적이고


인터페이스 같은 경우에는

사실 내용도 없고 ~~를 구현해라 하는 껍데기 아닌가


정의한 껍데기들을 implements 받은 곳에서 모두 구현시키고

동일 메소드를 보면 무슨 기능인지 쉽게 알 수 있게 한다



2. 추상 클래스는 하나밖에 상속을 못하나 인터페이스는 여러개 상속이 가능하다



각각 추상 클래스와 인터페이스를 상속받은 경우인데

extends 같은 경우에는 무조건 하나만 상속이 가능하다

, 쓰고 하나 더 상속받으려 하면 상속이 안된다


그러나 인터페이스는 몇개든 implements가 가능하다



3.  추상 클래스는 반드시 구현해야 할 메소드의 앞에 abstract를 써야 하나, 인터페이스는 안 써도 된다



보면 추상 클래스의 경우에는 abstract를 붙이지 않으면

body를 붙여서 concrete method로 만들거나

abstract를 붙이라고 하는데


인터페이스의 경우에는 붙이지 않아도 상관없다


물론 둘 다 body를 구현하면 반드시 구현해야 되는 메소드에서

구현 안해도 되는 메소드로 바뀐다..


4. 인터페이스는 인터페이스고 추상 클래스는 클래스다


추상 클래스와 인터페이스의 차이를

면접에서 자주 물어본다는데


나 같은 SI 경우에는 인터페이스나 추상 클래스나 딱히 쓸 일이 없더라

일단 계속 수정과 변경이 이어지기 때문에


인터페이스나 추상 클래스나 고치면

몇천개의 파일을 다 고쳐야 하는데

그게 말이나 되나..


몇십년 한 사람들한테 물어봐도

딱히 쓰는 경우를 못 봤다


취지는 좋은데

수정을 계속 해야 한다면

좋은 거에서 귀찮은게 되버리는거 아닌가


수정 안하게 완벽하게 짜면 된다고 하지만

그게 더 말이 안된다

반응형

댓글