프로그래밍/Java

추상클래스(Abstract) vs 인터페이스(Interface)

jay.den 2019. 9. 11. 17:50
728x90

다형성

  • "여러 형태를 갖는 것"으로 정의
  • 한 변수의 타입과 그 변수가 참조하는 인스턴스의 타입이 정확하게 일치할 필요 없는 성질
  • 다형성은 다형 참조가 가능한데 이는 때에 따라 다른 타입의 객체를 참조할 수 있다는 것
  • 동적바인딩을 통해서

추상클래스:
- 한개 이상의 추상 메소드를 가지고 있는 클래스
- 인스턴스의 생성이 불가능하며, 해당 클래스를 extends 하여 추상 메소드를 구현해야만 사용 가능

인터페이스:
- 메소드에 대한 명세와 상수만 존재
- 상속받은 클래스는 인터페이스에 있는 모든 메소드를 구현해야 함

추상 클래스로 정의된 타입을 구현하는 클래스는 반드시 서브 클래스가 되어야 함
반면에 인터페이스는 인터페이스에 정의된 모든 메소드를 구현하고 인터페이스 구현 계약을 지키면 됩니다.

즉 클래스 상속 계층과는 무관합니다.

추상골격구현 클래스를 통해 두 개념의 장점을 결합할 수 있다.

일반적으로 객체간의 관계를 복잡하게 만들 수 있는 추상클래스 보다는 인터페이스를 쓰는 것이 좋다고 알고 있지만,

그 용도에 따라 사용할 필요가 있다.

자바 8 부터는 인터페이스에도 default 메소드를 가질 수 있어 모호해졌다.

추상 클래스는 구현된 메서드를 포함할 수 있지만 인터페이스는 아니다.

더 중요한 차이는, 추상 클래스가 규정하는 자료형을 구현하기 위해서는 추상 클래스를 반드시 상속받아야 하는 것이다. 인터페이스는 포함된 메서드를 정의하고 인터페이스가 규정하는 일반 규약을 지키기만 하면 되며,

그렇게 만든 클래스는 클래스 계층에 속할 필요가 없다.
자바는 다중 상속을 지원하지 않기 때문에, 추상 클래스를 사용하면 자료형으로 사용하는 데 많은 제약이 생긴다 - Effective Java 규칙19

'프로그래밍 > Java' 카테고리의 다른 글

추상클래스 (Abstract)  (0) 2019.09.11