Design-loving front-end engineer
Ryong
Design-loving front-end engineer
전체 방문자
였늘
μ–΄μ œ
    • Framework
    • React
      • Concept
      • Library
      • Hook
      • Component
      • Test
    • NodeJS
    • Android
      • Concept
      • Code
      • Sunflower
      • Etc
    • Flutter
      • Concept
      • Package
    • Web
    • Web
    • CSS
    • Language
    • JavaScript
    • TypeScript
    • Kotlin
    • Dart
    • Algorithm
    • Data Structure
    • Programmers
    • Management
    • Git
    • Editor
    • VSCode
    • Knowledge
    • Voice
Design-loving front-end engineer

Ryong

[ Flutter ] Null Safety
Dart

[ Flutter ] Null Safety

2022. 1. 1. 18:13

Null Safety

πŸ’¬  널 μ•ˆμ •μ„±μ€ λ‹€νŠΈ 2.12.0 및 ν”ŒλŸ¬ν„° 2λΆ€ν„° 곡식 μ§€μ›λœλ‹€.

 

Null Safetyλž€?

πŸ’¬  널 μ•ˆμ •μ„± κΈ°λŠ₯을 ν™œμ„±ν™”ν•˜κ³  μ•„λž˜μ˜ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

int i = null;  // error

πŸ’¬  널 μ•ˆμ •μ„±μ„ λ„μž…ν•˜λ©΄ ν•΄λ‹Ή λ³€μˆ˜ νƒ€μž…μ΄ 널을 ν—ˆμš©ν•˜λŠ”μ§€ μ•„λ‹Œμ§€λ₯Ό μ •ν™•ν•˜κ²Œ λŒ€μž…ν•΄μ•Ό ν•œλ‹€.

πŸ’¬  널을 λŒ€μž…ν•˜κΈ° μœ„ν•΄μ„œλŠ” νƒ€μž… μ˜†μ— ?λ₯Ό 뢙이면 되며, ?κ°€ λΆ™μ–΄μžˆμ§€ μ•Šμ€ νƒ€μž…μ€ 널을 λŒ€μž…ν•  수 μ—†λ‹€.

int? i = null;  // OK

 

νƒ€μž… μ‹œμŠ€ν…œμ˜ λ³€ν™”

πŸ’¬  기쑴의 λ‹€νŠΈλŠ” λͺ¨λ“  νƒ€μž…μ΄ 널이 λŒ€μž…λ  수 μžˆμ—ˆκ³ , 널 νƒ€μž…μ€ μ΅œν•˜μœ„ νƒ€μž…μ΄μ—ˆλ‹€.

널 μ•ˆμ •μ„± 적용 μ „μ˜ νƒ€μž… μ‹œμŠ€ν…œ

πŸ’¬  널 μ•ˆμ •μ„±μ΄ μ μš©λ˜λ©΄μ„œ κΈ°μ‘΄ νƒ€μž…μ— 널이 λŒ€μž…λ  수 μ—†μœΌλ―€λ‘œ, 널 νƒ€μž…μ€ μ–΄λ– ν•œ νƒ€μž…κ³Όλ„ κ΄€κ³„μ—†λŠ” 별도 νƒ€μž…μœΌλ‘œ μ·¨κΈ‰λœλ‹€.

널 μ•ˆμ •μ„± 적용 ν›„μ˜ νƒ€μž… μ‹œμŠ€ν…œ

πŸ’¬  λ˜ν•œ, 널을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” νƒ€μž…κ³Ό 널을 ν—ˆμš©ν•˜λŠ” νƒ€μž…μœΌλ‘œ ꡬ뢄할 수 있게 λ˜μ—ˆκ³ , μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…μœΌλ‘œ μ·¨κΈ‰λœλ‹€.

πŸ’¬  널을 ν—ˆμš©ν•˜λŠ” νƒ€μž…μ˜ 경우 ν•΄λ‹Ή νƒ€μž…κ³Ό 널을 λͺ¨λ‘ λŒ€μž…ν•  수 μžˆμœΌλ―€λ‘œ μ•„λž˜μ™€ 같은 μƒμ†κ΄€κ³„λ‘œ ν‘œν˜„ν•  수 μžˆλ‹€.

널을 ν—ˆμš©ν•˜λŠ” νƒ€μž…κ³Ό λ„μ˜ 관계

πŸ’¬  널을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” νƒ€μž…μ—μ„œλŠ” 기쑴에 널이 μžλ¦¬ν–ˆλ˜ μ΅œν•˜μœ„ 객체에 μ–΄λ–€ 값도 담을 수 μ—†λŠ” NeverλΌλŠ” νŠΉμˆ˜ν•œ νƒ€μž…μ΄ μΆ”κ°€λ˜μ—ˆλ‹€.

널을 ν—ˆμš©ν•˜λŠ” νƒ€μž…μ—μ„œμ˜ 상속관계

 

Null에 μ•ˆμ „ν•œ μ½”λ“œ μž‘μ„±

λŠ¦μ€ μ΄ˆκΈ°ν™”

