다트(Dart)에서의 추상화와 인터페이스
추상화(Abstraction)와 인터페이스(Interface)는 객체 지향 프로그래밍의 핵심 원칙 중 하나입니다. 이들은 복잡한 시스템을 단순하게 만들어 주고, 코드 간의 상호 작용을 용이하게 하며, 효율성을 증가시킵니다.
추상화란?
추상화는 특정 시스템이나 프로그램의 복잡한 기능이나 프로세스를 단순화하는 과정입니다. 사용자가 어떻게 작동하는 지 모르더라도 그 기능을 이해하고 사용할 수 있게 해줍니다.
다트에서의 추상화
다트에서 추상클래스는 인터페이스와 마찬가지로 사용됩니다. 추상 클래스는 객체를 만들지 못하고, 하나 이상의 추상 메소드를 포함해야 합니다. 이 추상 메소드는 본문이 없고 메소드 이름, 반환 유형 그리고 매개변수만 정의되어 있습니다.
abstract class Shape {
void draw(); // 추상 메소드
}
인터페이스란?
인터페이스는 일종의 계약입니다. 클래스가 어떤 메소드를 포함해야 하는지 정의하며, 그 메소드가 어떻게 작동해야 하는지는 정의하지 않습니다.
다트에서의 인터페이스
다트에서는 인터페이스를 직접적으로 정의하는 문법이 없지만, 모든 클래스는 자동적으로 인터페이스로 사용됩니다. 다음은 “Drawable”라는 인터페이스를 사용하는 예제입니다.
class Shape {
void draw(){} // 일반 메소드
}
class Circle extends Shape {
@override
void draw(){
print('Drawing a circle');
}
}
이렇게 다트(Dart)에서는 추상화와 인터페이스를 통해 코드를 더 간결하고 명확하게 만들 수 있습니다. 이해가 쉽지 않다면 앞에서 언급한 ‘Shape’와 ‘Circle’ 예제로 생각해보세요. ‘Shape’는 그림을 그리는 방법을 모르지만 그림을 그릴 수 있어야 한다는 것을 압니다. 그래서 다른 클래스인 ‘Circle’에서 그 방법을 정의하고 그림을 그릴 수 있게 합니다. 이처럼 추상화와 인터페이스는 간단하게 생각하면 복잡한 문제를 단순하게 만들어주는 도구라고 할 수 있습니다.