3. 생성자란?

이 강의는, 생성자에 대해서 알아보겠습니다.

 

 

생성자는 객체를 생성할때 호출되는 메소드 입니다.

 

생성자의 선언 방식은 다음과 같습니다.

 

class 클래스_이름
{
      제한자 클래스_이름 (받는 변수..)
      {
      // 내용
      }
}

 

위의 코드에서 생성자는 [ 제한자 클래스_이름 (받는변수..) ] 부분입니다.

 

보시다시피 "메소드의 선언 방식" 과 흡사한 것을 알 수 있습니다.

 

또한, 특징으로는 클래스명과 같은 이름을 사용한다는 것, 반환값이 없다는 것, 반환 타입이 없다는 것 입니다.

 

그리고 생성자는 사용해도 상관없고, 사용하지 않아도 상관없지만, 사용하지 않았을 경우에는 빈 메소드 값으로 자동으로 생성됩니다.

 

생성자 예시를 한번 들어보겠습니다.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hello_World
{
    class smartphone
    {
       string phonename; //폰 이름 필드
        int version; // 폰의 버전을 나타내는 필드
        string ownername; // 폰 주인을 나타내는 필드
        string changedname;
        public smartphone(string phonename, int version, string ownername)
        {
            this.phonename = phonename;
            this.version = version;
            this.ownername = ownername;
        }
        public void sayinformationaboutphone()
        {
            Console.WriteLine("{0} 이 이름이고, {1} 이 버전임", phonename, version.ToString());
        }
        public void changeowner(string changedownername)
        {
            changedname = changedownername;
            Console.WriteLine("전 주인은 {0}, 바뀐 주인은 {1}", ownername, changedname);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            smartphone smart = new smartphone("iphone",6, "Lee");
            smart.sayinformationaboutphone();
            smart.changeowner("Kim");
        }
    }
}

 

코드 실행시 다음과 같이 나옵니다.

 

 

위의 public smartphone ~ 부분이 생성자 입니다.

 

위에서 한가지 짚고 넘어가야 할 점이, this 입니다. this는 매개변수 값과 클래스 내부 변수 값이 같을 때 사용됩니다. 여기서 this.phonename 이란 건 클래스 내부에 선언된 string phonename를 뜻하게 됩니다.

 

또한, this 와 같이 base라는 것도 있지만, 상속을 하면서 다루겠습니다.

 

1강 에서 배운 ,객체를 생성하는 부분을 이렇게 이해할 수도 있습니다.

 

클래스명 객체이름 = new 생성자(들어갈 변수); 처럼 말이죠.

 

생성자와 반대되는 "소멸자" 라는것도 있는데, 이건 "가비지 콜렉터" 라는 C# 에서 메모리 관리를 용이하게 하기 위해서 만든 프로그램이 제대로 메모리를 수거 가능하도록 만들었는데, 굳이 사용 안하셔도 됩니다.