본문 바로가기
Dart/Dart Programming language

[중급] Dart 클래스 심화/ 추상 클래스와 인터페이스 이해하기

by Maccrey Coding 2024. 9. 6.
반응형

 

Dart는 객체 지향 프로그래밍 언어로, 추상 클래스와 인터페이스를 통해 코드의 구조를 보다 명확하고 유연하게 설계할 수 있습니다.

이 글에서는 Dart에서 추상 클래스와 인터페이스의 개념을 설명하고, 이를 활용하여 코드의 재사용성과 유지보수성을 높이는 방법을 알아보겠습니다.

1. 추상 클래스

1.1 추상 클래스란?

추상 클래스는 직접 인스턴스를 생성할 수 없는 클래스입니다. 추상 클래스는 공통된 속성과 메서드를 정의하여 다른 클래스들이 이를 상속받아 구체적인 구현을 제공하도록 합니다.

추상 클래스는 일부 메서드에 대한 구현을 제공할 수도 있지만, 일반적으로 메서드 시그니처만 정의하고, 구체적인 구현은 자식 클래스에서 제공합니다.

1.2 추상 클래스 정의 및 사용

Dart에서 추상 클래스는 abstract 키워드를 사용하여 정의합니다. 추상 메서드는 구현이 없는 메서드를 의미합니다.

abstract class Animal {
  void eat(); // 추상 메서드
  void sleep() {
    print('Sleeping');
  }
}

class Dog extends Animal {
  @override
  void eat() {
    print('Dog is eating');
  }
}

void main() {
  Dog dog = Dog();
  dog.eat();   // Dog is eating
  dog.sleep(); // Sleeping
}

위 예제에서 Animal 클래스는 추상 클래스이며, eat 메서드는 추상 메서드로 정의되어 있습니다.

Dog 클래스는 Animal 클래스를 상속받아 eat 메서드를 구현합니다.

sleep 메서드는 Animal 클래스에서 기본 구현을 제공하며, Dog 클래스에서도 동일하게 사용됩니다.

2. 인터페이스

2.1 인터페이스란?

Dart에서는 명시적인 interface 키워드가 없지만, 모든 클래스는 암묵적으로 인터페이스 역할을 할 수 있습니다.

즉, 클래스는 다른 클래스가 구현할 수 있는 계약(인터페이스)을 정의합니다. 인터페이스를 구현하는 클래스는 인터페이스에서 정의한 모든 메서드를 구현해야 합니다.

2.2 인터페이스 구현

인터페이스를 구현하는 클래스는 implements 키워드를 사용하여 클래스가 특정 인터페이스를 구현한다고 선언합니다. 인터페이스는 메서드 시그니처만 정의하고 구현은 제공하지 않습니다.

class Vehicle {
  void start();
  void stop();
}

class Car implements Vehicle {
  @override
  void start() {
    print('Car starting');
  }

  @override
  void stop() {
    print('Car stopping');
  }
}

void main() {
  Car car = Car();
  car.start(); // Car starting
  car.stop();  // Car stopping
}

위 예제에서 Vehicle 클래스는 인터페이스 역할을 하며, Car 클래스는 Vehicle 인터페이스를 구현합니다.

Car 클래스는 Vehicle 인터페이스에서 정의한 start와 stop 메서드를 구현해야 합니다.

3. 추상 클래스와 인터페이스의 차이점

  • 추상 클래스: 직접 인스턴스를 생성할 수 없으며, 일부 메서드에 대한 기본 구현을 제공할 수 있습니다. 다른 클래스가 이를 상속받아 구체적인 구현을 제공할 수 있습니다.

  • 인터페이스: 메서드 시그니처만 정의하며, 구현은 제공하지 않습니다. 클래스는 인터페이스를 implements 키워드로 구현하며, 인터페이스에서 정의한 모든 메서드를 구현해야 합니다.

4. 사용 사례

4.1 추상 클래스 사용 사례

추상 클래스는 기본 구현을 제공하고 여러 클래스에서 공통된 행동을 재사용할 때 유용합니다. 예를 들어, 동물 클래스에서 공통된 행동을 정의하고, 다양한 동물 클래스가 이를 상속받아 구체적인 행동을 구현하는 경우입니다.

4.2 인터페이스 사용 사례

인터페이스는 여러 클래스가 공통된 메서드를 구현하도록 강제할 때 유용합니다. 예를 들어, Serializable 인터페이스를 정의하고 여러 클래스가 이를 구현하여 객체를 직렬화할 수 있도록 하는 경우입니다.

 

Dart에서 추상 클래스와 인터페이스는 객체 지향 프로그래밍의 중요한 개념으로, 코드의 재사용성과 유연성을 높이는 데 도움을 줍니다. 추상 클래스는 기본 구현을 제공하고 자식 클래스에서 구체적인 구현을 제공하도록 하며, 인터페이스는 클래스가 공통된 메서드를 구현하도록 강제합니다. 이 두 개념을 잘 활용하여 유지보수성 높은 코드와 확장 가능한 애플리케이션을 개발할 수 있습니다.

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

반응형