Flutter

Flutter Day 1: Dart 기본 개념

@leem 2025. 1. 2. 17:00

플러터(Flutter)

Flutter는 구글에서 개발한 모바일 UI 프레임워크입니다.

iOS와 Android뿐만 아니라 웹까지 하나의 코드로 모두 개발할 수 있는 강력한 도구.

플러터는 하나의 코드로 다양한 플랫폼에서 고성능의 앱을 만들 수 있는 프레임워크입니다.

UI

User Interface 사용자가 앱을 보고, 만지고, 조작하는 모든 것으로 UI는 사용자가 앱과 소통하는 매개체입니다.

프레임워크

Frame(틀) + Work(일)의 합성어로 어떤 일을 쉽게 할 수 있도록 도와주는 도구입니다.

주요 특징

Flutter는 구글이 지원하는 무료 오픈소스 프레임워크

  • 고성능 네이티브 앱 개발 가능 - Flutter는 코드를 네이티브 수준으로 컴파일하기 때문에, 성능이 매우 뛰어나, 앱이 빠르고 부드럽게 동작합니다.
  • 크로스 플랫폼 개발 - 하나의 코드로 iOS와 Android 모두에서 동작하는 앱을 만들 수 있습니다.
  • 위젯 중심 개발 - Flutter에서 모든 것은 위젯입니다. 위젯만 잘 이해하면 앱을 쉽게 개발할 수 있습니다.

 


Dart 언어

  • Flutter에서 사용하는 프로그래밍 언어로, UI 개발에 최적화되어 있습니다.
  • Dart로 작성한 코드는 네이티브 코드로 컴파일되며, 성능이 뛰어납니다.
  • Flutter의 핫 리로드(Hot Reload) 기능을 통해 코드 수정 후 즉시 결과를 확인할 수 있어 개발 속도가 빠릅니다
네이티브 코드란?
네이티브 코드는 기기의 운영 체제에서 직접 실행되는 코드를 말합니다.
iOS에서는 Objective-C/Swift, Android에서는 Java/Kotlin으로 변환됩니다.
하드웨어와 직접 상호작용하여 빠르고 최적화된 성능을 제공합니다.

 

Dart 언어의 특징

Dart는 UI 개발에 최적화된 프로그래밍 언어입니다.

  • 쉽게 배울 수 있음: C#, Java, Javascript 등 기존 언어를 알면 쉽게 학습할 수 있습니다.
  • 정적 타입 언어: 타입을 명시할 수 있으며, 타입 추론도 지원합니다.
  • 비동기 지원: 단일 스레드에서 비동기 방식으로 동작합니다.
  • 동시성(Concurrency): 완벽하게 격리된 상태에서 동시성을 지원합니다. (Isolate)
  • 컬렉션 중심: 배열 대신 컬렉션을 사용합니다.
  • 스프레드 연산자 지원: 쉽게 리스트와 컬렉션을 조합할 수 있습니다.

데이터

사물이나 현상에서 얻어진 사실 또는 값을 의미

변수

값을 저장하기 위한 메모리 공간
값을 저장해 놓고 이후에 재사용하거나 변경할 수 있도록 이름을 붙인 메모리 공간

데이터 타입

  • 데이터 타입 : 메모리 공간에 저장된 값 형태
  • Dart는 강타입 언어로, 데이터 타입을 명시하거나 추론합니다.

정적 타입 변수

int n1 = 10;
double d1 = 10.5;
String name = '홍길동';

 

타입 추론 변수

var age = 25; // int로 추론
dynamic data = '문자열'; // 타입 변경 가능

Dart의 기본 자료형

int 정수 int n1 = 10;
double 실수 double d1 = 10.5;
bool 논리값 (true, false) bool b1 = true;
String 문자열 String s1 = '홍길동';

 

Dart의 메모리 구조

  1. Stack: 지역 변수와 매개 변수가 저장됩니다.
  2. Heap: new 키워드 또는 리터럴로 선언된 값들이 저장됩니다.
  3. Static: 전역 변수, 클래스의 static 변수, 컴파일 시점 상수가 저장됩니다.
 
