이번 글에서는 Dart에서 중요한 개념인 상속과 인터페이스에 대해 쉽게 설명해드릴게요.
이 두 가지는 객체지향 프로그래밍에서 아주 자주 사용되며, 코드를 더 깔끔하고 재사용 가능하게 만들어줘요. 자, 그럼 시작해볼까요?
1. 상속(Inheritance)이란?
상속은 말 그대로 부모로부터 물려받는 것을 말해요. 프로그래밍에서도 비슷한데, 한 클래스가 다른 클래스의 속성과 메서드를 물려받는 것을 상속이라고 해요. 상속을 통해 코드의 재사용을 쉽게 할 수 있죠.
// 부모 클래스 (슈퍼 클래스)
class Animal {
void breathe() {
print("I am breathing.");
}
}
// 자식 클래스 (서브 클래스)
class Dog extends Animal {
void bark() {
print("Woof! Woof!");
}
}
void main() {
Dog myDog = Dog();
myDog.breathe(); // 부모 클래스의 메서드를 사용할 수 있음
myDog.bark(); // 자식 클래스에 있는 메서드
}
위 예시에서 Dog 클래스는 Animal 클래스를 상속받아요.
그래서 Dog 클래스는 Animal 클래스의 breathe() 메서드를 사용할 수 있죠.
그리고 Dog 클래스만의 기능인 bark()도 추가할 수 있어요.
이렇게 상속을 통해 코드를 재사용하고, 필요한 기능만 추가할 수 있어요.
2. 인터페이스(Interface)란?
인터페이스는 규칙이나 약속 같은 거예요. 인터페이스는 클래스가 어떤 메서드를 가져야 하는지 정해주지만, 구현은 하지 않아요.
인터페이스를 구현(implements)하는 클래스는 그 인터페이스에 있는 모든 메서드를 반드시 구현해야 해요.
// 인터페이스처럼 사용될 추상 클래스
abstract class Vehicle {
void drive(); // 구현되지 않은 메서드
}
class Car implements Vehicle {
@override
void drive() {
print("Driving a car");
}
}
class Bike implements Vehicle {
@override
void drive() {
print("Riding a bike");
}
}
void main() {
Vehicle myCar = Car();
Vehicle myBike = Bike();
myCar.drive(); // "Driving a car"
myBike.drive(); // "Riding a bike"
}
여기서는 Vehicle이라는 추상 클래스(인터페이스처럼 사용)를 만들었고, Car와 Bike가 이를 구현했어요.
이처럼 여러 클래스가 같은 인터페이스를 구현하면, 다양한 클래스가 같은 규칙을 따르지만 다른 방식으로 동작할 수 있어요.
3. 상속 vs 인터페이스, 뭐가 다를까요?
- 상속은 부모 클래스로부터 속성과 메서드를 물려받는 것이에요. 자식 클래스는 부모 클래스의 기능을 그대로 사용할 수 있고, 필요하면 더 추가할 수도 있어요.
- 인터페이스는 메서드의 틀만 제공하고, 그 틀을 따르는 클래스가 직접 구현해요. 여러 클래스가 동일한 규칙을 따르되, 구체적인 동작은 다르게 만들 수 있어요.
4. 상속과 인터페이스를 왜 쓸까요?
- 상속: 코드를 재사용하고, 중복을 줄이기 위해 사용해요.
- 인터페이스: 클래스가 규칙을 따르게 하여, 여러 클래스가 동일한 패턴으로 동작하게 만들 때 사용해요.
5. 요약
- 상속: 부모 클래스의 기능을 물려받고 확장하는 것.
- 인터페이스: 클래스가 따라야 할 메서드 틀을 정의하는 것.
이 두 가지 개념을 잘 활용하면, 코드가 깔끔해지고 재사용성이 높아져요.
Dart에서 객체지향 프로그래밍을 할 때 꼭 알아두면 좋겠죠?
구독!! 공감과 댓글,
광고 클릭은 저에게 큰 힘이 됩니다.
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
'Dart > Dart Programming language' 카테고리의 다른 글
[추가학습] Dart에서 정규 표현식(Regex) 쉽게 배우기 (2) | 2024.10.20 |
---|---|
[추가학습] 정규 표현식(Regex) 작성 방법: 초보자를 위한 가이드 (5) | 2024.10.20 |
[추가학습] Dart에서 게터와 세터 이해하기: 데이터 캡슐화의 기초! (3) | 2024.10.18 |
[추가학습] Dart에서 람다 함수 사용법: 간결하고 강력한 익명 함수의 매력! (4) | 2024.10.18 |
[추가학습] Dart 커뮤니티 및 자원 활용 / Dart 최신 동향 (4) | 2024.09.22 |