minjeong-oh
기록
minjeong-oh
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • ML & Neural Net (3)
    • ◼️GNN (1)
    • ◼️시계열 (1)
    • ◼️추천시스템 (0)
    • ◼️수학 (3)
    • Data Engineer (2)
    • ◼️Spark (1)
    • ◼️Kafka (1)
    • ◼️Elestic Search (0)
    • ◼️Redis (0)
    • ◼️ClickHouse (1)
    • Programming Language (4)
    • ◼️React (0)
    • ◼️Git (1)
    • ◼️Python (1)
    • ◼️C++ (33)
    • ◼️Fortran 99 (2)
    • ◼️OpenGL (7)
    • ◼️MFC (35)
    • ◼️Flutter (46)
    • ◼️Kotlin (1)
    • ◼️Android (1)
    • ◼️Java (1)
    • ◼️C (4)
    • Development (0)
    • ◼️디자인패턴 (0)
    • ◼️네트워크 (2)
    • ◼️인증 (1)
    • Computer Science (4)
    • 알고리즘 문제풀이 (12)
    • SQL 고득점 Kit 문제풀이 (8)
    • 취업준비 (0)
    • Notion 정리 글 (1)
    • Article Scrap (12)
      • Careerly - Q&A (7)
      • Careerly - Post (2)
    • 기타 등등 (16)

블로그 메뉴

  • 글쓰기
  • 홈
  • 태그
  • 방명록
  • 편집

공지사항

인기 글

태그

  • hello테마
  • API문서정리
  • 구조체배열포인터
  • kafka구축
  • SpringBootSwagger
  • 구조체매개변수
  • GSLB
  • 그램업그레이드
  • OpenGL회전
  • NextJSSwagger
  • 티스토리폰트배경색없애기
  • AI배워야하나
  • 리눅스파티션
  • 이것이C++이다책참고
  • mfc
  • 이차원구조체배열포인터
  • 인공지능개발자
  • 19년식그램램장착
  • 그램풀스팩업그레이드
  • 19년식그램SSD장착

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

◼️Flutter

[Flutter Dart] 널 안정성

2025. 1. 25. 07:29

코드팩토리의 플러터 프로그래밍 2판 책을 참고하여 공부용으로 작성한 게시글입니다.

 

 

📌 널 안정성

// 자료형? : null을 가질 수 있는 변수임을 명시
double? num1 = 1;

// ?가 붙지 않은 자료형에는 null 저장 불가능
double num2 = null;  => 에러

// ?? : 변수의 값이 null일때만 뒤의 명령어 실행되도록 함
num1 ??= 3;     //null 이 아니기 때문에 대입연산 실행안됨

num1 = null;
num1 ?? = 4;    //null 이기 때문에 대입연산이 실행됨

print(num1)  => 4

 

1. ?

: 널 타입 선언

// 변수가 null을 가질 수 있음을 선언
String? name;  // name은 null일 수 있음
String title;  // title은 반드시 non-null이어야 함

// 클래스의 속성에서도 사용 가능
class Person {
  String? nickname;  // null 가능
  String lastName;   // null 불가능
}

 

2. !

: 널이 아님을 보증

String? nullableName = "John";
String nonNullName = nullableName!;  // "이 값은 절대 null이 아님을 보증합니다"

// 주의! null일 경우 런타임 에러 발생
String? dangerousName = null;
print(dangerousName!);  // Runtime Error!

// 안전한 사용법
if (dangerousName != null) {
  print(dangerousName!);  // null 체크 후 사용
}​

 

3. ??

: 왼쪽 값이 널이면 오른쪽 사용

// null일 경우 대체값 제공
String? name;
String displayName = name ?? "Guest";  // name이 null이면 "Guest" 사용

// 연쇄 사용 가능
String? first;
String? second;
String result = first ?? second ?? "Default";

 

4. ??=

: 왼쪽값이 널일때만 오른쪽 값 할당

// 값이 null일 때만 할당
String? name;
name ??= "John";  // name이 null이면 "John" 할당
print(name);  // "John"

name ??= "Jane";  // name이 이미 null이 아니므로 할당되지 않음
print(name);  // 여전히 "John"

 

5. ?.

: 왼쪽 값이 null 이아니면 객체의 속성에 접근

class User {
  String? email;
}

User? user;
// null이 아닐 때만 속성 접근
print(user?.email);  // user가 null이면 null 반환

// 체이닝 가능
class Address {
  String? street;
}

class Person {
  Address? address;
}

Person? person;
print(person?.address?.street);  // 안전한 체인 접근

 

 

6. null 안전성 if 패턴 매칭문 

if (someValue case var x?) {
  // someValue가 null이 아니면 여기로 들어옴.
  // non-null 값이 x에 대입됨
} else {
  // someValue가 null이면 패턴 매칭이 실패해서 여기로 옴.
}

 

if (변수 case 매칭데이터자료형 변수?)

앞부분에 선언한 변수가 case 뒤의 변수에 대입되어서 타입이 확인된다.

 

패턴 매칭은 다음과 같이 쓰기도 한다.

if (shape case Circle(radius: var r) when r >= 5) {
  // shape가 Circle 타입이고 radius가 5 이상이면 매칭
}

 

#코드팩토리의플러터프로그래밍2판 #공부용

'◼️Flutter' 카테고리의 다른 글

[Flutter Dart] if, switch, for, while  (0) 2025.01.25
[Flutter Dart] is 연산자 타입 비교  (0) 2025.01.25
[Flutter Dart] 컬렉션 Set  (0) 2025.01.25
[Flutter Dart] 컬렉션 Map  (0) 2025.01.25
[Flutter Dart] 컬렉션 List  (0) 2025.01.25

    티스토리툴바