[C# 8.0] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ (2) - Nullable Reference Type, ์ธ๋ฑ์‹ฑ๊ณผ ์Šฌ๋ผ์ด์‹ฑ

2023. 2. 17. 14:15ยท๐Ÿ“ Language/โœ C#

C# 8.0์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ

3. Nullable Reference Type

์ด์ „ ๋ฒ„์ „์—์„œ๋Š” reference ํƒ€์ž…์— null์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์–ด Null Reference Exception์ด ์ž์ฃผ ๋ฐœ์ƒ๋˜๊ณค ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ C# 8.0์—์„œ๋Š” reference ํƒ€์ž…์— null์„ ํ• ๋‹นํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ฒฝ๊ณ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

  • reference ํƒ€์ž…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ null์„ ๋„ฃ์„ ์ˆ˜ ์—†๋Š” Non-nullable Reference Type์ด ๋˜๊ณ , NULL์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ ˆํผ๋Ÿฐ์Šค ํƒ€์ž… ๋’ค์— ๋ฌผ์Œํ‘œ(?)๋ฅผ ๋ถ™์—ฌ Nullable Reference Type์ž„์„ ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค.
  • Nullable Reference Type ๊ธฐ๋Šฅ์€ ๋””ํดํŠธ๋กœ Disable ๋˜์–ด ์žˆ์œผ๋ฉฐ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”„๋กœ์ ํŠธ ๋ ˆ๋ฒจ์ด๋‚˜ ํŒŒ์ผ ๋ ˆ๋ฒจ, ํ˜น์€ ์†Œ์Šค์ฝ”๋“œ ๋‚ด์˜ ์ž„์˜์˜ ์œ„์น˜์—์„œ Enable ํ•ด์•ผ ํ•œ๋‹ค.
static void Main(string[] args)
{
    // nullable enable
    string s1 = null; // Warning: Converting null literal or possible null value to non-nullable type
    if (s1 == null) return;

    string? s2 = null;
    if (s2 == null) return;

    // nullable disable
    string s3 = null; // No Warning
    if (s3 == null) return;
}

 

4. ์ธ๋ฑ์‹ฑ๊ณผ ์Šฌ๋ผ์ด์‹ฑ

1) ์ธ๋ฑ์‹ฑ

System.Index ๊ตฌ์กฐ์ฒด๋Š” ์‹œํ€€์Šค์˜ ์‹œ์ž‘ ๋˜๋Š” ๋์œผ๋กœ๋ถ€ํ„ฐ ์ธ๋ฑ์‹ฑ์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

  • ^ prefix ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์‹œํ€€์Šค๋ฅผ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ธ๋ฑ์‹ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹œํ€€์Šค์˜ ๋ ์ธ๋ฑ์Šค๋ฅผ ^1, ๋์—์„œ 2๋ฒˆ์งธ๋Š” ^2, ๋์—์„œ 3๋ฒˆ์งธ๋Š” ^3๊ณผ ๊ฐ™์ด ํ‘œ์‹œํ•œ๋‹ค.
string s = "Hello World";

// System.Index
Index idx = ^2;
ch = s[idx]; // l

// ์˜ˆ
char ch1 = s[0];  // H
char ch1 = s[1];  // e
char ch2 = s[^1]; // d
char ch2 = s[^2]; // l

 

2) ์Šฌ๋ผ์ด์‹ฑ

System.Range ๊ตฌ์กฐ์ฒด๋Š” ์‹œ์ž‘๊ณผ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ง€๋ฉฐ ๋ฒ”์œ„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

  • .. ๋ฒ”์œ„ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์‹œํ€€์Šค์˜ ๋ถ€๋ถ„ ์ธ๋ฑ์Šค๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋Š” ์‹ค์ œ ๋ฒ”์œ„์˜ ๋งˆ์ง€๋ง‰ ๋‹ค์Œ ์š”์†Œ์ด๋‹ค. ์ฆ‰, Range ๊ฐ€ 1..4์ด๋ฉด 1๋ถ€ํ„ฐ 3๊นŒ์ง€๊ฐ€ ์‹ค์ œ ๋ฒ”์œ„๊ฐ€ ๋œ๋‹ค.
string s = "Hello World";

// System.Range
Range r1 = 1..4;
string str1 = s[r1]; // ell

Index start = r1.Start;
bool b = start.IsFromEnd; // false
int v1 = start.Value;  // 1
int v2 = r1.End.Value; // 4

// ์˜ˆ
var s1 = s[1..4];   // ell
var s2 = s[^5..^2]; // Wor
var s3 = s[..];  // Hello World
var s4 = s[..3]; // Hel
var s5 = s[3..]; // lo World

Range rng = 1..^0;
var s6 = s[rng];  // ello World
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Language/โœ C#' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [C#] string ๊ฐ์ฒด ์‚ฌ์šฉ์—์„œ ํ”ํžˆ ํ•˜๋Š” ์‹ค์ˆ˜
  • [C# 8.0] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ (3) - using ์„ ์–ธ, ๋„ ๋ณ‘ํ•ฉ ํ• ๋‹น์ž, ๊ตฌ์กฐ์ฒด ์ฝ๊ธฐ ์ „์šฉ ๋ฉค๋ฒ„
  • [C# 8.0] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ (1) - ๋””ํดํŠธ ์ธํ„ฐํŽ˜์ด์Šค ๋ฉค๋ฒ„, ํŒจํ„ด ๋งค์นญ
  • [C# 7.0] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ (4) - ์ข…๋ฃŒ์ž(Deconstructor), ref local, ref return
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
[C# 8.0] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ (2) - Nullable Reference Type, ์ธ๋ฑ์‹ฑ๊ณผ ์Šฌ๋ผ์ด์‹ฑ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”