Dart 객체지향 프로그래밍(OOP) 완벽 가이드 🚀
객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍 패러다임 중 하나로, 코드의 재사용성과 유지보수성을 높이는 데 중요한 역할을 합니다. Dart는 객체지향 프로그래밍을 지원하며, 클래스(Class)와 객체(Object)를 중심으로 설계됩니다.
이번 글에서는 Dart의 객체지향 프로그래밍(OOP) 개념을 기초부터 심화 개념까지 코드 예제와 함께 자세히 알아보겠습니다.
1. 객체지향 프로그래밍(OOP)이란? 🤔
객체지향 프로그래밍(OOP)이란 객체(Object)를 중심으로 프로그램을 설계하는 방식입니다. 객체는 데이터(속성)와 해당 데이터를 조작하는 함수(메서드)를 포함하는 클래스(Class) 를 기반으로 생성됩니다.
Dart에서 객체를 생성하려면 클래스(Class) 를 먼저 정의해야 합니다.
✅ 클래스와 객체의 기본 구조
class Idol {
String name;
List<String> members;
// 생성자(Constructor)
Idol(this.name, this.members);
// 메서드(Method)
void sayHello() {
print('안녕하세요, $name 입니다!');
}
void introduce() {
print('멤버: ${members.join(', ')}');
}
}
void main() {
Idol blackpink = Idol('블랙핑크', ['지수', '제니', '로제', '리사']);
blackpink.sayHello();
blackpink.introduce();
}
🔹 Idol 클래스는 name과 members 속성을 가집니다.
🔹 Idol() 생성자를 사용해 객체를 초기화합니다.
🔹 sayHello(), introduce() 메서드를 통해 아이돌 정보를 출력할 수 있습니다.
2. 클래스 내부 변수 및 메서드 구분 🔍
클래스 내부에는 변수(속성, Fields)와 메서드(Methods) 가 존재합니다.
class Person {
String name; // 속성
int age;
Person(this.name, this.age);
void introduce() { // 메서드
print('안녕하세요, 저는 $name, $age살 입니다.');
}
}
✅ 변수는 객체의 상태(state)를 저장하며, 메서드는 행동(behavior) 을 정의합니다.
3. this 키워드 - 자기 자신 참조 👀
Dart에서 this 키워드는 클래스 내부에서 자기 자신(현재 객체) 을 참조하는데 사용됩니다.
class Animal {
String name;
Animal(String name) {
this.name = name;
}
}
✅ this.name = name;을 통해 생성자의 매개변수와 클래스의 속성을 구분합니다.
4. super 키워드 - 부모 클래스 호출 🎢
자식 클래스에서 부모 클래스의 속성이나 메서드를 호출할 때 super를 사용합니다.
class Animal {
String name;
Animal(this.name);
}
class Dog extends Animal {
Dog(String name) : super(name);
}
✅ super(name);을 통해 부모 클래스의 생성자를 호출할 수 있습니다.
5. final과 const 차이 ⚡
- final: 런타임 시 값이 결정되고 변경 불가능
- const: 컴파일 타임에 값이 결정되어 변경 불가능
final int x = 10; // 런타임에서 값 할당
const int y = 20; // 컴파일 타임에서 값 할당
✅ const는 상수값이 변경될 가능성이 없을 때 사용합니다.
6. Static 변수와 메서드 📌
static 키워드는 클래스 자체에 속하는 변수 및 메서드를 정의할 때 사용됩니다.
class MathUtils {
static double pi = 3.14;
static double circleArea(double radius) {
return pi * radius * radius;
}
}
void main() {
print(MathUtils.pi);
print(MathUtils.circleArea(5));
}
✅ static 변수와 메서드는 객체를 생성하지 않아도 호출 가능합니다.
7. Getter & Setter 활용 🏗️
Dart에서는 getter와 setter를 사용해 객체의 데이터 보호 및 가공이 가능합니다.
class User {
String _name; // 프라이빗 변수
User(this._name);
String get name => _name; // Getter
set name(String newName) => _name = newName; // Setter
}
✅ _name은 프라이빗(private) 변수로 직접 접근할 수 없고, getter와 setter를 통해 조작합니다.
8. 타입 비교 (is 연산자) 🧐
is 연산자를 사용하면 객체가 특정 클래스의 인스턴스인지 확인할 수 있습니다.
class Person {}
class Student extends Person {}
void main() {
Person person = Student();
print(person is Student); // true
}
✅ is 연산자를 활용하면 객체의 타입을 안전하게 확인할 수 있습니다.
✨ 결론
Dart에서 객체지향 프로그래밍(OOP)을 활용하면 코드 재사용성 증가, 유지보수 용이성 등의 장점을 얻을 수 있습니다.
✅ 클래스와 객체 ✅ 생성자와 네임드 생성자 ✅ 상속과 오버라이딩 ✅ 인터페이스(implements) 활용 ✅ 제너릭(Generic) 활용 ✅ Getter & Setter, Static 변수 활용 ✅ this, super, final, const 개념 이해 ✅ 타입 비교 (is 연산자 활용)
앞으로 Flutter 개발에서도 OOP 개념을 적극 활용해보세요! 🚀
'강의노트 > [코드팩토리] [초급] Flutter 3.0 앱 개발' 카테고리의 다른 글
3강 함수형 프로그래밍 (FP) (0) | 2025.03.19 |
---|---|
1강 Dart 기본기 (0) | 2025.03.18 |
댓글