2020-8-25 인터페이스와 추상클래스

인터페이스와 추상클래스

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

  • 추상클래스는 상속을 통해 부모 클래스의 기능을 이용, 확장하기 위해 제공. 다중상속불가
  • 인터페이스는 빈 껍데기로 구현할 메서드를 정의하고 강제. 서브클래스들이 같은 동작을 보장하기 위해 제공 !!!
  • 자바8부터 인터페이스에서 default메서드의 제공으로 둘의 차이가 모호해졌다. 추상클래스를 사용하여 메서드에 대해 엄격한 접근제어자를 사용할때 템플릿 메서드패턴을 강제할 수 있다.
  • 둘다 인스턴스화가 불가능하며, 구현부가 있는 메서드와 없는 메서드 모두 가질 수 있다.
  • 인터페이스의 모든 변수는 public static final이고 모든 메서드는 public abstract인 반면 추상클래스에서는 static, final이 아닌 필드를 정할 수 있고 public, protected, private메서드를 가질 수 있다. 자바9부터는 인터페이스 내부적으로 private 접근제어가를 사용할 수 있다.

Interface

  • 일종의 추상클래스
  • 오직 추상메서드와 상수만을 멤버로 갖는다.
  • Implements키워드를 사용
  • 상속의 관계가 없는 클래스간 서로 공통되는 로직을 구현하여 쓸 수 있다.
  • 접근제어자가 안된다
  • extends는 하나의 클래스만 상속가능하나 interface는 다중상속이 가능하다

Abstract

  • 추상메서드를 하나 이상가진 클래스
  • 자신의 생성자로 생성이 불가능
  • 하위 클래스를 참조하여 상위클래스를 생성
  • 하위 클래스를 제어하기 위해 사용

공통점

  • new 연산으로 인스턴스 생성 불가능
  • 프로토타입만 메서드를 갖는다
  • 사용하기 위해 하위클래스를 확장 또는 구현해야한다.

차이점

  • 사용하는 키워드가 다르다
  • Abstract는 일반 메서드를 사용할 수 있지만, 인터페이스는 메서드 선언만 가능하다

인터페이스를 사용하는 이유

  • 다형성 때문이다. 인터페이스를 사용하면 객체를 외부관점에서 단순화시키고 비슷한 객체를 군집화 시킨다. 사용자 입장에서는 내부로직이나 멤버변수를 신경안쓸 수 있다.
Written on August 25, 2020