[C# 6.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (2) - λ¬Έμž₯ 레벨, 클래슀 멀버 레벨

2022. 12. 23. 20:39Β·πŸ“ Language/✏ C#

C# 6.0의 μƒˆλ‘œμš΄ κΈ°λŠ₯

2. λ¬Έμž₯ λ ˆλ²¨

1) using static λ¬Έ

static λ©”μ„œλ“œ(ν˜Ήμ€ 속성)λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” 클래슀λͺ….λ©”μ„œλ“œλͺ…(ν˜Ήμ€ 속성λͺ…)κ³Ό 같이 클래슀λͺ…을 λ°˜λ“œμ‹œ μ•žμ— μ§€μ •ν•΄ μ£Όμ–΄μ•Ό ν–ˆλ‹€. C# 6.0μ—μ„œλŠ” using static을 μ‚¬μš©ν•΄ 미리 μ§€μ •ν•΄ μ€€λ‹€λ©΄, ν•΄λ‹Ή 파일 λ‚΄μ—μ„œλŠ” 클래슀λͺ… 없이 직접 μ‚¬μš©ν•  수 μžˆλ‹€.

using static System.Console;

namespace CS6
{
    class Program
    {
        static void Main(string[] args)
        {           
            // Console. μƒλž΅ κ°€λŠ₯ 
            WriteLine("csharpstudy.com");
        }
    }
}

 

2) catch/finally λΈ”λ‘μ—μ„œ await μ‚¬μš©

C# 5.0μ—μ„œλŠ” awaitλ₯Ό catch/finally λΈ”λ‘μ—μ„œ μ‚¬μš©ν•  수 μ—†μ—ˆμ§€λ§Œ, C# 6.0μ—μ„œλŠ” 이λ₯Ό 기본적으둜 μ§€μ›ν•˜κ²Œ λ˜μ—ˆλ‹€. catch λΈ”λ‘μ—μ„œ 일반적으둜 μ—λŸ¬λ₯Ό λ‘œκΉ…μ„ ν•˜λŠ” κ²½μš°κ°€ λ§Žμ€λ°, μ΄λ•Œ λ‘œκΉ… 처리λ₯Ό λΉ„λ™κΈ°μ μœΌλ‘œ ν•˜κΈ° μœ„ν•΄ awaitλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

IDbConnection conn;
try
{
    //...
    var response = await req.GetResponseAsync();
    //...
}
catch (Exception ex)
{
    // μ—λŸ¬λ₯Ό λΉ„λ™κΈ°λ‘œ λ‘œκΉ…
    await Log(ex);
}            
finally
{
    // Closeλ₯Ό λΉ„λ™κΈ°λ‘œ 처리
    await Close(conn);
}

 

3) Exception Filter μ§€μ›

Exception FilterλŠ” catch μ‹œ νŠΉμ •ν•œ 쑰건으둜만 λ‹€μ‹œ ν•„ν„°λ§ν•˜λŠ” κ²ƒμœΌλ‘œ catch() λ¬Έ 뒀에 좔가적인 when 쑰건문을 μ‚¬μš©ν•˜λ©΄ λœλ‹€.

try
{
    //...
}
catch(Win32Exception ex) when (ex.NativeErrorCode == 0x10)
{
    Log(ex);
}

 

3. 클래슀 멀버 레벨

1) μžλ™ 속성 초기자(Auto Property Initializer)

μžλ™ 속성(Auto Property)은 ν•„λ“œλ₯Ό μ§€μ •ν•  ν•„μš”κ°€ 없이 μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ ν•΄λ‹Ή ν•„λ“œ(backing field)λ₯Ό λ§Œλ“€μ–΄ μ£ΌλŠ” μ†μ„±μœΌλ‘œ C# 6.0μ—μ„œλŠ” 이 μžλ™ 속성에 μ΄ˆκΈ°κ°’ 지정이 κ°€λŠ₯ν•΄μ‘Œλ‹€.

class Person
{
    public string Name { get; set; } = "(No name)";
}

 

2) 읽기 μ „μš© μžλ™ 속성(Getter only)

