프로젝트를 하다보면 함수를 재정의하여 사용해야 하는 경우가 생기곤 한다.
그럴 때 마다 인터페이스를 사용할지 상속을 사용할지 고민이 된다. 왜냐하면
인터페이스와 상속에 대한 확실한 개념을 모르면 그냥 둘이 비슷한 기능을 한다고
생각하기 때문에 확실히 어떠한 점을 기준으로 나누기 힘들기 때문이다.
그리하여 오늘 인터페이스와 추상클래스에 대하여 개념을 숙지하고자 한다.
인터페이스란?
예를 들어 A회사 핸드폰, B회사 핸드폰.. 등 여러 회사의 핸드폰이있다고 가정할 때
모두 핸드폰의 특색은 다르지만 충전포트는 C타입으로 통일해야한다.
여기서 C타입 충전포트를 인터페이스, ~회사 핸드폰을 인터페이스를 상속받는
클래스라고 생각하면 된다. 인터페이스를 상속받는 클래스들은 무조건 인터페이스에
선언된 메소드, 이벤트, 인덱서, 속성을 구현해야만 한다.
추상클래스란?
추상클래스란 상속받은 자식클래스에서 부모클래스의 공통적인 정의를
제공하는 방법이다. 추상메서드와, 일반 메서드가 함께 존재할 수 있다.
인터페이스와 추상클래스의 차이점
접근 지정자
인터페이스는 함수에 대한 접근 지정자를 가질 수 없으며 기본적으로 public 값을 가진다.
추상클래스는 함수에 대한 접근 지정자를 가질 수 있으며 기본적으로 private 값을 가진다.
구현
인터페이스는 함수를 정의만 할 수 있으며 구현은 불가능하다. (추상 메서드만 있다)
-> C# 버전이 올라가면서 디폴트 함수로 구현 가능하지만 되도록이면 쓰지 않는 것을 추천
추상클래스는 함수의 정의와 구현 둘다 가능하다. (비 추상 메서드가 가능하다)
속도
인터페이스는 추상클래스에 비하여 느린 속도를 가지고 있다.
추상 클래스는 인터페이스보다 빠른 속도를 가지고 있다.
인스턴스
인터페이스와 추상클래스 모두 인스턴스화 할 수 없다.
필드
필드란 직접 선언되는 모든 형식의 변수를 말한다.
인터페이스는 필드를 가질 수 없다. 즉 변수를 선언할 수 없다. 하지만 프로퍼티는 가능하다.
추상클래스는 필드와 상수를 정의할 수 있으며 프로퍼티도 가능하다.
상속
인터페이스는 다중 상속을 지원한다.
추상클래스는 다중 상속이 불가능하며 하나의 상속만 가능하다.
결론
클래스에서 구현이 메서드 서명만 공유하는 경우에는 인터페이스가 사용되고
추가로 동일한 동작, 상태를 공유 하는 경우면 추상 클래스가 사용된다.
인터페이스는 주로 적은 양의 클래스를 상속하여 독립적인 기능으로 구현할 때
주로 사용되고 여러 클래스를 상속해야 하는 경우에는 추상 클래스를 사용한다.
왜냐하면 인터페이스는 선언된 모든 것을 무조건 정의 해야만 하는 특징 때문에
수많은 클래스가 인터페이스를 상속받을 경우 정의된 모든 것을억지로 구현해야만
한다.
'TIL > C#' 카테고리의 다른 글
[C#] 메모리 구조에 대한 이해 (0) | 2024.01.29 |
---|---|
[Unity] 디버그를 하는 이유와 방법 (디버깅) (0) | 2023.12.04 |
[C#] 오버로딩과 오버라이딩 (0) | 2023.11.14 |
[C#] 객체지향 (OOP, SOLID) (0) | 2023.11.13 |
[C#] 스택, 힙 메모리란 무엇인가 (0) | 2023.11.10 |