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#이닀

18. 객체의 μ‚Άκ³Ό 죽음(μƒμ„±μž,μ’…λ£Œμž) + μƒμ„±μž μ˜€λ²„λ‘œλ”©

2022. 2. 10. 11:48
728x90

객체가 생성될 λ•ŒλŠ” μƒμ„±μžκ°€ 호좜되고 μ†Œλ©Έν•  λ•ŒλŠ” μ’…λ£Œμžκ°€ ν˜ΈμΆœλœλ‹€.

 

<μƒμ„±μž>

μƒμ„±μžλŠ” ν΄λž˜μŠ€μ™€ 이름이 κ°™κ³  λ°˜ν™˜ ν˜•μ‹μ΄ μ—†λ‹€.

μƒμ„±μžμ˜ μž„λ¬΄λŠ” ν•΄λ‹Ή ν˜•μ‹(클래슀)의 객체λ₯Ό μƒμ„±ν•˜λŠ” 것 뿐이기 λ•Œλ¬Έμ΄λ‹€.

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace UsingOut
{
    class Cat
    {
        public Cat()
        {

        }
    }
    class MainApp
    {
        static void Main(string[] args)
        {
            Cat kitty = new Cat(); //kitty 객체 생성
            kitty.SetColor("ν•˜μ–€μƒ‰");
            kitty.SetName("ν‚€ν‹°");
            kitty.Meow();
            WriteLine($"{kitty.GetName()}의 색깔은 {kitty.GetColor()}μ΄λžλ‹ˆλ‹€.");
        }
    }
}

사싀 클래슀λ₯Ό μ„ μ–Έν•  λ•Œ λͺ…μ‹œμ μœΌλ‘œ μƒμ„±μžλ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•Šμ•„λ„ μ»΄νŒŒμΌλŸ¬μ—μ„œ μƒμ„±μžλ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.(κΈ°λ³Έ μƒμ„±μž)

 

객체λ₯Ό 닀루닀보면 객체λ₯Ό μƒμ„±ν•˜λŠ” μ‹œμ μ— 객체의 μƒνƒœλ₯Ό,

λ‹€μ‹œ 말해 객체의 ν•„λ“œλ₯Ό μ›ν•˜λŠ” κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•˜κ³  싢을 λ•Œκ°€ μžˆλ‹€.

그럴 λ•Œ, λ§€κ°œλ³€μˆ˜λ₯Ό μž…λ ₯λ°›μ•„ ν•„λ“œλ₯Ό μ›ν•˜λŠ” κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”ν•  수 μžˆλŠ” 졜적의 μž₯μ†Œκ°€ λ°”λ‘œ μƒμ„±μžμ΄λ‹€.

