2025. 2. 19. 13:53ㆍ같이 공부합시다 - Flutter/Dart & Flutter 기초부터 실전까지
Flutter 개발을 위해 필수적인 Dart 기본 문법 학습
[ Dart ]
✅ Flutter에서 사용되는 언어
✅ 객체 지향 프로그래밍(OOP) 및 비동기 프로그래밍 지원
1️⃣ Dart 개요 및 실행 방법
📌 크로스플랫폼 ! 모바일, 웹, 서버, 데스크탑에서 실행할 수 있는 언어.
📌 JIT (Just-In-Time) & AOT (Ahead-Of-Time) 컴파일 모두 지원, 빠른 실행 속도 제공.
✅ Dart 실행 방법
- VSCode 기준 Flutter 프로젝트 생성 ( flutter create project_name )
- Flutter 프로젝트에서 실행 (main.dart) // VSCode 동일 프로젝트라면 ‘Ctrl + F5’ 로 어디서든 실행 가능
- DartPad 에서도 실행 테스트 가능 (https://dartpad.dev/) // 오류도 잡아줌.
2️⃣ 변수와 데이터 타입
📌 Dart는 정적 타입 언어지만 var, final, const를 활용하여 동적 할당도 가능.
🔹 기본 변수 선언
void main() {
int age = 30; // 정수형 변수
double height = 178.5; // 실수형 변수
String name = "홍길동"; // 문자열
bool isFlutterDev = true; // 불리언 값
print("이름: $name, 나이: $age, 키: $height, Flutter 개발자? $isFlutterDev");
}
🔹 var, final, const 차이점
void main() {
var city = "Seoul"; // 자동으로 String 타입 추론
final int birthYear = 1990; // 한 번만 할당 가능 (런타임 결정)
const double pi = 3.14; // 컴파일 타임에 결정 (수정 불가)
print("도시: $city, 태어난 해: $birthYear, 원주율: $pi");
}
✅ final vs const 차이
- final: 한 번만 할당 가능, 실행 시 결정됨 (예: DateTime.now())
- const: 컴파일 타임에 결정되어야 함 (변경 불가한 상수)
🔹final - DateTime.now() 예시
void main() {
final currentTime = DateTime.now();
print("현재 시간 : $currentTime");
}
<final - DateTime.now() 예시 결과>
현재 시간 : 2025-02-19 08:17:32.927
💡 DateTime.now() 는 프로젝트 실행 시 타이밍에 맞춰 현재의 시간이 결정됨
3️⃣ 함수(Function)
📌 반환 타입 명시적 지정 or 생략 가능
📌 익명 함수(Lambda)와 고차 함수(Higher-Order Function)도 지원.
🔹 기본적인 함수 선언
// 반환 타입이 있는 함수
int add(int a, int b) {
return a + b;
}
// 반환 타입 생략 가능 (자동 추론)
subtract(a, b) {
return a - b;
}
void main() {
int sum = add(5, 3);
print("합계: $sum");
print("차이: ${subtract(10, 4)}");
}
💡 "차이: ${subtract(10, 4)}” 문자열 출력에서 함수 호출은 ${ } 사용
🔹 화살표 함수 (Lambda)
/*
int multiply(int a, int b) {
return a * b;
}
*/
int multiply(int a, int b) => a * b;
void main() {
print("곱하기 결과: ${multiply(4, 5)}");
}
🔹 선택적 & 기본값이 있는 매개변수
void greet(String name, [String country = "한국"]) {
print("안녕하세요, $name님! ($country)");
}
void main() {
greet("철수"); // 기본값 "한국" 사용
greet("영희", "미국");
}
4️⃣ 클래스(Class) 및 객체(Object)
📌 객체 지향 언어(OOP) : 클래스(Class)와 객체(Object)를 기반으로 동작.
📌 생성자(Constructor), 상속(Inheritance), 다형성(Polymorphism) 등을 지원함.
🔹 클래스와 객체 생성
class Person {
String name;
int age;
// 생성자 (Constructor)
Person(this.name, this.age);
void introduce() {
print("안녕하세요! 저는 $name이고, 나이는 $age살 입니다.");
}
}
void main() {
Person p1 = Person("홍길동", 25);
p1.introduce();
}
🔹 named constructor (이름 있는 생성자)
class Car {
String brand;
int year;
// 기본 생성자
Car(this.brand, this.year);
// Named Constructor
Car.newModel(this.brand) : year = 2024;
void showInfo() {
print("브랜드: $brand, 출시년도: $year");
}
}
void main() {
Car car1 = Car("Hyundai", 2020);
car1.showInfo();
Car car2 = Car.newModel("Tesla");
car2.showInfo();
}
🔹 상속(Inheritance)
class Animal {
String name;
// 생성자 (Constructor)
Animal(this.name); // 생성자에서 name 을 초기화
void makeSound() {
print("동물이 소리를 냅니다.");
}
}
// 상속받은 클래스
class Dog extends Animal {
Dog(String name) : super(name);
@override
void makeSound() {
print("$name가 멍멍!");
}
}
void main() {
Dog myDog = Dog("바둑이");
myDog.makeSound();
}
✔ super 키워드를 사용하여 부모 클래스의 생성자를 호출할 수 있음
✔ @override 를 활용하여 부모 메서드를 재정의 가능
📌 오늘의 실습 과제
✅ [실습 1] 변수 선언 및 출력 (var, final, const 차이 이해)
void main() {
const name = "SteadyBuilder";
var level = 12;
final loginTime = DateTime.now();
print("name : $name\\nlv : $level\\n -- Last log-in : $loginTime");
}
✅ [실습 2] 간단한 계산기 함수 만들기 (add(), subtract(), multiply(), divide())
class Calc {
add(a, b) => a + b;
subtract(a, b) => a - b;
multiply(a, b) => a * b;
divide(a, b) => a / b;
}
void main() {
Calc cal = new Calc();
print(cal.add(3, 4));
print(cal.subtract(5, 4));
print(cal.multiply(2, 3));
print(cal.divide(3, 0));
}
✅ [실습 3] Person 클래스를 만들고 introduce() 메서드를 추가하여 자기소개 출력
class Person {
String name;
int age;
// 생성자 (Constructor)
Person(this.name, this.age);
void introduce() {
print("안녕하세요! 저는 $name 이고, 나이는 $age 살 입니다.");
}
}
void main() {
Person p1 = new Person("SteadyBuilder", 40);
p1.introduce();
}
✅ [실습 4] Animal 클래스를 만들고 Cat, Dog 클래스를 상속받아 makeSound() 구현
class Animal {
String name;
// 생성자 (Constructor)
Animal(this.name);
void makeSound() {
print("동물이 소리를 냅니다.");
}
}
// 상속받은 클래스
class Dog extends Animal {
Dog(String name) : super(name);
@override
void makeSound() {
print("$name가 멍멍!");
}
}
class Cat extends Animal {
Cat(String name) : super(name);
@override
void makeSound() {
print("$name가 냐옹!");
}
}
void main() {
Dog myDog = Dog("바둑이");
myDog.makeSound();
Cat myCat = Cat("나비");
myCat.makeSound();
}
✔ 모든 실습 코드를 DartPad 또는 Flutter 프로젝트에서 실행하여 확인!
🚀 다음 학습: Dart 비동기 프로그래밍 (async/await, Future)
Dart에서 비동기 작업을 처리하는 방법을 배웁니다.
💡 API 호출이나 파일 읽기 같은 작업을 Flutter에서 어떻게 처리하는지 이해할 준비!