본문 바로가기
Interview

추상클래스와 인터페이스

by 성건희 2019. 12. 9.
반응형
추상클래스 인터페이스 차이

추상클래스 / 인터페이스 차이

 

추상클래스

추상 메서드를 하나 이상 가지고 있는 클래스

 

인터페이스

추상 메서드의 집합. 하지만 자바 8부터 default 접근 제어자를 허용하면서 인터페이스도 구현이 가능해졌습니다.

왜 인터페이스에서 구현을 가능하게 했을까요?

 

자동차를 만들기 위해 Car 인터페이스를 다음과 같이 선언했습니다

1

그 후 이것을 구현한 아반떼 클래스를 만들었습니다

2

코드는 문제없이 잘 동작했고 시간이 흘러 Car 인터페이스를 상속하여 구현한 자동차 클래스가 100만개 였다고 가정해볼게요

그러다가 Car가 출발할 수 있도록 start() 추상 메서드를 만들어 달라는 요구사항이 들어왔습니다.

바로 만들어 줍시다

4

그후 인터페이스를 implements 받은 클래스들을 구현하려고 생각해보니..

3

100만개의 클래스가 컴파일 에러가 나네요.. 출발하는 기능이 동일한데 일일히 중복된 코드 100만개를 클래스마다 넣어야 할까요???

이러한 문제를 해결하기 위해 등장한 것이 default 접근 제어자입니다.

5

만약 다르게 출발하는 자동차가 있다면 start() 메서드를 재정의 하면 됩니다.

 

공통점

추상 메서드를 선언하고 구현을 자식클래스에 강제한다.

인스턴스화 불가능

 

차이점

디폴트 메서드가 생기면서 추상 클래스와의 차이점이 모호하다 라는 궁금증이 생길 수 있는데요.

인터페이스의 변수는 기본적으로 public static final 이며, 메서드는 public abstract 인 반면, 추상클래스는 static이나 final이 아닌 필드를 지정할 수 있고 public, protected, private 메서드를 가질 수 있습니다.

인터페이스는 생성자를 가질 수 없지만 추상클래스는 생성자를 가질 수 있습니다.

또한 인터페이스는 다중 상속을 허용하지만 추상클래스는 다중 상속을 허용하지 않습니다.

 

언제 추상클래스, 인터페이스를 사용해야 할까

추상 클래스

  • 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우
  • 추상클래스를 상속받은 클래스들이 공통적으로 가지는 메소드와 필드가 많거나, pubilc 이외의 접근 제어자 사용이 필요한 경우
  • non-static, non-final 필드 선언이 필요한 경우. 즉, 각 인스턴스에서 state 변경을 위한 메서드를 선언할 수 있다

 

인터페이스

  • 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우에 사용. 예를 들어, Comparable 인터페이스는 여러 클래스들에서 구현되는데, 구현 클래스간의 관련성이 없는 경우가 대부분임.
  • 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지 신경쓰지 않는 경우
  • 다중상속을 허용하고 싶은 경우

 

참고

https://yaboong.github.io/java/2018/09/25/interface-vs-abstract-in-java8/

반응형

'Interview' 카테고리의 다른 글

트랜잭션  (0) 2019.12.10
객체 지향이란?  (3) 2019.06.20

댓글