μƒμ„±μžλ„ μ˜€λ²„λ‘œλ”©μ΄ κ°€λŠ₯ν•˜λ‹€. 

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace UsingOut
{
    class Cat
    {
        public Cat()
        {
            name = "";
            color = "";
        }
        public Cat(string _name, string _color)
        {
            name = _name;
            color = _color;
        }
        private string name; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 
        private string color; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 

        public void SetName(string newName)
        {
            name = newName;
        }
        public string GetName()
        {
            return name;
        }
        public void SetColor(string newColor)
        {
            color = newColor;
        }
        public string GetColor()
        {
            return color;
        }
        public void Meow() //λ©”μ†Œλ“œ
        {
            WriteLine($"{color} 고양이 {name}κ°€ μ•Όμ˜Ή!");
        }
    }
    class MainApp
    {
        static void Main(string[] args)
        {
             Cat kitty = new Cat(); //kitty 객체 생성
            kitty.SetColor("ν•˜μ–€μƒ‰");
            kitty.SetName("ν‚€ν‹°");
            kitty.Meow();
            WriteLine($"{kitty.GetName()}의 색깔은 {kitty.GetColor()}μ΄λžλ‹ˆλ‹€.");
        }
    }
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace UsingOut
{
    class Cat
    {
        public Cat()
        {
            name = "";
            color = "";
        }
        public Cat(string _name, string _color)
        {
            name = _name;
            color = _color;
        }
        private string name; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 
        private string color; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 

        public void SetName(string newName)
        {
            name = newName;
        }
        public string GetName()
        {
            return name;
        }
        public void SetColor(string newColor)
        {
            color = newColor;
        }
        public string GetColor()
        {
            return color;
        }
        public void Meow() //λ©”μ†Œλ“œ
        {
            WriteLine($"{color} 고양이 {name}κ°€ μ•Όμ˜Ή!");
        }
    }
    class MainApp
    {
        static void Main(string[] args)
        {
            Cat nabi = new Cat(); //nabi 객체 생성
            Cat neko = new Cat("neko","νšŒμƒ‰"); //nabi 객체 생성
            nabi.Meow();
            neko.Meow();
        }
    }
}

<좜λ ₯ κ²°κ³Ό>

 고양이 κ°€ μ•Όμ˜Ή!
νšŒμƒ‰ 고양이 nekoκ°€ μ•Όμ˜Ή!

 

μ•„λž˜ μ†ŒμŠ€μ½”λ“œλŠ” μƒμ„±μž μ˜€λ²„λ‘œλ”©μ—†μ΄ 인자λ₯Ό λ°›λŠ” μƒμ„±μžλ§Œ 있기 λ•Œλ¬Έμ—

컴파일 μ—λŸ¬κ°€ λœ¬λ‹€.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace UsingOut
{
    class Cat
    {
        //public Cat()
        //{
        //    name = "";
        //    color = "";
        //}
        public Cat(string _name, string _color)
        {
            name = _name;
            color = _color;
        }
        private string name; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 
        private string color; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 

        public void SetName(string newName)
        {
            name = newName;
        }
        public string GetName()
        {
            return name;
        }
        public void SetColor(string newColor)
        {
            color = newColor;
        }
        public string GetColor()
        {
            return color;
        }
        public void Meow() //λ©”μ†Œλ“œ
        {
            WriteLine($"{color} 고양이 {name}κ°€ μ•Όμ˜Ή!");
        }
    }
    class MainApp
    {
        static void Main(string[] args)
        {
            int a = new int();
            a = 3;
            string lovemessage = new string(new char[] {'I',' ', 'l', 'o', 'v','e', ' ', 'y','o','u' });
            WriteLine(a);
            WriteLine(lovemessage);
            Cat nabi = new Cat(); //nabi 객체 생성
            Cat neko = new Cat("neko","νšŒμƒ‰"); //nabi 객체 생성
            nabi.Meow();
            neko.Meow();
            Cat kitty = new Cat(); //kitty 객체 생성
            kitty.SetColor("ν•˜μ–€μƒ‰");
            kitty.SetName("ν‚€ν‹°");
            kitty.Meow();
            WriteLine($"{kitty.GetName()}의 색깔은 {kitty.GetColor()}μ΄λžλ‹ˆλ‹€.");

            Cat nero = new Cat(); //nero 객체 생성
            nero.SetColor("검은색");
            nero.SetName("λ„€λ‘œ");
            nero.Meow();
            WriteLine($"{nero.GetName()}의 색깔은 {nero.GetColor()}μ΄λžλ‹ˆλ‹€.");
        }
    }
}

μœ„μ™€ 같이...

<μ»΄νŒŒμΌλŸ¬κ°€ κΈ°λ³Έ μƒμ„±μžλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ” 경우>

ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μƒμ„±μžλ₯Ό ν•˜λ‚˜λΌλ„ 직접 μ •μ˜ν•˜λ©΄ C# μ»΄νŒŒμΌλŸ¬λŠ” λ§€κ°œλ³€μˆ˜ μ—†λŠ” κΈ°λ³Έ μƒμ„±μžλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€.

μ•Όλ°•ν•˜κ²Œ 생각할 ν•„μš” μ—†λ‹€.

ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μƒμ„±μžλ₯Ό μž‘μ„±ν–ˆλ‹€λŠ” 것은 객체가 νŠΉμ •ν•œ μƒνƒœλ‘œ μ΄ˆκΈ°ν™”λ˜κΈ°λ₯Ό μ›ν•œλ‹€λŠ” 뜻인데,

κΈ°λ³Έ μƒμ„±μžλŠ” 그런 μ˜λ„μ™€ 상관없이 객체λ₯Ό μ΄ˆκΈ°ν™”ν•œλ‹€.

C# μ»΄νŒŒμΌλŸ¬λŠ” ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μ˜λ„μ™€ λ‹€λ₯΄κ²Œ λ™μž‘ν•˜λŠ” μ½”λ“œκ°€ μ œκ³΅λ˜λŠ” 것을 λ°©μ§€ν•˜κ³ μž ν•˜λŠ” 것일 뿐이닀.

 

<μ’…λ£Œμž>

μƒμ„±μžμ˜ 이름은 클래슀의 이름과 κ°™μ•˜λ˜ 반면,

μ’…λ£Œμžμ˜ 이름은 클래슀 이름 μ•žμ— ~λ₯Ό 뢙인 꼴이닀.

λ§€κ°œλ³€μˆ˜λ„ μ—†κ³ , ν•œμ •μžλ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

μ’…λ£ŒμžλŠ” CLR의 κ°€λΉ„μ§€ 컬렉터가 객체가 μ†Œλ©Έλ˜λŠ” μ‹œμ μ„ νŒλ‹¨ν•΄μ„œ μ’…λ£Œμžλ₯Ό ν˜ΈμΆœν•΄μ€€λ‹€.

 

κ·ΈλŸ¬λ‚˜ μ €μžλŠ” 가급적 μ‚¬μš©ν•˜μ§€ μ•ŠκΈ°λ₯Ό κΆŒν•œλ‹€.

CLR의 κ°€λΉ„μ§€ 컬렉터가 μ–Έμ œ λ™μž‘ν• μ§€ μ˜ˆμΈ‘ν•  수 μ—†κΈ° λ•Œλ¬Έμ΄λ‹€.

κ²Œλ‹€κ°€ μ’…λ£Œμžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ κ΅¬ν˜„ν•˜λ©΄ κ°€λΉ„μ§€ μ»¬λ ‰ν„°λŠ” 클래슀의 쑱보λ₯Ό 타고 μ˜¬λΌκ°€

κ°μ²΄λ‘œλΆ€ν„° 상속받은 Finalize() λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.

그런데 이러면 μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯ μ €ν•˜λ₯Ό μ΄ˆλž˜ν•  ν™•λ₯ μ΄ λ†’λ‹€.

μ’…λ£Œμžλ₯Ό κ΅¬ν˜„ν•˜μ§€ 말아야 ν•  κ°€μž₯ μ€‘μš”ν•œ μ΄μœ λŠ”

CLR의 κ°€λΉ„μ§€ μ»¬λ ‰ν„°λŠ” ꡉμž₯히 λ˜‘λ˜‘ν•˜κ²Œ 객체의 μ†Œλ©Έμ„ μ²˜λ¦¬ν•  수 있기 λ•Œλ¬Έμ΄λ‹€.

생성은 μƒμ„±μžμ—κ²Œ, λ’·μ²˜λ¦¬λŠ” κ°€λΉ„μ§€ μ»¬λ ‰ν„°μ—κ²Œ λ§‘κΈ°λŠ” 편이 μ’‹λ‹€κ³  μ €μžλŠ” κ°•μ‘°ν•œλ‹€.

 

사싀 객체의 μ†Œλ©Έμ„ λ‹΄λ‹Ήν•˜λŠ” κ°€λΉ„μ§€ 컬렉터가 μ–Έμ œ λ™μž‘ν• μ§€λŠ” λ©°λŠλ¦¬λ„ λͺ¨λ₯Έλ‹€.

μΉ΄λΉ„μ§€ μ»¬λ ‰ν„°λŠ” μ“°λ ˆκΈ°μ˜ 양이 μ–΄λŠ 선을 λ„˜μ–΄μ•Όλ§Œ 일을 ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

λ˜ν•œ ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œν•˜κΈ° 전에 λ°˜λ“œμ‹œ κ°€λΉ„μ§€ 컬렉터가 μ“°λ ˆκΈ°λ₯Ό μˆ˜μ§‘ν•œλ‹€λŠ” 보μž₯ 뿐 μ•„λ‹ˆλΌ

μ–΄λ–€ 객체λ₯Ό μ–΄λ–€ μˆœμ„œλ‘œ μ†Œλ©Έμ‹œν‚¬μ§€μ— λŒ€ν•œ 보μž₯ λ˜ν•œ μ—†κΈ° λ•Œλ¬Έμ—

μ•„λž˜ 예제 μ½”λ“œ 좜λ ₯κ²°κ³Ό 쀑 μ†Œλ©Έμžκ°€ μ‹€ν–‰ν•˜λŠ” WriteLine()의 호좜 μˆœμ„œλŠ” λ§€ μ‹€ν–‰ μ‹œλ§ˆλ‹€ λ‹¬λΌμ§ˆ 수 μžˆλ‹€.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace UsingOut
{
    class Cat
    {
        public Cat()
        {
            name = "";
            color = "";
        }
        ~Cat()
        {
            WriteLine($"잘 κ°€, {name}");
        }
        public Cat(string _name, string _color)
        {
            name = _name;
            color = _color;
        }
        private string name; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 
        private string color; //클래슀 μ•ˆμ— μ„ μ–Έλœ λ³€μˆ˜ : ν•„λ“œ 

        public void SetName(string newName)
        {
            name = newName;
        }
        public string GetName()
        {
            return name;
        }
        public void SetColor(string newColor)
        {
            color = newColor;
        }
        public string GetColor()
        {
            return color;
        }
        public void Meow() //λ©”μ†Œλ“œ
        {
            WriteLine($"{color} 고양이 {name}κ°€ μ•Όμ˜Ή!");
        }
    }
    class MainApp
    {
        static void Main(string[] args)
        {
            int a = new int();
            a = 3;
            string lovemessage = new string(new char[] {'I',' ', 'l', 'o', 'v','e', ' ', 'y','o','u' });
            WriteLine(a);
            WriteLine(lovemessage);
            Cat nabi = new Cat(); //nabi 객체 생성
            Cat neko = new Cat("neko","νšŒμƒ‰"); //nabi 객체 생성
            nabi.Meow();
            neko.Meow();
            Cat kitty = new Cat(); //kitty 객체 생성
            kitty.SetColor("ν•˜μ–€μƒ‰");
            kitty.SetName("ν‚€ν‹°");
            kitty.Meow();
            WriteLine($"{kitty.GetName()}의 색깔은 {kitty.GetColor()}μ΄λžλ‹ˆλ‹€.");

            Cat nero = new Cat(); //nero 객체 생성
            nero.SetColor("검은색");
            nero.SetName("λ„€λ‘œ");
            nero.Meow();
            WriteLine($"{nero.GetName()}의 색깔은 {nero.GetColor()}μ΄λžλ‹ˆλ‹€.");
        }
    }
}

좜λ ₯κ²°κ³Ό

3
I love you
 고양이 κ°€ μ•Όμ˜Ή!
νšŒμƒ‰ 고양이 nekoκ°€ μ•Όμ˜Ή!
ν•˜μ–€μƒ‰ 고양이 ν‚€ν‹°κ°€ μ•Όμ˜Ή!
ν‚€ν‹°μ˜ 색깔은 ν•˜μ–€μƒ‰μ΄λžλ‹ˆλ‹€.
검은색 고양이 λ„€λ‘œκ°€ μ•Όμ˜Ή!
λ„€λ‘œμ˜ 색깔은 κ²€μ€μƒ‰μ΄λžλ‹ˆλ‹€.
잘 κ°€, λ„€λ‘œ
잘 κ°€, ν‚€ν‹°
잘 κ°€, neko
잘 κ°€,
728x90

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

20. 얕은 볡사(Shallow Copy)와 κΉŠμ€ 볡사(Deep Copy)  (0) 2022.02.10
19. [static]정적 ν•„λ“œμ™€ 정적 λ©”μ†Œλ“œ  (0) 2022.02.10
17. C#의 클래슀  (0) 2022.02.10
16. κ°’, 참쑰에 μ˜ν•œ λ§€κ°œλ³€μˆ˜ 전달, ref와 out의 차이  (0) 2022.02.09
15. λ©”μ†Œλ“œλ‘œ μ½”λ“œ 간좔리기 + μž¬κ·€ν˜ΈμΆœ ν•¨μˆ˜μ§œκΈ°(ν”Όλ³΄λ‚˜μΉ˜ 예제)  (0) 2022.02.09
    'C#/이것이 C#이닀' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • 20. 얕은 볡사(Shallow Copy)와 κΉŠμ€ 볡사(Deep Copy)
    • 19. [static]정적 ν•„λ“œμ™€ 정적 λ©”μ†Œλ“œ
    • 17. C#의 클래슀
    • 16. κ°’, 참쑰에 μ˜ν•œ λ§€κ°œλ³€μˆ˜ 전달, ref와 out의 차이
    Rainbow🌈Coder
    Rainbow🌈Coder
    λͺ°λΌλ„ 결ꡭ은 μ•„λŠ” 개발자, 그런 μ‚¬λžŒμ΄ 되기 μœ„ν•œ 맀일의 ν•œκ±ΈμŒ

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