[Flutter] Dart 언어(1): 변수·연산자·Null Safety

하영(Emma)·2025년 4월 23일

Flutter

목록 보기
3/6
post-thumbnail

1. 변수 선언과 타입

Dart는 정적 타입 언어로, 다양한 타입을 지원하며 타입 안정성을 보장한다.

기본적으로 다음과 같은 자료형을 자주 사용한다:

  • 숫자: int, double, num
  • 문자열: String
  • 논리값: bool
  • 콜렉션: List, Set, Map
  • 기타: Object, Future, dynamic

숫자 (int, double, num)

double d1 = 3.14;
int n1 = 12;
num n2 = 25;
num n3 = 1.17;
  • int: 정수형
  • double: 실수형
  • num: intdouble을 모두 포함하는 상위 타입

문자열 (String)

작은 따옴표('), 큰 따옴표("), 삼중 따옴표(''')를 사용해 문자열을 선언할 수 있다.

String s1 = 'Hello';
String s2 = "world";
String s3 = '''Flutter
is awesome!''';

삼중 따옴표는 여러 줄 문자열 작성에 유용하다.


논리 (bool)

bool isActive = true;
bool isVisible = false;

bool 타입은 true 또는 false 값을 가진다.


콜렉션 타입들

List (리스트, 배열과 유사)

List<String> fruits = ['Apple', 'Banana', 'Mango'];
  • 순서가 있는 데이터 모음이다.
  • 인덱스로 접근한다.

Set (집합)

Set<int> numbers = {1, 2, 3, 3};  // 중복 제거됨
  • 순서가 없고, 중복을 허용하지 않는다.

Map (딕셔너리)

Map<String, int> scores = {'Math': 90, 'English': 85};
  • 키-값 쌍으로 구성된다.

기타 타입들

Object

모든 Dart 객체의 최상위 타입

Object obj = 'Hello';  // 어떤 타입이든 저장 가능

Future

비동기 작업의 결과를 담는 타입

Future<String> getData() async {
  return 'Data received!';
}

⚡비동기(Asynchronous) 작업이란?
어떤 작업을 기다리지 않고 동시에 다른 작업을 처리할 수 있는 방식을 말한다. 예를 들어, 앱에서 서버에 데이터를 요청할 때 응답이 올 때까지 기다리는 대신, 그 사이 다른 UI 작업을 계속 처리할 수 있다면 비동기 방식이다.

dynamic

컴파일 타임에 타입이 정해지지 않고 런타임에 결정

dynamic x = 'text';
x = 123;  // 타입 변경 가능

변수 키워드 정리

  • var: 타입 추론. 초기 타입이 고정
  • dynamic: 타입을 자유롭게 변경 가능
  • final: 값을 한 번만 할당할 수 있음
  • const: 컴파일 타임에 고정된 상수
var a = 10;      // 이후 int 외 다른 타입 할당 불가
dynamic b = 10;  // 이후 어떤 타입이든 변경 가능
final c = 20;    // 한 번만 할당 가능
const d = 30;    // 컴파일 타임 상수

2. 연산자

산술 연산자

산술연산자


비교 연산자

비교연산자


논리 연산자

논리연산자


대입 연산자

대입연산자


증감 연산자

증감연산자

void main() {
  int a = 5;
  int b = 5;

  print(++a);  // 전위 증가: 먼저 1 증가 → 출력 = 6
  print(b++);  // 후위 증가: 먼저 출력 → 그 다음 1 증가 = 5

  print('a: $a');  // a는 이미 6
  print('b: $b');  // b는 이제 6
}

++, --의 위치에 따라 연산 순서가 달라진다:

  • ++a: 값을 먼저 증가시키고 출력
  • a++: 값을 출력한 뒤에 증가시킴

삼항 연산자

조건이 참이면 A, 거짓이면 B를 반환하는 짧은 if-else 문법

int a1 = 10;
int b1 = 4;

a1 > b1 ? print("$a1 이(가) 더 큽니다.") : print("$b1 이(가) 더 큽니다.");

3. Null Safety

Dart는 Null Safety를 지원하여 런타임 Null 오류(NPE)를 방지한다.

NPE (Null Pointer Exception)란?

  • null 값을 참조할 때 발생하는 오류
  • 컴파일러가 잡지 못해 앱 실행 중에 치명적 오류 발생 가능

Null Safety 사용법

1) Nullable Type: ? 사용

int? a = null;
String? str = null;

변수에 null이 들어갈 수 있음을 명시적으로 표시한다.


2) Non-null Assertion: ! 사용

String? name = 'Flutter';
print(name!);  // null 아님을 보장하고 사용

개발자가 "절대 null 아님!"을 확신할 때만 사용한다.


profile
Data Scientist, interested in CV, NLP

0개의 댓글