학습
Dart 클래스와 인스턴스
Dart 클래스와 인스턴스 — 중급
클래스와 인스턴스
1. 도입 (왜 배워야 하는가)
Dart 언어에서 클래스와 인스턴스는 객체 지향 프로그래밍(OOP)의 핵심 요소입니다. 클래스는 객체의 청사진으로, 데이터와 기능을 조직화하는 데 필수적입니다. 실무에서는 복잡한 프로그램을 구조화하고 유지보수를 용이하게 하기 위해 객체 지향 프로그래밍 패턴을 널리 사용합니다. 만약 클래스와 인스턴스 개념을 잘 이해하지 못한다면, 코드가 혼란스러워지고, 협업 시 다른 개발자와의 의사소통이 어려워질 수 있습니다. 이는 결국 프로젝트의 품질과 개발 속도에 부정적인 영향을 미칠 수 있습니다.
2. 핵심 개념 설명
클래스(Class)
클래스는 객체를 생성하기 위한 설계도입니다. 예를 들어, '자동차'라는 클래스를 생각해보면, 자동차의 속성(색상, 제조사, 모델)과 메서드(운전하기, 정지하기)를 정의할 수 있습니다.
인스턴스(Instance)
인스턴스는 클래스를 기반으로 만들어진 실제 객체입니다. 자동차 클래스를 바탕으로 '내 차'라는 인스턴스를 만들 수 있습니다. 여기서 '내 차'는 특정 색상과 모델을 가진 실제 자동차입니다.
| 용어 | 정의 |
|---|---|
| 클래스 | 객체의 속성과 행동을 정의하는 설계도 |
| 인스턴스 | 클래스를 통해 생성된 실제 객체 |
3. 기본 코드 예제
class Car {
String color;
String model;
Car(this.color, this.model); // 생성자
void drive() {
print('차가 주행 중입니다.');
}
}
void main() {
Car myCar = Car('빨강', '소나타'); // 인스턴스 생성
myCar.drive(); // 메서드 호출
}
- 실행 결과: 차가 주행 중입니다.
- 코드 설명:
- class Car는 자동차 클래스를 정의합니다.
- String color;와 String model;은 자동차의 속성을 정의합니다.
- Car(this.color, this.model);는 생성자로, 인스턴스를 생성할 때 속성 값을 초기화합니다.
- void drive()는 자동차가 주행하는 기능을 정의한 메서드입니다.
- Car myCar = Car('빨강', '소나타');는 '빨강' 색상과 '소나타' 모델을 가진 자동차 인스턴스를 생성합니다.
- myCar.drive();는 인스턴스의 메서드를 호출하여 '차가 주행 중입니다.'라는 메시지를 출력합니다.
4. 실전 활용 예제
예제 1: 쇼핑몰 장바구니 구현
장바구니를 관리하기 위해 상품 클래스를 만들고, 장바구니 클래스에서 상품을 추가하고 합계를 계산하는 방법입니다.
class Product {
String name;
double price;
Product(this.name, this.price);
}
class Cart {
List<Product> items = [];
void addProduct(Product product) {
items.add(product);
}
double getTotal() {
double total = 0;
for (var item in items) {
total += item.price;
}
return total;
}
}
void main() {
Cart cart = Cart();
cart.addProduct(Product('사과', 1000));
cart.addProduct(Product('바나나', 1500));
print('장바구니 총 합계: ${cart.getTotal()} 원'); // 총 합계 출력
}
예제 2: 학생 관리 시스템
학생 정보를 관리하는 시스템에서 학생 클래스와 학급 클래스를 생성하는 예제입니다.
class Student {
String name;
int age;
Student(this.name, this.age);
}
class Classroom {
List<Student> students = [];
void addStudent(Student student) {
students.add(student);
}
void showStudents() {
for (var student in students) {
print('${student.name}, ${student.age}세');
}
}
}
void main() {
Classroom classroom = Classroom();
classroom.addStudent(Student('홍길동', 20));
classroom.addStudent(Student('이순신', 21));
classroom.showStudents(); // 학생 목록 출력
}
- 홍길동, 20세 - 이순신, 21세
5. 흔한 실수와 주의사항
실수 1: 클래스 속성 초기화 누락
class Car {
String color; // 초기화하지 않음
Car() {
// 생성자에서 초기화가 없을 경우
}
}
// 올바른 코드
class Car {
String color;
Car(this.color); // 초기화
}
실수 2: 메서드 호출 시 인스턴스 누락
class Car {
void drive() {
print('차가 주행 중입니다.');
}
}
void main() {
Car.drive(); // 잘못된 호출
}
// 올바른 코드
void main() {
Car myCar = Car();
myCar.drive(); // 올바른 호출
}