250x250
Rainbow🌈Coder
My dev NoteπŸ“’
Rainbow🌈Coder
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (411)
    • 곡지사항 (0)
    • Debugger (10)
      • Visual Studio Debugger (1)
      • Chrome DevTools (3)
      • Visual Studio Code Debugger (4)
      • eclipse (1)
      • intelliJ (1)
    • OOP (2)
      • OOP (2)
    • TypeScript (54)
      • νƒ€μž…μŠ€ν¬λ¦½νŠΈ TypeScript (54)
    • Javascript (87)
      • Javascript (45)
      • Node.js (19)
      • React (5)
      • FE κ°œλ°œν™˜κ²½μ„€μ • (3)
      • React와 Node 같이 λ•Œλ €μž‘κΈ° (6)
      • next.js (2)
      • pixi.js (7)
    • λ§ˆν¬μ—… (23)
      • Html & Css (23)
    • C# (80)
      • C# (12)
      • 이것이 C#이닀 (68)
    • C++ (30)
      • c++ (27)
      • win api (3)
    • Unity (18)
      • Unity(기초) (8)
      • Unity(C#쀑급) (5)
      • μœ λ‹ˆν‹° 포톀(λ„€νŠΈμ›Œν¬) (4)
      • unity c# MyCode (1)
    • Java & Spring (29)
      • Java (11)
      • μŠ€ν”„λ§ (8)
      • Java Algorithm (9)
      • Javs Data Structures (1)
    • μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜ (15)
      • 자료ꡬ쑰 (5)
      • μ•Œκ³ λ¦¬μ¦˜ (10)
    • ν˜•μƒκ΄€λ¦¬ (15)
      • Git (11)
      • μ†ŒμŠ€νŠΈλ¦¬ (3)
    • κ·Έλž˜ν”½μŠ€ (7)
      • WebGl (7)
    • AWS (3)
      • aws (3)
    • λ¦¬λˆ…μŠ€ (5)
      • λ¦¬λˆ…μŠ€ (5)
    • μ±… 리뷰 (13)
      • ν΄λ¦°μ½”λ“œ(책리뷰) (3)
      • μœ μ§€λ³΄μˆ˜κ°€λŠ₯ν•œμ½”λ”©μ˜κΈ°μˆ C#편(책리뷰) (1)
      • λ¦¬νŒ©ν† λ§(μžλ°”μŠ€ν¬λ¦½νŠΈνŒ) (9)
    • Server (2)
      • κ²Œμž„ μ„œλ²„(λ„€νŠΈμ›Œν¬, λ©€ν‹°μ“°λ ˆλ“œ,OS) (2)
    • 섀계, 아킀텍쳐 (4)
    • 파이썬 (5)
    • λ””μžμΈνŒ¨ν„΄ (2)
    • mocha (2)
    • Jest (1)
    • Spine (1)
    • 인곡지λŠ₯ (1)
      • ν˜Όμžκ³΅λΆ€ν•˜λŠ”λ¨Έμ‹ λŸ¬λ‹+λ”₯λŸ¬λ‹ (1)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

곡지사항

인기 κΈ€

νƒœκ·Έ

  • MySQL
  • μœ„μž„
  • γ…£γ„·
  • μ»΄ν¬μ§€μ…˜

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Rainbow🌈Coder

My dev NoteπŸ“’

C#/이것이 C#이닀

7. Nullable, HasValue, Value

2022. 2. 7. 14:42
728x90

< Nullable > : λΉ„μ–΄ μžˆλŠ” μƒνƒœκ°€ λ  μˆ˜ μžˆλŠ” ν˜•식

 

Null(λΉ„μ–΄μžˆλŠ”) + able(~될 수 μžˆλŠ”) = "λΉ„μ–΄ μžˆλŠ” μƒνƒœκ°€ 될 수 μžˆλŠ”"

using System;
using System.Text;
using static System.Console;

namespace Hello
{

    class MainApp
    {
        static void Main(string[] args)
        {
            int? a = null;
            int? b = null;
            int? c = null;
            //int d = null; 컴파일 였λ₯˜!
        }
    }
}

ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ‹€ 보면 μ–΄λ–€ 값도 κ°€μ§€μ§€ μ•ŠλŠ” λ³€μˆ˜κ°€ ν•„μš”ν•  λ•Œκ°€ μžˆλ‹€.

0이 μ•„λ‹Œ λΉ„μ–΄μžˆλŠ” λ³€μˆ˜,

즉 null μƒνƒœμΈ λ³€μˆ˜λ₯Ό μ›ν•œλ‹€λ©΄

λ³€μˆ˜μ—κ²Œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ 곡간을 λΉ„μ›Œλ‘˜ 수 μžˆλ„λ‘ Nullable ν˜•μ‹μ„ μ‚¬μš©ν•˜λ©΄ λœλ‹€.(κ°’ ν˜•μ‹μ— ν•œν•˜μ—¬)

 

Nullable ν˜•μ‹μ˜ λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•ŒλŠ” μ›λž˜μ˜ 데이터 ν˜•μ‹ 이름 뒀에 '?'만 λΆ™μ—¬μ£Όλ©΄ λœλ‹€.

 

λ°μ΄ν„°ν˜•μ‹ ? λ³€μˆ˜μ΄λ¦„;

 

 

int d = null;κ°€ 컴파일 였λ₯˜κ°€ λ‚˜λŠ” μ΄μœ λŠ”

int ν˜•μ‹μ€ λΉ„μ›Œλ‘˜ 수 μ—†κ³ (null 값을 κ°€μ§ˆ 수 μ—†λŠ”) 데이터 ν˜•μ‹μ΄κΈ° λ•Œλ¬Έμ΄λ‹€.

 

 

< HasValue, Value >

λͺ¨λ“  Nullable ν˜•μ‹μ€ HasValue와 Value 두 κ°€μ§€ 속성을 κ°–κ³  μžˆλ‹€. (intλŠ” 컴파일 μ—λŸ¬!)

HasValue 속성은 ν•΄λ‹Ή λ³€μˆ˜κ°€ 값을 κ°–κ³  μžˆλŠ”μ§€ λ˜λŠ” κ·Έλ ‡μ§€ μ•Šμ€μ§€λ₯Ό λ‚˜νƒ€λ‚΄κ³ ,

Vlaue 속성은 λ³€μˆ˜μ— 담겨 μžˆλŠ” 값을 보여쀀닀.

using System;
using System.Text;
using static System.Console;

namespace Hello
{
    class MainApp
    {
        static void Main(string[] args)
        {
            int? a = null;
            int? b = 10;
            WriteLine(a.HasValue); //False
            WriteLine(b.HasValue); //True
            WriteLine(b.Value); //10
            a = 8;
            WriteLine(a.HasValue); //True
            WriteLine(a.Value); //8
        }
    }
}

 

비정상적인 μ ‘κ·Ό μ‹œλ„:  μ–΄λ–€ Nullable ν˜•μ‹ λ³€μˆ˜μ˜ HasValue 속성이 False 값을 κ°–κ³  μžˆλ‹€λ©΄

κ·Έ λ³€μˆ˜λŠ” λΉ„μ–΄ μžˆλ‹€λŠ” λœ»μ΄λ‹€.

이 λ³€μˆ˜μ— λŒ€ν•΄ Value 속성을 μ΄μš©ν•˜μ—¬ 값을 κΊΌλ‚΄λ € μ‹œλ„ν•˜λ©΄

CLR은 InvaildOperation Exception μ˜ˆμ™Έλ₯Ό λ„μšΈ 것이닀.

using System;
using System.Text;
using static System.Console;

namespace Hello
{

    class MainApp
    {
        static void Main(string[] args)
        {
            int? a = null;

            WriteLine(a.HasValue); //False
            WriteLine(a.Value); 
        }
    }
}

좜λ ₯

False

μ²˜λ¦¬λ˜μ§€ μ•Šμ€ μ˜ˆμ™Έ: System.InvalidOperationException: Null ν—ˆμš© κ°œμ²΄μ—λŠ” 값이 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
   μœ„μΉ˜: System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   μœ„μΉ˜: System.Nullable`1.get_Value()

λ”°λΌμ„œ Nullable ν˜•μ‹μ„ μ‚¬μš©ν•  λ•ŒλŠ” HasValue 속성을 ν™•μΈν•˜κ±°λ‚˜ nullκ³Ό 같은지λ₯Ό λΉ„κ΅ν•˜μ—¬

λ³€μˆ˜κ°€ λΉ„μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 사전 검사가 ν•„μš”ν•˜λ‹€. 

728x90

'C# > 이것이 C#이닀' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

9. 곡용 ν˜•μ‹ μ‹œμŠ€ν…œ  (0) 2022.02.07
8. Var, Object ν˜•μ‹κ³Όμ˜ 차이?  (0) 2022.02.07
6. μƒμˆ˜μ™€ μ—΄κ±° ν˜•μ‹ (const, enum): ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μ‹€μˆ˜λ₯Ό λ§‰λŠ” μž₯치  (0) 2022.02.07
5. Parse와 ToString() λ¬Έμžμ—΄μ„ 숫자둜, 숫자λ₯Ό λ¬Έμžμ—΄λ‘œ  (0) 2022.02.07
4. object ν˜•μ‹, λ°•μ‹±κ³Ό μ–Έλ°•μ‹±  (0) 2022.02.07
    'C#/이것이 C#이닀' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • 9. 곡용 ν˜•μ‹ μ‹œμŠ€ν…œ
    • 8. Var, Object ν˜•μ‹κ³Όμ˜ 차이?
    • 6. μƒμˆ˜μ™€ μ—΄κ±° ν˜•μ‹ (const, enum): ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μ‹€μˆ˜λ₯Ό λ§‰λŠ” μž₯치
    • 5. Parse와 ToString() λ¬Έμžμ—΄μ„ 숫자둜, 숫자λ₯Ό λ¬Έμžμ—΄λ‘œ
    Rainbow🌈Coder
    Rainbow🌈Coder
    λͺ°λΌλ„ 결ꡭ은 μ•„λŠ” 개발자, 그런 μ‚¬λžŒμ΄ 되기 μœ„ν•œ 맀일의 ν•œκ±ΈμŒ

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