[C# 7.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (4) - μ’…λ£Œμž(Deconstructor), ref local, ref return

2023. 2. 3. 18:21Β·πŸ“ Language/✏ C#

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

6. μ’…λ£Œμž(Deconstructor)

μ’…λ£Œμž(Deconstructor)λŠ” μƒμ„±μž(Constructor)와 λŒ€μΉ­μ μΈ κ°œλ…μ΄μ§€λ§Œ 파괴자(Destructor)μ™€λŠ” λ‹€λ₯΄λ‹€.

  • μƒμ„±μžλŠ” 보톡 μ™ΈλΆ€μ—μ„œ μž…λ ₯ νŒŒλΌλ―Έν„°λ₯Ό λ°›μ•„λ“€μ—¬ 이λ₯Ό ν•„λ“œμ— μ €μž₯ν•˜λŠ” 역할을 ν•œλ‹€.
  • μ’…λ£ŒμžλŠ” ν•„λ“œμ˜ 값듀을 μ™ΈλΆ€λ‘œ μ „λ‹¬ν•˜λŠ” 역할을 ν•œλ‹€.
  • νŒŒκ΄΄μžλŠ” λΆˆν•„μš”ν•œ λ¦¬μ†ŒμŠ€λ₯Ό μ œκ±°ν•˜λŠ” 역할을 ν•œλ‹€.
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            BasicInfo person = new BasicInfo(1, "Lee", 10);
            var (id, name, age) = person;
            WriteLine($"{id} - {name}");
        }
    }

    class BasicInfo
    {
        private int _id;
        private string _name;
        private int _age;

        // Constructor
        public BasicInfo(int id, string name, int age)
        {
            this._id = id;
            this._name = name;
            this._age = age;
        }

        // Deconstructor
        public void Deconstruct(out int id, out string name, out int age)
        {
            id = this._id;
            name = this._name;
            age = this._age;
        }
    }
}

 

7. ref local, ref return

1) ref local

ref localλŠ” 둜컬 λ³€μˆ˜μ— λŒ€ν•΄ refλ₯Ό μ μš©ν•œ κ²ƒμœΌλ‘œ λ™μΌν•œ λ©”λͺ¨λ¦¬ 곡간에 λŒ€ν•œ 레퍼런슀λ₯Ό λ§ν•œλ‹€.

int a = 1;
ref int b = ref a; // ref local

b = 2;
WriteLine($"{a}, {b}");  // 2, 2

 

2) ref return

이전 λ²„μ „μ—μ„œλŠ” λ©”μ„œλ“œμ˜ μž…λ ₯ νŒŒλΌλ―Έν„°μ— λŒ€ν•΄μ„œλ§Œ refλ₯Ό μ μš©ν•  수 μžˆμ—ˆμ§€λ§Œ, C# 7.0μ—μ„œλŠ” ref return을 μ‚¬μš©ν•˜μ—¬ 리턴 νƒ€μž…μ— λŒ€ν•΄μ„œλ„ ν—ˆμš©ν•˜κ²Œ λ˜μ—ˆλ‹€. 이 refλŠ” 큰 μš©λŸ‰μ˜ λ°μ΄ν„°μ—μ„œ νŠΉμ • μš”μ†Œλ₯Ό λ¦¬ν„΄ν•˜μ—¬ μ½κ±°λ‚˜ λ³€κ²½ν•  λ•Œ μœ μš©ν•˜λ‹€.

using static System.Console;

namespace ConsoleApp1
{
    class Program
    {
        static GameData _gameData = new GameData();

        static void Main(string[] args)
        {
            ref int score10 = ref _gameData.GetScore(10);
            score10 = 99;
            WriteLine(_gameData.GetScore(10)); // 99
        }
    }

    class GameData
    {
        private int[] scores = new int[100];

        // ref return 
        public ref int GetScore(int id)
        {
            return ref scores[id];
        }
    }
}
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ C#' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [C# 8.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (2) - Nullable Reference Type, 인덱싱과 μŠ¬λΌμ΄μ‹±
  • [C# 8.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (1) - λ””ν΄νŠΈ μΈν„°νŽ˜μ΄μŠ€ 멀버, νŒ¨ν„΄ λ§€μΉ­
  • [C# 7.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (3) - out νŒŒλΌλ―Έν„°, λ¦¬ν„°λŸ΄ ν‘œν˜„
  • [C# 7.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (2) - νŠœν”Œ(Tuple), 둜컬 ν•¨μˆ˜(Local Function)
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# 7.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (4) - μ’…λ£Œμž(Deconstructor), ref local, ref return
μƒλ‹¨μœΌλ‘œ

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