본문 바로가기

Dart 기초: Flutter의 프로그래밍 언어 Dart 소개

에온르 2024. 5. 14.
반응형

Dart는 구글에 의해 개발된 프로그래밍 언어로, Flutter 애플리케이션 개발에 사용됩니다. Dart는 간결하고, 표현력이 뛰어나며, 모든 플랫폼에서 빠르게 실행될 수 있도록 설계되었습니다.

Dart의 주요 특징

  • 객체 지향 언어: Dart는 클래스 기반의 객체 지향 프로그래밍 언어입니다.
  • 강타입 언어: 모든 변수의 타입이 명시적이거나 컴파일러에 의해 추론됩니다.
  • 가비지 컬렉션: 메모리 관리는 자동으로 이루어집니다.
  • 리치 라이브러리: 풍부한 표준 라이브러리가 포함되어 있습니다.

Dart 설치

Dart를 설치하려면 Dart 공식 웹사이트에서 설치 지침을 따르세요. Dart SDK는 Flutter와 함께 설치되므로 별도의 Dart 설치는 필요하지 않습니다.


기본 문법

변수 선언과 초기화

Dart에서 변수를 선언하는 방법은 간단합니다. var 키워드를 사용하거나, 명시적으로 타입을 선언할 수 있습니다.

var name = 'John Doe';
int age = 30;

함수 정의

함수는 return_type functionName(parameters) 형태로 정의합니다. 예를 들어, 이름을 출력하는 함수는 다음과 같습니다.

void printName(String name) {
  print("Name: $name");
}

조건문과 반복문

Dart의 조건문과 반복문 사용법은 다른 많은 언어와 유사합니다.

// If statement
if (age > 18) {
  print("Adult");
} else {
  print("Minor");
}

// For loop
for (int i = 0; i < 5; i++) {
  print("Index $i");
}

클래스와 객체

객체 지향 프로그래밍의 핵심인 클래스와 객체의 예제입니다.

class Person {
  String name;
  int age;

  Person(this.name, this.age);

  void greet() {
    print("Hello, my name is $name and I am $age years old.");
  }
}

void main() {
  var john = new Person("John Doe", 30);
  john.greet();
}

예제: 간단한 계산기 앱

Dart를 사용하여 간단한 계산기를 구현하는 방법을 알아보겠습니다.

class Calculator {
  int add(int a, int b) {
    return a + b;
  }

  int subtract(int a, int b) {
    return a - b;
  }

  int multiply(int a, int b) {
    return a * b;
  }

  double divide(int a, int b) {
    if (b == 0) {
      throw Exception('Division by zero');
    }
    return a / b;
  }
}

void main() {
  var calc = Calculator();
  print("Add: ${calc.add(5, 3)}"); // Output: 8
  print("Subtract: ${calc.subtract(5, 3)}"); // Output: 2
  print("Multiply: ${calc.multiply(5, 3)}"); // Output: 15
  print("Divide: ${calc.divide(10, 2)}"); // Output: 5.0
}

컬렉션 사용하기

Dart에서는 데이터 그룹을 효율적으로 관리할 수 있는 다양한 컬렉션 타입을 제공합니다.

리스트

리스트는 정렬된 컬렉션으로, 다음과 같이 선언할 수 있습니다.

List<String> names = ['Alice', 'Bob', 'Charlie'];
print(names[0]); // Alice

리스트에 요소를 추가하거나 제거하는 것은 간단합니다.

names.add('David');
names.remove('Alice');
print(names); // [Bob, Charlie, David]

맵은 키-값 쌍을 저장하는 컬렉션입니다. 맵의 사용 예를 보여드리겠습니다!

Map<String, int> phoneNumbers = {
  'Alice': 123456,
  'Bob': 234567
};
print(phoneNumbers['Alice']); // 123456

맵에 새로운 키-값 쌍을 추가하거나 기존 값을 업데이트하는 것도 쉽습니다.

phoneNumbers['Charlie'] = 345678;
print(phoneNumbers); // {'Alice': 123456, 'Bob': 234567, 'Charlie': 345678}

이벤트 핸들링

Dart에서 이벤트를 처리하는 방법을 이해하면, 사용자 인터페이스 또는 다른 종류의 비동기 데이터 흐름을 관리할 수 있습니다.

사용자 정의 이벤트 만들기

이벤트를 처리하기 위해 사용자 정의 이벤트와 리스너를 만들 수 있습니다.

class UserEvent {
  String name;
  UserEvent(this.name);
}

void handleEvent(UserEvent event) {
  print('Event: ${event.name}');
}

void main() {
  var event = UserEvent('login');
  handleEvent(event);
}

비동기 처리

Dart는 비동기 프로그래밍을 지원하며, Future와 async, await를 사용하여 비동기 코드를 간결하게 작성할 수 있습니다.

Future와 async/await

비동기 작업을 예로 들어 보겠습니다.

Future<String> fetchUserData() {
  return Future.delayed(Duration(seconds: 2), () {
    return 'Data loaded';
  });
}

void main() async {
  print('Fetching user data...');
  String data = await fetchUserData();
  print(data); // Data loaded
}

이 예제에서는 비동기 함수 fetchUserData가 2초 후에 완료되며, await 키워드를 사용해 해당 데이터가 로드될 때까지 기다립니다.


결론

이 강의를 통해 Dart의 기본적인 문법과 객체 지향적인 특성을 학습하였습니다. 다음 강의에서는 Flutter에서 Dart를 활용하는 방법에 대해 더 자세히 다루겠습니다. Dart와 Flutter를 이용하면, 효율적이고 강력한 애플리케이션을 개발할 수 있습니다. 추가적으로 설명한 고급 기능을 사용한다면 효과적으로 데이터를 관리하고, 이벤트를 처리하며, 비동기적인 작업을 쉽게 처리할 수 있습니다. 다음 강의에서는 이 기능들을 사용하여 실제 Flutter 애플리케이션을 구축하는 방법을 배워보도록 하겠습니다. :)

반응형

댓글