πŸ’¬  μ•„λž˜ μ½”λ“œλŠ” 널 μ•ˆμ •μ„±μ„ μ μš©ν–ˆμ„ λ•Œ λ¬Έλ²•μ μœΌλ‘œ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

class Person {
  int age;  // μ„ μ–Έμ‹œ null, error
  
  Person() {
    age = 20;
  }
}

πŸ’¬  μœ„ μ½”λ“œλ₯Ό μ•ˆμ „ν•˜κ²Œ 널에 μž‘μ„±ν•˜λ €λ©΄ late ν‚€μ›Œλ“œλ₯Ό μ„ μ–Έ μ•žμ— 뢙이면 λœλ‹€.

class Person {
  late int age;
  
  Person() {
    age = 20;  // μƒμ„±μžμ—μ„œ μ΄ˆκΈ°ν™” OK
  }
}

 

null일 수 μžˆλŠ” 값을 μ²˜λ¦¬ν•˜λŠ” 방법

A?.B

πŸ’¬  Aκ°€ null이 μ•„λ‹ˆλ©΄ A 객체의 B 속성을 μ‚¬μš©ν•˜κ³ , null이면 κ·Έλƒ₯ null을 λ°˜ν™˜

String? name;
print(name.length);  //Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
print(name?.length);  //?.둜 μ²˜λ¦¬ν•΄ μ£Όλ©΄ μ—λŸ¬κ°€ λ‚˜μ§€ μ•ŠμŒ

A ?? B

πŸ’¬  Aκ°€ null이면 Bλ₯Ό λ°˜ν™˜

int age = 16;
int myAge = age ?? 20;
print(myAge);  // ageκ°€ null이 μ•„λ‹ˆλ―€λ‘œ 16

A ??= B

πŸ’¬  μœ„μ™€ λ°˜λŒ€λ‘œ Bκ°€ null이면 백업값을 ν• λ‹Ήν•˜κ³ , μ•„λ‹ˆλ©΄ Bλ₯Ό λ°˜ν™˜

int age;
int myAge = 24;
myAge ??= age;
print(myAge);  // ageκ°€ nullμ΄λ―€λ‘œ 24

 

πŸ’¬  널을 ν—ˆμš©ν•˜λŠ” νƒ€μž…μ„ λ§€κ°œλ³€μˆ˜λ‘œ μ‚¬μš©ν•˜λŠ” λ©”μ„œλ“œκ°€ μžˆλ‹€λ©΄ νƒ€μž…μ„ λͺ…μ‹œν•΄μ€˜μ•Ό ν•œλ‹€.

int len(String? str) {
  if (str == null) {
    return 0;
  }
  return str.length;
}

πŸ’¬  널일 수 μžˆλŠ” λ³€μˆ˜μ— 널이 μ•„λ‹Œ 값이 λ“€μ–΄μžˆμ„ 경우, 널이 μ•„λ‹Œ νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•˜κ³  싢을 λ•Œ, !을 뢙이면 κ°•μ œλ‘œ 널이 μ•„λ‹˜μ„ λͺ…μ‹œν•˜κ²Œ λœλ‹€.

int? nullableValue = 10;
int value = nullableValue!;  // !을 뢙이면 null이 μ•„λ‹˜μ„ λͺ…μ‹œν•˜μ—¬ ν˜• λ³€ν™˜μ΄ 됨

  β—½  nullableValueκ°€ 널이면 μ˜ˆμ™Έ λ°œμƒμœΌλ‘œ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œλ˜κΈ° λ•Œλ¬Έμ— 가급적 !λ³΄λ‹€λŠ” ??을 ν™œμš©ν•˜λ„λ‘ ν•˜μž.

πŸ’¬  μ»¬λ ‰μ…˜μ„ λ‹€λ£° λ•Œμ—λ„ μ•„λž˜μ™€ 같이 λͺ…ν™•νžˆ νƒ€μž…μ„ λͺ…μ‹œν•΄ μ€˜μ•Ό ν•œλ‹€.

List<String>
List<String>?
List<String?>
List<String?>?

 

μ €μž‘μžν‘œμ‹œ

'Dart' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[ Dart ] μ—λŸ¬, μ˜ˆμ™Έ 상황 μ œμ–΄ν•˜κΈ°  (0) 2022.02.04
[ Dart ] 기타 μœ μš©ν•œ 기법  (0) 2021.12.21
[ Dart ] ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°  (0) 2021.12.21
[ Dart ] μ»¬λ ‰μ…˜  (0) 2021.12.21
[ Dart ] 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°  (0) 2021.12.21
    'Dart' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [ Dart ] μ—λŸ¬, μ˜ˆμ™Έ 상황 μ œμ–΄ν•˜κΈ°
    • [ Dart ] 기타 μœ μš©ν•œ 기법
    • [ Dart ] ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°
    • [ Dart ] μ»¬λ ‰μ…˜
    Design-loving front-end engineer
    Design-loving front-end engineer
    λ””μžμΈμ— 관심이 λ§Žμ€ λͺ¨λ°”일 μ•± μ—”μ§€λ‹ˆμ–΄ Ryongμž…λ‹ˆλ‹€.

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”