관리 메뉴

Algo μ“°μž

02. μƒμ„±μžμ™€ μ’…λ£Œμž λ³Έλ¬Έ

πŸ’» Programming Language/C#

02. μƒμ„±μžμ™€ μ’…λ£Œμž

S.Honey 2022. 4. 6. 09:12
  • CLR(Common Language Runtime) => Garbage Collector λ₯Ό 포함/ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•œ μ‹€ν–‰ν™˜κ²½μ„ μ œκ³΅ν•˜λŠ” 것.
  • Garbage Collector => λ©”λͺ¨λ¦¬λ₯Ό μžλ™μœΌλ‘œ 관리
CLR의 Garbage Collectorκ°€ 객체가 μ†Œλ©Έλ˜λŠ” μ‹œμ μ„ νŒλ‹¨ν•΄μ„œ μ’…λ£Œμžλ₯Ό ν˜ΈμΆœν•œλ‹€. 

μ’…λ£ŒμžλŠ” 될 수 μžˆλŠ”ν•œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€.

  • κΈ°λ³Έμƒμ„±μž : λ§€κ°œλ³€μˆ˜κ°€ 없이 μ‚¬μš©ν•˜λŠ” μƒμ„±μž
  • μ‚¬μš©μž 지정 μƒμ„±μž : λ§€κ°œλ³€μˆ˜λ₯Ό κ°€μ§€λŠ” μƒμ„±μžμ΄λ©°, μ‚¬μš©μžκ°€ λ³„λ„λ‘œ 선언해야함. μ΄λ•Œ μ‚¬μš©μž 지정 μƒμ„±μžλ₯Ό λ§Œλ“ λ‹€λ©΄ κΈ°λ³Έμƒμ„±μžλŠ” μžλ™μœΌλ‘œ μƒμ„±λ˜μ§€ μ•ŠμŒ. λ”°λΌμ„œ μ‚¬μš©μž 지정 μƒμ„±μžλ₯Ό μ„ μ–Έν•˜μ˜€μ„λ•Œ κΈ°λ³Έμƒμ„±μžλ₯Ό μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ λ³„λ„λ‘œ μ„ μ–Έν•΄ 주어야함.
  • μ’…λ£Œμž : 클래슀의 이름에 ~ λ₯Ό λΆ™νžŒ ν˜•νƒœ
    μƒμ„±μžμ™€ 달리 ν•œμ •μžλ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  λ§€κ°œλ³€μˆ˜λ„ μ—†λ‹€. λ˜ν•œ μ—¬λŸ¬κ°œμ˜ μ’…λ£Œμžλ₯Ό overloading도 λΆˆκ°€λŠ₯ν•˜λ©°, 직접 ν˜ΈμΆœν•  수 μ—†λ‹€.
  • 문자 ν¬λ§·νŒ… : $
    C# 6.0 μ—μ„œλŠ” ν¬λ§·νŒ…μ„ ν•  λ•Œ $ 기호λ₯Ό μ΄μš©ν•˜μ—¬ ν‘œν˜„ν•  수 μžˆλ„λ‘ ν•˜κ³  μžˆλ‹€.단, $κΈ°ν˜ΈλŠ” λ¬Έμžμ—΄μ— λ°”λ‘œ 뢙여야됨. 곡백없이.
  • Console.WriteLine("{0} λ‹€μŒμ— λ΄¬μš”!", name); λŒ€μ‹ μ— Console.WriteLine(\$"{name}λ‹˜ λ‹€μŒμ— λ΄¬μš”!"); λ₯Ό μ‚¬μš©

C# App의 System ꡬ쑰

C# Application

=> build => 컴파일된 ILνŒŒμΌμ„ CLR이 μ½μ–΄λ“€μž„
|Common Language Runtime (CLR)|
|--------------|

=> OS, H/W κ°€ 이해할 수 μžˆλŠ” low μ½”λ“œλ‘œ λ³€ν™˜ => μ μž¬μ μ†Œμ— λ³€ν™˜ (Just In Time(JIT) Compile)
|.Net Framework|
|--------------|

Window
HardWare
class 클래슀λͺ… {

    //μƒμ„±μž μ„ μ–Έ ν˜•μ‹
    ν•œμ •μž 클래슀λͺ…(λ§€κ°œλ³€μˆ˜λͺ©λ‘){
        ...
    }


    //μ’…λ£Œμž μ„ μ–Έ ν˜•μ‹
    ~클래슀λͺ…(){
        ...
    }
}

using System;
using System.Threading;

namespace ConDeEx
{
    class Cat
    {
       public string name;
       public string color;

       public Cat()
        {
            name = "";
            color = "";
        }

        public Cat(string _name, string _color)
        {
            name = _name;
            color = _color;
        }

        ~Cat()
        {
            Console.WriteLine($"{name} : μž˜κ°€");
        }

        public void Meow()
        {
            Console.WriteLine($"{name} : μ•Όμ˜Ή");
        }

    }

    class MainApp
    {
        static void Main(string[] args)
        {
            Cat a = new Cat("ν‚€ν‹°", "ν•˜μ–€μƒ‰");
            a.Meow();
            Console.WriteLine($"{a.name} {a.color}");

            Cat b = new Cat("λ„€λ‘œ", "검정색");
            b.Meow();
            Console.WriteLine($"{b.name} {b.color}");
        }
    }
}
Output

ν‚€ν‹° : μ•Όμ˜Ή
ν‚€ν‹° ν•˜μ–€μƒ‰
λ„€λ‘œ : μ•Όμ˜Ή
λ„€λ‘œ 검정색