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의 메모리 구조
- Stack: 지역 변수와 매개 변수가 저장됩니다.
- Heap: new 키워드 또는 리터럴로 선언된 값들이 저장됩니다.
- 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.
연산자: 산술(+, -), 비교(==, <), 논리(&&, ||)