본문 바로가기
Programming Language/C#

[C#] 생성자와 종료자

by dbxxrud 2019. 5. 18.

 

생성자 - 생성자는 클래스와 이름이 같고, 반환 형식이 없다. 생성자의 임무는 해당 형식(클래스)의 객체를 생성하는 것뿐이기 때문이다. 클래스를 선언할 때 명시적으로 생성자를 구현하지 않아도 컴파일러에서 생성자를 만들어준다. 생성자를 구현해야 할 때는 객체의 필드를 원하는 값으로 초기화하고 싶을 때이다. 또한 오버 로딩 가능.

 

 

종료자 - 종료자는 생성자와는 달리 매개변수도 없고, 한정자도 사용하지 않는다. 또한 오버 로딩도 불가능하며 직접 호출할 수도 없다. CLR의 가비지 컬렉터가 객체가 소멸되는 시점을 판단해서 종료자를 호출한다. 

 


 

생성자 예제

 

 

※ 컴파일러가 기본 생성자를 제공하지 않는 경우

- 생성자를 하나라도 직접 정의한다면 컴파일러는 매개 변수 없는 기본 생성자를 제공하지 않는다!

  직접 생성자를 작성했다는 것은 객체가 특정한 상태로 초기화 되기를 원한다는 뜻인데, 기본 생성자는 그런 의도와는 

  상관없이 객체를 초기화 한다. 그래서 컴파일러는 의도와는 다르게 동작하는 코드가 제공되는 것을 방지하고자 하는 것.

 

 

 

종료자 예제

 

하지만 가비지 컬렉터가 동작할 시점을 알 수가 없다는 점 때문에 가급적 종료자를 구현하지 않는 것이 좋다. 객체의 사용이 끝난 직후가 될 수도 있고 10분 후가 될 수도 있다. 또한 명시적으로 종료자가 구현되어 있다면 가비지 컬렉터가 object로부터 상속받은 Finalize() 메서드를 클래스의 족보를 타고 올라가며 호출하기 때문에 성능의 저하만 가져올 확률이 높다. 

 

 

생성자 종료자 예제

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using static System.Console;
using System.Collections;
using System.Linq;
 
namespace AS
{
    class Cat
    {
        public string Name;
        public string Color;
 
        public Cat()
        {
            Name = "";
            Color = "";
        }
        public Cat(string _Name, string _Color) // 생성자도 오버로딩 가능
        {
            // 객체를 생성할 때 이름과 색을 입력받아 초기화
            Name = _Name;
            Color = _Color;
        }
        ~Cat() // 소멸자
        {
            WriteLine($"{Name} : 잘가");
        }
        public static void Main(string[] args)
        {
            Cat kitty = new Cat("키티""하얀색");
            WriteLine($"{kitty.Name} : {kitty.Color}");
 
            Cat nero = new Cat("네로""검은색");
            WriteLine($"{nero.Name} : {nero.Color}");
            
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white">cs

 

 

 

 

 

 

 

 

 

 

 

※ 공부해서 정리하는 블로그 입니다.

   참고도서 : 이것이 c# 이다

'Programming Language > C#' 카테고리의 다른 글

[C#] 접근 한정자  (0) 2019.05.18
[C#] 정적 필드와 메소드  (0) 2019.05.18
[C#] 클래스  (0) 2019.05.18
[C#] 메소드 오버로딩  (0) 2019.05.18
[C#] foreach문  (0) 2019.05.18