1. 클래스 상속 (Class Inheritance)
- What is Inheritance?
- 기존 클래스 (부모 혹은 슈퍼)의 속성과 메서드를 새로운 클래스(자식 혹은 서브)가 물려받는 것
- 특징
- 코드 재사용 : 부모 클래스의 속성과 메서드를 자식클래스에서 재사용
- 확장성 : 기능을 확장하거나 override 할 수 있음
- C#에서는 단일 상속만 지원
- 사용 시점
- 공통 기능을 여러 클래스에서 재사용해야할 때
- 기능을 확장하고 싶을 때
2. 추상 클래스 (Abstract Class)
[추상클래스]({{ site.baseurl }}/cs/2024/09/11/abstractclass)
- What is Abstract Class?
- 하나 이상의 추상 메서드를 포함할 수 있는 클래스
- 실체 클래스의 공통적인 부분을 추출해 어느정도 규격을 잡아 놓은 추상적인 클래스
- 인스턴스화 할 수 없으며, 자식 클래스에서 무조건 추상 클래스를 구현해야함.
- 특징
- 추상 메서드 : 자식 클래스에서 반드시 오버라이딩 해야하는 메서드
- 일반 메서드
- 인스턴스화 불가
- 단일 상속
- 사용 시점
- 공통된 기본 기능을 가지면서, 세부적인 구현은 자식 클래스에 따라 다르게 정의해야 할 때.
- 기본 동작을 구현하면서 일부 메서드만 자식 클래스에서 구체적인 구현을 강제하고 싶을 때
3. 인터페이스 (Interface)
- What is Interface
- 메서드와 속성의 규격만 정의하고 실제 구현은 하지 않는 클래스
- 특징
- 구현 없음
- 다중 구현 가능 : 한 클래스에서 여러 인터페이스를 상속 받을 수 있음
- 추상적인 계약 : 인터페이스는 어떤 클래스가 특정 기능을 제공한다는 계약을 명시
- 인스턴스화 불가
- 사용시점
- 클래스간의 공통된 동작을 정의하고 이를 여러 클래스에서 다르게 구현할 때
- 다중 상속이 필요한 경우
- 공통된 기능을 명세할 때
- 어? private 하면 에러가 뜬다고?*
클래스 상속, 추상 클래스, 인터페이스의 차이점 비교
구분 |
클래스 상속 |
추상 클래스 |
인터페이스 |
목적 |
코드 재사용 및 확장 |
기본적인 구현을 제공하면서 일부 기능을 강제 |
기능의 명세(계약)를 정의하고, 다중 구현 허용 |
구현 |
부모 클래스의 구현 상속 |
구현된 메서드와 추상 메서드를 모두 포함할 수 있음 |
구현 없음, 시그니처만 정의 |
다중 상속 |
지원하지 않음 (단일 상속) |
지원하지 않음 (단일 상속) |
다중 구현 가능 |
인스턴스화 |
인스턴스 생성 가능 |
인스턴스 생성 불가 (자식 클래스 통해 생성) |
인스턴스 생성 불가 (구현 클래스 통해 사용) |
사용 시점 |
공통된 기능을 상속받아 재사용할 때 |
공통된 기능을 제공하면서 일부 구현을 강제할 때 |
서로 다른 클래스들이 동일한 기능을 구현해야 할 때 |