C# Basic Tutorial (Class - 생성자)

2022. 1. 12. 00:00CSharp/Basic

반응형

개요

Class 란 메서드 (Method), 속성 (Property), 필드 (Field), 이벤트 (Event) 등을 멤버로 포함하는 소프트웨어 단위

 

Constructor (생성자 메서드)

: class 또는 struct를 만들 때마다 해당 생성자가 호출됨. 클래스 또는 구조체에는 서로 다른 인수를 사용하는 여러 생성자가 있을 수 있다. 기본값을 설정하고, 인스턴스화를 제한한다.

 

구문

/// <summary>
/// 여러가지 생성자 정의
/// </summary>
public class MyClass
{
    private readonly string _lastName;
    private readonly string _firstName;

    /// <summary>
    /// 생성자를 통해 lastName 과 firstName 을 설정한다. 
    /// </summary>
    /// <param name="lastName"></param>
    /// <param name="firstName"></param>
    public MyClass(string lastName, string firstName)
    {
        _lastName = lastName;
        _firstName = firstName;
    }

    /// <summary>
    /// parameter 가 없는 기본 생성자
    /// </summary>
    public MyClass()
    {
        _lastName = "David"; 
        _firstName = "anderson";
    }
}

 

정적생성자

이전 같은 형태는 Instance 생성자라 하여 new 를 통해 class 의 instance 가 생성되면 그때 마다 실행되는 생성자이다.

정적 생성자란 static field 또는 static property 등을 초기화 해주는 생성자 이다. 

매번 실행되지 않으면 application 실행 시 한번만 초기화 되는점을 참고하자.

 

/// <summary>
/// 여러가지 생성자 정의
/// </summary>
public class MyClass
{
    ...
    ...
    
    private static readonly string _staticField;

    ...
    ...
    
    /// <summary>
    /// 정적 생성자는 parameter 를 가질 수 없다.
    /// application 실행 시 한번만 실행된다. 
    /// </summary>
    static MyClass()
    {
        _staticField = "한번만 실행되는 생성자";
    }
    
}

아래 code 를 추가 한 후 생성자를 호출해보자.

    /// <summary>
    /// 각 field 값 print
    /// </summary>
    public void PrintFields()
    {
        $"staticField = {_staticField}, _firstName = {_firstName}, _lastName = {_lastName}".WriteLine();
    }

Program.cs 에서 다음을 추가한다. 

var methods = new MyClass();
methods.PrintFields();

// output
// staticField = 한번만 실행되는 생성자, _firstName = anderson, _lastName = David

methods = new MyClass("앤더슨","내이름은");
methods.PrintFields();

// output
// staticField = 한번만 실행되는 생성자, _firstName = 내이름은, _lastName = 앤더슨

관련영상

 

https://youtu.be/RHGBt6GgEl4

반응형