데이터
- 사물이나 현상에서 얻어진 사실 또는 값을 의미한다.
변수
- 값을 저장할 수 있는 메모리 공간, 즉 값을 저장해 놓고 이후에 재사용 하거나 변경할 수 있도록 메모리 공간을 이름으로 할당한 개념을 말한다.
데이터 타입
- 메모리 공간에 들어간 값의 형태이다.
// 코드의 시작점
void main() {
int n1 = 10; // 정수형 변수
double d1 = 10.0; // 실수형 변수
bool b1 = true; // 불리언 변수
String s1 = '홍길동'; // 문자열 변수(홑따옴표 권장 사항)
}
dart 기본 메모리 공간 3가지
- 스택(stack) - 지역변수, 매개변수
- 힙 영역(heap) - new / 리터럴로 선언된 값들
- 정적 영역(Static) - 전역변수, 클래스의 static 변수, 컴파일 시점 상수 등
런타임시점 & 컴파일시점 이해
- 런타임시점 : 프로그램이 실제로 실행되는 단계
- 컴파일시점 : 프로그램의 소스 코드가 기계어로 변환되는 시점(프로그램이 실행되기 전에 발생) => 컴파일러가 소스 코드를 분석하여 구문 및 의미 오류를 감지하고, 타입 체크를 수행하는 단계
타입 확인 - runtimeType의 활용
- 디버깅 및 오류 방지
- 예상치 못한 타입의 값이 들어올 경우, 프로그램이 제대로 동작하지 않을 수 있다.
- runtimeType 녀석을 활용해서 타입 체크를 할 수 있다.
// 코드의 시작점
void main() {
int n1 = 10;
double d1 = 10.0;
bool b1 = true;
String s1 = '홍길동'; // 홀따옴표 권장 사항
print('정수 : ${n1.runtimeType}');
print('실수 : ${d1.runtimeType}');
print('정수 : ${b1.runtimeType}');
print('정수 : ${s1.runtimeType}');
}
✔ 결과값
타입 추론
- 개발자가 변수의 타입을 명시하지 않아도, 자동으로 적절한 타입을 결정해주는 기능을 말한다.
- Dart 언어에서는 var, dynamic 두 개의 키워드를 통해서 타입 추론을 제공한다.
- var 키워드로 한 번 초기화된 데이터 타입은 다른 데이터 타입으로 변경이 불가능하다.
- dynamic 타입은 모든 타입을 받을 수 있고 다른 타입으로 변경도 가능하다.
// 코드의 시작점
void main() {
var n1 = 1;
var d1 = 10.1;
var b1 = true;
var s1 = '홍길동';
print(n1.runtimeType);
print('실수 : ${d1.runtimeType}');
print('부울 : ${b1.runtimeType}');
print('문자열 : ${s1.runtimeType}');
print('----------------------------------');
// var 키워드로 한 번 초기화된 데이터 타입은 다른 데이터 타입으로 변경이 불가능 하다.
// n1 = 20.1; 오류 발생
dynamic dyN1 = 100;
dyN1 = 20.5;
print('dyN1 ${dyN1.runtimeType}');
// dynamic 타입은 모든 타입을 받을 수 있고 다른 타입으로 변경도 가능하다.
} // end of main
✔ 결과값
상수
- 한번 할당된 값이 변경되지 않는 변수이다.
- dart 에서는 final 키워드와 const 키워드를 제공한다.
- 둘의 공통점은 값을 변경할 수 없다에 있지만 둘의 차이점은 컴파일 시점이냐, 런타임 시점이냐의 차이다.
- final - 런타임 상수(Run-time Constant)는 프로그램이 실행되는 도중에 값이 결정되며, 이후에는 변경 불가능하다.
- const - 컴파일타임 상수(Compile-tme Constant)는 코드가 컴파일될 때 값이 확정되어 진다.
// 코드의 시작점
void main() {
// final - 런타임 상수(Run-time Constant)
// 프로그램이 실행되는 도중에 값이 결정되며, 이후에는 변경 불가능
final int n1 = 10;
// n1 = 100; 컴파일 시점에 오류 발생
// const - 컴파일 타임 상수(Compile-time Constant)
// 코드가 컴파일 될 때 값이 확정되어 진다.
const double d1 = 101.0;
// d1 = 20.1; 변경 불가능
// 상수 사용시 데이터 타입도 역시 생략 가능하다.
final a1 = 100;
const b1 = true;
} // end of main
연산자
산술연산자
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}');
}
✔ 결과값
비교연산자
- 두 개의 값을 비교하여 결과를 참/거짓으로 판별할 때 사용된다.
void main() {
// 같다
print(' 2 == 3 -> ${2 == 3}'); // false
// 다르다
print(' 2 != 3 -> ${2 != 3}'); // true
// 왼쪽 값이 오른쪽 값보다 작다
print(' 2 < 3 -> ${2 < 3}'); // true
// 왼쪽 값이 오른쪽 값보다 크다
print(' 2 > 3 -> ${2 > 3}'); // false
// 왼쪽 값이 오른쪽 값보다 작거나 같다
print(' 2 <= 3 -> ${2 <= 3}'); // true
// 왼쪽 값이 오른쪽 값보다 크거나 같다
print('2 >= 3 -> ${2 >= 3}'); // false
}
✔ 결과값
논리연산자
// 논리 연산자
void main() {
bool isRainy = true;
bool hasUmbrella = false;
// and
// T && T --> True
print(isRainy && hasUmbrella);
print(hasUmbrella && isRainy); // 빠른 평가
// OR
print(isRainy || hasUmbrella);
print(hasUmbrella || isRainy);
// NOT
print(!isRainy);
}
✔ 결과값
'Flutter' 카테고리의 다른 글
[Flutter] Dart 기본 문법 #5 상속과 super 키워드 (0) | 2025.01.06 |
---|---|
[Flutter] Dart 기본 문법 #4 Null Safety (1) | 2025.01.06 |
[Flutter] Dart 기본 문법 #3 클래스와 인스턴스 (1) | 2025.01.06 |
[Flutter] Dart 기본 문법 #2 익명함수와 람다식 (1) | 2025.01.06 |
[Flutter] 플러터(Flutter)란 무엇일까요? (1) | 2025.01.02 |