

Dart 문법 OOP - 추상Dart/OOP2024. 8. 21. 13:46
Table of Contents
추상 클래스란?
추상(abstract)은 상속이나 인터페이스로 사용하는 데 필요한 속성만 정의하고 인스턴스화할 수 없도록 하는 기능이다.
추상 클래스의 주요 특징:
- 직접 인스턴스화할 수 없다.
- 메서드의 선언만 있고 구현은 없을 수 있다 (추상 메서드).
- 일반 메서드와 추상 메서드를 모두 포함할 수 있다.
- 하위 클래스에서 구현해야 할 메서드를 정의한다.
Dart에서의 추상 클래스 구현
Dart에서 추상 클래스를 만드는 방법을 살펴보겠다.
앞서 사용했던 Idol 클래스를 추상 클래스로 변경해 보겠다:
여기서 주목해야 할 점:
- ① abstract 키워드 사용: 클래스 선언 앞에 abstract 키워드를 붙여 추상 클래스임을 명시한다.
- ② 생성자 정의: 추상 클래스도 생성자를 가질 수 있다. 이는 주로 하위 클래스에서 super 키워드를 통해 호출된다.
- ③④ 추상 메서드: sayName()과 sayMembersCount()는 본문 없이 선언만 되어 있다. 이러한 메서드를 추상 메서드라고 한다.
추상 클래스 구현하기
이제 Idol 추상 클래스를 구현(implements)하는 구체적인 클래스를 만들어 보겠다:
이 GirlGroup 클래스는:
- Idol 추상 클래스의 모든 추상 메서드를 구현해야 한다.
- 하나라도 구현하지 않으면 컴파일 에러가 발생한다.
추상 클래스 사용 예시
추상 클래스의 장점
- 코드 재사용: 공통 기능을 추상 클래스에 정의하여 여러 하위 클래스에서 재사용할 수 있다.
- 다형성: 추상 클래스 타입의 변수로 다양한 하위 클래스 객체를 참조할 수 있다.
- 설계의 유연성: 구체적인 구현을 강제하지 않고 인터페이스만 정의할 수 있다.
- 확장성: 새로운 기능을 추가할 때 기존 코드를 변경하지 않고 새 클래스를 추가할 수 있다.
추상 클래스 vs 인터페이스
Dart에서 추상 클래스와 인터페이스는 매우 유사하지만, 몇 가지 중요한 차이가 있다:
- 구현 포함 여부
- 추상 클래스:
- 추상 메서드와 구체적인 메서드를 모두 포함할 수 있다.
- 일부 메서드에 대한 기본 구현을 제공할 수 있다.
- 인터페이스:
- Dart에는 별도의 interface 키워드가 없다.
- 모든 클래스가 암묵적으로 인터페이스 역할을 할 수 있다.
- 인터페이스로 사용될 때는 모든 메서드가 암묵적으로 추상적으로 간주된다.
- 추상 클래스:
- 생성자를 가질 수 있다.
- 이 생성자는 주로 하위 클래스에서 super 키워드를 통해 호출된다.
- 인터페이스:
- Dart에서 인터페이스로 사용되는 클래스도 생성자를 가질 수 있다.
- 그러나 이 생성자는 인터페이스를 구현하는 클래스에서 직접 호출할 수 없다.
- 추상 클래스:
- Dart는 단일 상속만을 지원한다.
- 한 클래스는 오직 하나의 추상 클래스만을 확장(extends)할 수 있다.
- 인터페이스:
- 한 클래스는 여러 인터페이스를 동시에 구현(implements)할 수 있다.
- 이를 통해 다중 인터페이스 구현이 가능하다.
- 추상 클래스:
예시 코드
이 예시에서:
- Animal은 추상 클래스로, 추상 메서드(makeSound)와 구체적인 메서드(eat)를 모두 가진다.
- Swimmer는 일반 클래스이지만 인터페이스로 사용된다.
- Duck 클래스는 Animal을 상속받고 Swimmer 인터페이스를 구현한다.
'Dart > OOP' 카테고리의 다른 글
Dart 문법 OOP - static (0) | 2024.08.21 |
---|---|
Dart 문법 OOP - 제네릭 (0) | 2024.08.21 |
Dart 문법 OOP - 믹스인 (0) | 2024.08.21 |
Dart 문법 OOP - 인터페이스 (0) | 2024.08.20 |
Dart 문법 OOP - 오버라이드 (0) | 2024.08.20 |

@codeJunH :: codeJunH의 IT 공부 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!