IMCAT.DEV
로그인 가입
Dart 중급 객체지향

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()} 원'); // 총 합계 출력
    }
  • 실행 결과: 장바구니 총 합계: 2500 원
  • 예제 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(); // 올바른 호출
    }

    6. 정리

  • 클래스는 객체의 설계도이며, 인스턴스는 그 설계도를 바탕으로 생성된 실제 객체입니다.
  • 생성자를 통해 인스턴스를 생성할 때 속성을 초기화합니다.
  • 메서드를 통해 객체의 행동을 정의하고 사용할 수 있습니다.
  • 다음에 학습하면 좋은 주제: 상속과 다형성, 인터페이스 및 Mixins, 상태 관리 방법.