상수
  • 변경할 수 없는 값을 저장하는 변수입니다.
  • final: 런타임 상수, 프로그램 실행 중 값이 결정됩니다.
final int runtimeConst = 10; // 런타임 상수
  • const: 컴파일 타임 상수, 컴파일 시점에 값이 결정됩니다.
const double compileTimeConst = 20.5; // 컴파일 타임 상수
 

 


연산자

1. 산술 연산자

연산자 설명
+ 더하기 3 + 2 → 5
- 빼기 3 - 2 → 1
* 곱하기 3 * 2 → 6
/ 나누기 (실수) 3 / 2 → 1.5
% 나머지 3 % 2 → 1
~/ 나누기 (정수 결과 반환) 5 ~/ 2 → 2
void main() {
  print('3 + 2 = ${3 + 2}');
  print('3 - 2 = ${3 - 2}');
  print('3 * 2 = ${3 * 2}');
  print('3 / 2 = ${3 / 2}');
  print('3 % 2 = ${3 % 2}');
  print('5 ~/ 2 = ${5 ~/ 2}');
}

2. 비교 연산자

연산자 설명
== 값이 같은지 비교 3 == 2 → false
!= 값이 다른지 비교 3 != 2 → true
<, > 작다, 크다 비교 3 < 2 → false
<=, >= 작거나 같음, 크거나 같음 비교 3 >= 2 → true
void main() {
  print('2 == 3 -> ${2 == 3}');
  print('2 != 3 -> ${2 != 3}');
  print('2 < 3 -> ${2 < 3}');
  print('2 > 3 -> ${2 > 3}');
  print('2 <= 3 -> ${2 <= 3}');
  print('2 >= 3 -> ${2 >= 3}');
}

3. 논리 연산자

연산자 설명
&&  AND (모두 참일 때 참) true && false → false
|| OR (하나라도 참이면 참) true || false → true
! 논리 NOT (참 → 거짓, 거짓 → 참) !true → false
void main() {
  bool isRainy = true;
  bool hasUmbrella = false;

  // AND
  print(isRainy && hasUmbrella); // false
  print(hasUmbrella && isRainy); // false

  // OR
  print(isRainy || hasUmbrella); // true
  print(hasUmbrella || isRainy); // true

  // NOT
  print(!isRainy); // false
}
!true → false
void main() {
  bool isRainy = true;
  bool hasUmbrella = false;

  // AND
  print(isRainy && hasUmbrella); // false
  print(hasUmbrella && isRainy); // false

  // OR
  print(isRainy || hasUmbrella); // true
  print(hasUmbrella || isRainy); // true

  // NOT
  print(!isRainy); // false
}

타입 확인

  • runtimeType을 사용해 변수의 타입을 확인할 수 있습니다.
  • 디버깅 및 오류 방지에 유용합니다.
void main() {
  int n1 = 10;
  double d1 = 10.0;
  String s1 = '홍길동';

  print('정수: ${n1.runtimeType}');
  print('실수: ${d1.runtimeType}');
  print('문자열: ${s1.runtimeType}');
}

요약

Flutter란?
구글에서 개발한 모바일 UI 프레임워크. 하나의 코드로 iOS, Android, 웹, 데스크탑 앱을 개발 가능.
UI를 구성하는 기본 단위는 위젯이며, 고성능 앱 개발에 최적화.

Flutter의 주요 특징
고성능 네이티브 앱 개발: 코드를 네이티브 수준으로 컴파일하여 빠르고 부드러운 앱 동작 제공.
크로스 플랫폼 개발: 하나의 코드로 다양한 플랫폼에서 실행 가능.
핫 리로드(Hot Reload): 코드 수정 후 즉시 결과 반영으로 개발 속도 극대화.

Dart 언어
Dart: Flutter의 UI 개발에 최적화된 프로그래밍 언어.
변수 선언: var로 타입 추론, dynamic으로 타입 변경 가능.
상수: final(런타임 상수), const(컴파일 타임 상수).
메모리 구조: 스택(지역 변수), 힙(객체), 정적 영역(전역 변수).
기본 자료형: int, double, bool, String.
연산자: 산술(+, -), 비교(==, <), 논리(&&, ||)