[Java] 인터페이스 vs 추상클래스

이신영·2024년 6월 1일
1

Java

목록 보기
6/11
post-thumbnail

추상클래스(abstract)

  • 하나 이상의 추상 메서드 가지고 있는 클래스
  • 하위 클래스에서 Override 반드시 필요
  • 다중상속 불가능

    다중상속이 불가능한 이유

    어찌보면 클래스는 당연히 다중상속이 안된다. 클래스라는 구조 특성상 그럴수밖에없다.
    무언가가 구현되어있는 클래스가 두개 있고 안에있는 메서드의 이름이 동일할 때 이 둘을 다중상속 받는다면 자식 클래스가 이 메서드를 쓰는 상황이 있다고 가정해본다면,
    JVM 입장에서는 어떤걸 상속받아야 하는지 모른다. 이것을 다이어몬드 문제라고도 함 혹은 메서드의 모호성이 있다고함


인터페이스(interface)

  • 추상 메서드와 상수(static final)만 가지고있는 일종의 추상클래스
  • 접근방식은 public, 메서드는 abstract, 변수는 static final이 디폴트임
  • 상속받는 자식클래스에는 반드시 인터페이스에 있는 메소드를 모두 구현해야함
  • implements하면서 extends가 가능함 = 다중상속 가능
  • 알쓸신잡) ___able 같은 네이밍이 국룰임

얜 왜 다중상속 됨?

이와 동일하게 인터페이스는 당연히 다중상속이 된다. 왜냐면 인터페이스는 어차피 구현체가 없기 때문이다. 뭔말이냐면 어차피 위에서 뭘 extends해도 상관없다는거다. 왜냐면 받은 인터페이스공간에서 구현할거니깐? = 메서드의 모호성이 없음


둘의 공통점?

  • 선언만 있고 구현 내용이 없는 클래스이다.
  • 둘 다 구현내용이 없기 때문에 객체 생성(new)이 안됨 = 인스턴스화 불가능

둘의 차이?

우선 목적이 다르다.

추상 클래스는 기본적으로 클래스 이며 이를 상속, 확장하여 사용하기 위한 것다.

반면 인터페이스는 해당 인터페이스를 구현한 객체들에 대한 동일한 사용방법과 동작을 보장하기 위해 사용한다.


요약하자면

인터페이스는 추상클래스의 일종이고 다중상속을 지원한다. 이는 다형성을 극대화시킬 수 있고 유지보수도 높일 수 있다~

profile
후회하지 않는 사람이 되자 🔥

0개의 댓글