평소에 인터페이스만 사용했기에 딱히 abstract class에 대해서 따로 사용해본적이 없었는데
차이점을 배울 겸 간단하게 적어본다.
추상 클래스 인터페이스
접근 지정자 | 반드시 public이어야 하는 추상 메서드를 제외한 모든 멤버는 private으로도 선언될 수 있다. |
명시하지 않아도 모든 메서드는 public으로 고정이다. 재정의도 반드시 public이어야 한다. |
구현 | 추상 메서드를 제외한 모든 메서드는 구현을 포함할 수 있다. | 구현을 포함할 수 없다. |
속도 | 비교적 빠르다. | 비교적 느리다. 하지만 무시할 수 있는 수준이다. |
인스턴스화 | 할 수 없다. | 할 수 없다. |
필드 | 가질 수 없다. | 가질 수 있다. |
메서드 | 모든 형태의 메서드를 가질 수 있다. | 추상 메서드만 가질 수 있다. abstract 키워드를 포함하진 않는다. |
라고 한다. 차이점이야 찾으면 다 나오는 것이고 대체 어디에 무엇을 쓰는게 효율이 좋을지가 궁금해서 찾아보았다.
추상 클래스:
- 클래스 간의 상속 관계에서 부모 클래스로서의 역할을 할 수 있습니다.
- 상속 받는 자식 클래스에서 공통적인 필드와 메서드를 정의하고, 자식 클래스에서 구체적으로 구현하도록 할 수 있습니다.
- 일반적으로 추상 메서드와 구현된 메서드를 모두 가지고 있습니다.
- 클래스의 일부 기능을 구현해 놓고, 하위 클래스에서 구현을 완성하도록 하는 것이 목적입니다.
- 추상 클래스는 직접 인스턴스화 할 수 없으며, 상속 받아 하위 클래스를 구현해야 합니다.인터페이스:
인터페이스:
- 클래스와 클래스 간의 관계를 설정하는데 사용됩니다.
- 일종의 계약서 역할을 합니다. 어떤 클래스가 특정 인터페이스를 구현한다는 것은, 해당 인터페이스에서 정의된 메서드를 모두 구현했다는 것을 의미합니다.
- 인터페이스는 일반적으로 추상 메서드만을 가지며, 메서드의 몸체는 포함되지 않습니다.
- 다중 상속을 지원하는 언어에서는 여러 인터페이스를 구현할 수 있습니다.
- 인터페이스는 인스턴스화할 수 없으며, 해당 인터페이스를 구현한 클래스의 인스턴스를 생성해 사용합니다.
결론적으로는
추상 클래스 : 상속을 위한 기반 클래스로 사용되고, 따라서 추상 클래스는 하나의 클래스 계층 구조를 정의할 때 사용한다.
인터페이스 : 클래스와의 관계를 설정하기 위한 계약서 역할, 인터페이스는 여러 클래스 간의 관계를 정의할 때 사용
'프로그래밍 언어 > c#' 카테고리의 다른 글
c# yield, nullable, 전처리기, 인덱서, Anonymous, Extension,partial, dynamic (0) | 2023.04.28 |
---|---|
C# 6.0 정리 (1) | 2023.04.24 |
c# Reflection, Attribute (0) | 2023.04.23 |
c# 유니티에서 코루틴(Coroutine)이란 ? (0) | 2023.04.23 |
c# using문은 무엇인가 (0) | 2023.04.23 |