오늘은 상호작용 기능을 인터페이스와 추상클래스 중 어떤 것을 선택해야할 지 고민하였다. 이 과정에서 결국 추상 클래스를 선택하긴 했지만,더 명확하게 인터페이스와 추상클래스 선택점을 만들면 좋을 것 같아서 해당 내용에 관해 공부해 보았다.
인터페이스 vs 추상클래스
추상 클래스 | 인터페이스 | |
---|---|---|
사용 키워드 | abstract class |
interface |
사용 가능 변수 | 인스턴스 필드, 정적 필드, 상수 모두 가능 | const (상수만 가능) |
사용 가능 접근 제어자 | 제한 없음 (public , protected , private , internal 등) |
암묵적으로 public (명시적 접근 제어자 사용 불가) |
사용 가능 메서드 | 추상 메서드, 일반 메서드, 정적 메서드 사용 가능 | 추상 메서드, 기본 구현 메서드(default ), 정적 메서드 |
속성 (Property) | 일반 속성 및 추상 속성 모두 가능 | 추상 속성 및 기본 구현 속성만 가능 |
상속 키워드 | : BaseClass |
: IInterface |
다중 상속 가능 여부 | 불가능 | 가능 (여러 인터페이스 구현 가능) |
인스턴스화 가능 여부 | 불가능 (직접 객체 생성 불가) | 불가능 |
사용 목적 | 공통 기능(필드 및 메서드 포함)의 상속 제공 | 특정 행위의 계약(메서드 및 속성 시그니처 제공) |
공통점 | 1. 인스턴스화할 수 없다. 2. 구현 클래스에서 모든 추상 멤버를 반드시 구현해야 한다. 3. 다형성을 지원한다. |
인터페이스&추상클래스 사용처
추상 클래스를 사용하는 경우
- 구현이 필요한 클래스들에서 공통으로 가지는 메서드와 필드가 많아 중복 멤버 통합이 필요할 때
- 멤버에 public 이외의 접근자 (protected, private) 선언이 필요한 경우
- 요구 사항과 함께 구현 세부 정보의 일부만 지정할 때
- 하위 클래스가 오버라이드하여 재정의할 기능을 공유하기 위한 상속 개념을 사용할 때
- 공통점을 추상화하여 상속 계층을 구성해야 할 때
인터페이스를 사용하는 경우
- 애플리케이션의 기능을 정의해야 하지만 구현 방식이나 대상에 대해 추상화할 때
- 다중 상속(구현)을 통한 추상화 설계를 해야 할 때
- 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지는 신경 쓰지 않을 때
- 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용
추상 클래스와 인터페이스 중 어떤 것을 사용하면 좋을까?
구현의 일부를 공유 해야하는 상황이라면 추상 클래스, 행동만 정의하고 구현은 독립적이어야 한다면 인터페이스를 사용하는 것이좋다고 생각한다.경우에 따라서는 추상 클래스와 인터페이스 중 하나를 선택하기보다, 두 가지를 결합하여 사용하는 것이 더 효과적일 수도 있다.
'내일배움캠프' 카테고리의 다른 글
내일배움캠프: RenderTexture를 활용한 UI (2) | 2024.11.29 |
---|---|
내일배움캠프: 상호 작용 오브젝트 베이스 제작 (1) | 2024.11.28 |
내일 배움 캠프: 안 좋은 코드 습관(2) (0) | 2024.11.26 |
내일 배움 캠프: 안 좋은 코드 습관(1) (0) | 2024.11.25 |
내일배움캠프: 유니티 Character Controller (0) | 2024.11.11 |