본 글은 윈도우11에서 VSCode를 사용하고 있습니다.
이전 포스트에서 Flutter 프레임워크를 설치하면서 Dart 언어도 함께 설치되었습니다.
Flutter 프레임워크는 Dart 언어로 다루어지므로 Flutter를 잘 사용하기 위해 Dart 언어를 학습해보겠습니다.
[목차생성]
1. 변수 (Variables)
Dart에서 변수를 선언하는 방법은 var, final, const 키워드를 사용하거나 명시적으로 타입을 지정하는 방법이 있습니다.
- var: 변수를 선언할 때 사용하며, 초기화 시 타입이 결정됩니다.
- final: 한 번 값이 할당되면 변경할 수 없는 변수입니다.
- const: 컴파일 시간에 값이 결정되고, 이후 절대 변하지 않는 상수입니다.
- int: 정수형 (e.g., int age = 25;)
- double: 실수형 (e.g., double height = 5.9;)
- String: 문자열 (e.g., String name = 'Dart';)
- bool: 불리언 (e.g., bool isFlutterAwesome = true;)
- List: 리스트 (e.g., List<int> numbers = [1, 2, 3];)
- Map: 맵 (e.g., Map<String, int> scores = {'Math': 90, 'Science': 85};)
- Dart는 기본적으로 모든 변수는 null 값을 가질 수 없습니다. ?를 사용하여 null을 허용할 수 있습니다. (e.g., String? nullableName;)
void main() {
var name = 'Flutter'; // String 타입으로 추론됨
int age = 2; // 명시적으로 int 타입 지정
final country = 'Korea'; // 이후 변경 불가
const pi = 3.14159; // 컴파일 시간에 값이 고정됨
print('Name: $name, Age: $age, Country: $country, Pi: $pi');
}
void main() {
int age = 30;
double price = 9.99;
String greeting = 'Hello, Dart!';
bool isDartCool = true;
List<int> numbers = [1, 2, 3, 4];
Map<String, int> scores = {'Math': 95, 'Science': 80};
print('Age: $age, Price: $price, Greeting: $greeting, Dart is cool: $isDartCool');
print('Numbers: $numbers');
print('Scores: $scores');
}
2. 입력 (Input)
Dart 자체에서는 콘솔 입력을 받기 위해 dart:io 라이브러리의 stdin을 사용합니다. 그러나 Dart가 웹 또는 모바일 환경에서 사용될 때는 UI를 통해 입력을 받습니다.
import 'dart:io';
void main() {
stdout.write('Enter your name: '); // 콘솔에 출력
String? name = stdin.readLineSync(); // 콘솔에서 입력 받기
print('Hello, $name!');
}
3. 출력 (Output)
Dart에서 출력을 위해 print 함수를 사용합니다. 콘솔에 문자열을 출력할 수 있으며, 문자열 내에서 변수를 $ 기호를 사용하여 쉽게 삽입할 수 있습니다.
void main() {
String name = 'Dart';
print('Hello, $name!'); // 콘솔에 출력
int age = 10;
print('Age: $age'); // 숫자도 문자열 내에 포함 가능
}
4. 조건문 (Conditionals)
Dart의 조건문은 if, else if, else 구조로 작성됩니다. 조건은 항상 불리언 값이어야 하며, 조건에 따라 다른 코드 블록이 실행됩니다.
void main() {
int number = 10;
if (number > 0) {
print('$number is positive');
} else if (number < 0) {
print('$number is negative');
} else {
print('$number is zero');
}
}
5. 반복문 (Loops)
Dart에서는 반복문을 사용해 반복 작업을 수행할 수 있습니다. 주로 사용되는 반복문으로는 for, while, do-while 문이 있습니다.
void main() {
// for 문
for (int i = 0; i < 3; i++) {
print('For loop: $i');
}
// while 문
int count = 0;
while (count < 3) {
print('While loop: $count');
count++;
}
// do-while 문
int num = 0;
do {
print('Do-While loop: $num');
num++;
} while (num < 3);
}
6. 함수 (Functions)
Dart에서 함수는 void로 반환 타입을 지정하거나 값을 반환할 수 있습니다. Dart는 람다 표현식(익명 함수)도 지원합니다.
void main() {
greet('Dart'); // 함수 호출
int result = add(5, 3); // 값 반환 함수 호출
print('Sum: $result');
var multiply = (int a, int b) => a * b; // 람다 함수
print('Multiply: ${multiply(4, 5)}');
}
void greet(String name) {
print('Hello, $name!');
}
int add(int a, int b) {
return a + b;
}
7. 클래스 (Classes)와 객체 (Objects)
Dart는 객체 지향 언어이기 때문에, 클래스와 객체 개념이 매우 중요합니다. 클래스를 정의하고, 그 클래스로부터 객체를 생성할 수 있습니다.
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() {
Person person = Person('Alice', 30);
person.greet();
}
8. 상속 (Inheritance)
Dart에서는 클래스가 다른 클래스의 특성을 상속받을 수 있습니다. 이를 통해 코드의 재사용성을 높일 수 있습니다.
class Animal {
void makeSound() {
print('Animal makes a sound.');
}
}
class Dog extends Animal {
@override
void makeSound() {
print('Dog barks.');
}
}
void main() {
Dog dog = Dog();
dog.makeSound(); // Dog barks.
}
9. 인터페이스와 추상 클래스 (Interfaces and Abstract Classes)
Dart에서는 인터페이스를 명시적으로 선언하지 않지만, 클래스 자체가 인터페이스로 사용될 수 있습니다. 추상 클래스는 일부 구현만 제공하고, 나머지는 서브 클래스가 구현하도록 강제합니다.
abstract class Vehicle {
void drive();
void honk() {
print('Vehicle honks.');
}
}
class Car extends Vehicle {
@override
void drive() {
print('Car is driving.');
}
}
void main() {
Car car = Car();
car.drive(); // Car is driving.
car.honk(); // Vehicle honks.
}
10. 제네릭 (Generics)
제네릭은 다양한 타입에 대해 재사용 가능한 코드를 작성할 때 유용합니다. Dart에서는 제네릭을 사용하여 타입 안전성을 높일 수 있습니다.
class Box<T> {
T content;
Box(this.content);
void showContent() {
print('The content is: $content');
}
}
void main() {
Box<int> intBox = Box(123);
intBox.showContent(); // The content is: 123
Box<String> strBox = Box('Hello');
strBox.showContent(); // The content is: Hello
}
11. 비동기 프로그래밍 (Asynchronous Programming)
Dart는 비동기 프로그래밍을 강력하게 지원합니다. Future와 async/await 키워드를 사용하여 비동기 작업을 쉽게 처리할 수 있습니다.
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 2)); // 2초 대기
return 'Data fetched';
}
void main() async {
print('Fetching data...');
String data = await fetchData();
print(data); // Data fetched
}
12. 익명 함수 (Anonymous Functions)와 람다 (Lambda)
Dart에서는 익명 함수와 람다를 사용하여 간단한 함수를 작성할 수 있습니다.
void main() {
var add = (int a, int b) => a + b;
print(add(3, 5)); // 8
List<int> numbers = [1, 2, 3, 4, 5];
numbers.forEach((number) => print(number * 2)); // 2, 4, 6, 8, 10
}
13. 예외 처리 (Exception Handling)
Dart는 try, catch, finally 구문을 사용하여 예외를 처리할 수 있습니다.
void main() {
try {
int result = 12 ~/ 0; // 예외 발생: 정수를 0으로 나눔
print(result);
} catch (e) {
print('Caught an exception: $e');
} finally {
print('This is always executed.');
}
}
14. 라이브러리 및 패키지 (Libraries and Packages)
Dart는 라이브러리 시스템을 통해 코드를 모듈화할 수 있습니다. 또한 Pub 패키지 매니저를 통해 다양한 패키지를 관리하고 사용할 수 있습니다.
import 'dart:math'; // Dart의 표준 라이브러리
void main() {
var random = Random();
print(random.nextInt(100)); // 0에서 100 사이의 랜덤 정수 출력
}
'웹 · 앱 개발 > 플러터(Flutter)' 카테고리의 다른 글
Flutter 5화 - 상태(State) (0) | 2024.08.17 |
---|---|
Flutter 4화 - 비동기 프로그래밍 (0) | 2024.08.10 |
Flutter 3화 - UI 기초(클래스, 객체, 속성, Text) (0) | 2024.08.10 |
Flutter 1화 - Flutter 설치 및 예제 (0) | 2024.08.10 |