/ INTERVIEW

Abstract Class vs Interface

추상클래스

정의: 클래스 구현 내부에 추상메서드가 하나이상 포함되거나, Abstract로 정의된 경우
공통의 자료형이라고 할 수 있는 추상클래스가 가지고 있는 공통 서비스 함수이다. 다만, 공통 서비스이지만 구현이 공통이 아닌 서비스라고 하는 목록이 공통인 것을 의미

  • new 연산자를 사용해 객체를 생성할 수 없다.
  • 추상클래스(부모)와 자식 클래스(자식)의 상속관계에 놓여있다.
  • 새로운 일반 클래스를위한 부모 클래스의 용도로만 사용이 된다.
  • 일반 클래스들의 필드와 메소드를 통일하여 일반 클래스의 작성시 시간 절약이 가능하다.
  • 단일 상속만 가능하다. 일반 변수를 가질 수 없다.
  • 동일한 클래스를 묶는 개념으로 상속받아 기능을 향상시키는 것이 목적이다.

인터페이스

정의: 모든 메서드가 추상 메서드인 경우이다.

  • 인터페이스는 static final 필드만 가질 수 있다. (다만 선언할 때 public *static *final이 생략된 것으로 생각함)
  • static final 필드만 가질 수 있는 이유는 구현 객체가 같은 동작을 보장하기 위한 목적, 인터페이스의 변수는 스스로 초기화 될 권한이 없고, 아무 *인스턴스도 존재하지 않는 시점이기 때문이다.
  • new 연산자를 사용해 객체를 생성할 수 없다.
  • 다중 상속이 가능하다.
  • 구현 객체가 같은 동작을 한다는 것을 보장하는 것이 목적이다.

공통점

  • 추상클래스와 인터페이스 모두 선언은 있지만, 구현은 없다는 것
  • 인스턴스화를 할 수 없다
  • 추상클래스를 extends한 자식들과 인터페이스를 implements하여 구현한 자식들만 객체 생성이 가능하다.

차이점

  • 단일 상속(추상클래스), 다중 상속(인터페이스)
  • 상속을 받아서 기능을 확장시키는 것이 목적(추상클래스)
  • 구현하는 모든 모든 클래스에 대해 특정한 메서드가 반드시 존재하도록 강제하는 역할(구현객체가 같은 동작하여야 한다, 인터페이스)

*

static: 정적변수라고 하며 static이 붙으면 메모리에 딱 한번 할당되어진다. final: 변수의 값이 더이상 변하길 원치 않는다면 붙인다. instance: 클래스를 바탕으로 구현된 구체적인 실체(객체는 구현할 대상)이다.