📌 Day 1: Dart & Flutter 기초부터 실전까지! Dart 기본 문법 (변수, 함수, 클래스)

2025. 2. 19. 13:53같이 공부합시다 - Flutter/Dart & Flutter 기초부터 실전까지

728x90
반응형

 
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에서 어떻게 처리하는지 이해할 준비!
 
 
 

728x90
반응형