μžλ™ 속성은 항상 getκ³Ό set을 ν•¨κ»˜ μ‚¬μš©ν•΄μ•Ό ν–ˆλ‹€. λ§Œμ•½ 외뢀에 읽기만 ν—ˆμš©ν•  경우, { get; private set; }κ³Ό 같이 set μ•‘μ„ΈμŠ€ μ œν•œμ„ ν•΄μ•Ό ν•˜λŠ” λ²ˆκ±°λ‘œμ›€μ΄ μžˆμ—ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이제 C# 6.0μ—μ„œλŠ” get만 μ‚¬μš©λ„ κ°€λŠ₯ν•˜μ—¬ 이전에 λ³΅μž‘ν•˜κ²Œ κ΅¬ν˜„λ˜μ—ˆλ˜ Immutable Property(λ³€κ²½ λΆˆκ°€λŠ₯ν•œ 속성)을 κ°„λ‹¨νžˆ κ΅¬ν˜„ν•  수 있게 λ˜μ—ˆλ‹€.

class Person
{
    public string Name { get; set; } = "(No name)";

    // μ΄ˆκΈ°ν™” 없을 경우 λ””ν΄λ“œκ°’ μ‚¬μš©
    public string Nickname { get; } 
    public int Age { get; } 

    // Auto Property Initializer μ‚¬μš©ν•˜μ—¬ μ΄ˆκΈ°κ°’ ν• λ‹Ή
    public bool Enabled { get; } = true;

    // μƒμ„±μžμ—μ„œ μ΄ˆκΈ°κ°’ ν• λ‹Ή
    public int Level { get; }       
    public Person()
    {
        this.Level = 1;
    }
}

static void Main(string[] args)
{
    Person p = new Person();
    Console.WriteLine(p.Name);
    Console.WriteLine(p.Nickname); // null 좜λ ₯
    Console.WriteLine(p.Age); // 0 좜λ ₯
}

 

3) Expression-bodied member μ‚¬μš©

μ†μ„±μ΄λ‚˜ λ©”μ„œλ“œλŠ” 보톡 μ—¬λŸ¬ λ¬Έμž₯λ“€λ‘œ κ΅¬μ„±λœ 블둝을 μ‹€ν–‰ν•œλ‹€. C# 6.0μ—μ„œλŠ” μ†μ„±μ΄λ‚˜ λ©”μ„œλ“œμ˜ 블둝이 κ°„λ‹¨ν•œ 경우 ν•¨μˆ˜μ‹(expression)을 μ‚¬μš©ν•  수 μžˆλŠ”λ°, 이λ₯Ό Expression-bodied member ν‘œν˜„μ΄λΌ ν•œλ‹€. μ΄λŠ” 기쑴의 λžŒλ‹€μ‹κ³Ό μœ μ‚¬ν•˜λ©° μ†μ„±μ΄λ‚˜ λ©”μ„œλ“œ Bodyλ₯Ό κ°„λž΅ν•œ λžŒλ‹€μ‹μ²˜λŸΌ ν‘œν˜„ν•œ 것이닀.

// 기쑴의 속성
public int Area
{
    get 
    {
        return Height * Width;
    }
}

// Expression-bodied member ν‘œν˜„
public int Area => Height * Width;

// λ‹€μ–‘ν•œ Expression-bodied member ν‘œν˜„
// 1. λ©”μ„œλ“œμ—μ„œ ν•˜λ‚˜μ˜ Point 객체 리턴
public Point Move(int x, int y) => new Point(X+x, Y+y); 

// 2. λ©”μ„œλ“œμ—μ„œ void 리턴
public void Print() => Console.WriteLine(data);

// 3. μ†μ„±μ—μ„œ get 리턴
public string Name => FirstName + " " + LastName; 

// 4. μΈλ±μ„œμ—μ„œ Customer 객체 리턴
public Customer this[int id] => db.FindCustomer(id);

// 5. μ—°μ‚°μž λ©”μ„œλ“œ ν‘œν˜„
public static Complex operator +(Complex a, Complex b) => a.Add(b);
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ C#' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [C# 7.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (2) - νŠœν”Œ(Tuple), 둜컬 ν•¨μˆ˜(Local Function)
  • [C# 7.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (1) - νŒ¨ν„΄ λ§€μΉ­
  • [C# 6.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (1) - ν‘œν˜„μ‹ 레벨
  • [C#] Partial νƒ€μž…, Partial λ©”μ„œλ“œ
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# 6.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (2) - λ¬Έμž₯ 레벨, 클래슀 멀버 레벨
μƒλ‹¨μœΌλ‘œ

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