Developer/C#, 닷넷

C# 생성자(Constructor) - new 키워드

우주로그 2022. 8. 21.

1. 생성자(Constructor)

생성자는 클래스 인스턴스를 생성할 때 기본(필수)으로 호출되는 메서드입니다.

보통 객체를 생성할 때 아래와 같이 선언을 하죠.

Hero superman = new Hero();

HeroClass로 superman 인스턴스를 만들고 Hero이라는 생성자를 new라는 키워드로 객체를 생성하는 것 입니다.

new 뒤에 있는 Hero는 Class명이 아니고 생성자명인 것입니다.

 

Class명하고 똑같은데 무슨 말인가 싶겠죠.

그 이유는 생성자는 클래스명과 동일해야 하기 때문입니다.

 

그럼 생성자는 어떤 형태를 가지고 있는지 살펴보겠습니다.

public class Hero
{
    // 생성자
    public Hero()
    { 
    }
}

우리가 알고 있는 메서드랑 비슷하면서도 다른 것을 알 수 있습니다.

생성자의 규칙은 다음과 같습니다.

- 클래스 명과 동일

- 리턴형 없음

- 접근한정자는 public or internal 사용

-  주로 멤버 변수 초기화를 위해 사용

 

Class 코드를 보면 분명 생성자가 없는 경우가 있습니다.

이건 생성자는 코드에서 "생략"이 가능하기 때문입니다.

코드에서만 생략이 되어 있는 것이지 실제로는 "존재"하고 있다고 보면 됩니다.

 

 

2. 생성자 활용

생성자는 인스턴스 생성시점에 멤버변수를 초기화 하는데 사용이 됩니다.

생성자는 메서드와 동일하게 매개변수를 받을 수 있습니다.

using System;
namespace ConstructorEx
{
    public class Hero
    {
        public string name;
        public int power;

        public Hero(string name, int power)
        {
            this.name = name;
            this.power = power;
        }
    }
    public class Program
    {
        static void Main(string[] args)
        {
            Hero hero = new Hero("superman", 100);
            Console.WriteLine($"Hero name : {hero.name}, hero power : {hero.power}");
        }
    }
}

생성자는 name과 power를 매개변수로 받도록 되어 있고,

인스턴스 생성시점에 값을 초기화 하는 것 입니다.

 

 

3. 생성자 오버로딩

생성자는 메서드와 동일하게 오버로딩이 가능합니다.

using System;
namespace ConstructorEx
{
    public class Hero
    {
        public string name;
        public int power;
        public int age;

        public Hero(string name, int power)
        {
            this.name = name;
            this.power = power;
        }

        public Hero(string name, int power, int age)
        {
            this.name = name;
            this.power = power;
            this.age = age;
        }
    }
    public class Program
    {
        static void Main(string[] args)
        {
            Hero hero1 = new Hero("superman", 100);
            Console.WriteLine($"Hero name : {hero1.name}, power : {hero1.power}");

            Hero hero2 = new Hero("spyderman", 30, 18);
            Console.WriteLine($"Hero name : {hero2.name}, power : {hero2.power}, age : {hero2.age} ");
        }
    }
}

public Hero(string name, int power)

public Hero(string name, int power, int age)

 

이렇게 매개변수를 달리하는 생성자를 선언할 수 있습니다.

 

댓글