Skip to main content Link Menu Expand (external link) Copy Copied

Abstract classes vs Interfaces

Abstract classes

단독으로 생성될 수 없고 다른 클래스에 상속하기 위한 클래스입니다.
구현되지 않은 추상 메서드와 구현된 메서드를 가질 수 있습니다.
공유할 코드나 구현부를 하위 클래스에 상속해야하는 경우에 사용합니다.
하위 클래스에서 상속받은 구현부를 사용하지 않을 수 있습니다.

Interfaces

인터페이스는 상속받은 하위 클래스가 따라야 할 계약을 정의합니다.
인터페이스를 상속받은 하위 클래스는 상속받은 모든 멤버를 구현해야 합니다.
상속이 깔끔하게 맞아 떨어지지 않는 경우(여러 클래스의 특성을 상속 받아야 하거나, 특정 부모 클래스의 멤버, 필드 및 메서드를 일부만 사용하는 경우)에 유연하게 적용이 가능합니다.

Abstract classes, Interfaces 비교

 Abstract classesInterfaces
멤버필드, 생성자, 구현 메서드메서드 시그니처, 프로퍼티, 이벤트, 인덱서
메서드 구현전체 혹은 일부 구현메서드 구현 불가
Static 멤버가질 수 있음선언하거나 가질 수 없음
생성자사용 가능사용 불가
접근 한정자모든 접근 한정자 사용가능모든 멤버는 암묵적으로 public
상속단일 추상상 클래스 상속만 가능다중 인터페이스 상속 가능

참고 자료 - Level up your code with game programming patterns