제로의영역

7.6.2 this() 생성자 본문

C#

7.6.2 this() 생성자

아이큐제로 2019. 5. 27. 19:06

* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.

* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.

 

(1) 정의: 자기자신의 생성자를 가리키는 역할 >> this는 클래스 안에서 선언된 변수나 메소드를 가리킴.

 

(2) 용도: 생성자를 오버로딩(하나의 이름에 여러개의 구현을 올리는 것)하여 사용해야 할 경우, 생성자 안에 똑같은 코드가 중복되지 않게 하고 싶을 때 사용.

 

(3) 사용법

1) 생성자에서만 사용

2) 코드 블록 안쪽이 아닌 앞쪽에서 사용

class MyClass
{

   int a, b, c;								// 필드: 클래스 안에 선언된 변수들

   public MyClass()							// 생성자: 한정자+클래스 이름()

   {
      this.a = 5425;						// MyClas 변수 a를 5425로 선언
   }

   public MyClass(int b) : this()			// 매개변수가 있는 생성자 this()는 {}안이 아니라 { 앞에 존재하고 MyClass()생성자를 가리킴.
   {
      this.b=b;								// MyClass 변수 b를 b로 선언
   }

   public MyClass(int b, int c) : this(b)	// this(b)는 MyClass(int b)를 가리킴
   {
      this.c=c;								// MyClass 변수 c를 c로 선언
   }
}

 

예제)

using System;

namespace ex7_7
{
   class MyClass
   {
      int a, b, c;	//MyClass의 변수선언(변수만들기)
      
      public MyClass()	//'한정자+클래스이름()': 생성자
      {
         this.a = 5425;	//'this.a'는 MyClass의 변수 'a'를 가리키므로 a는 5425
         Console.WriteLine("MyClass()");	
      }
      
      public MyClass(int b):this()	//MyClass()를 호출하는 (int b)를 매개변수로 갖는 생성자
      {
         this.b = b;	//'this.b'는 MyClass의 변수 'b'를 가리킴,변수가 입력되지 않으면0출력
         Console.WriteLine($"MyClass({b})");
      }
      
      public MyClass(int b,int c):this(b)	// b, c의 값을 입력된 새로운 b, c의 값으로 초기화
      {
         this.c = c;	//'this.c'는 MyClass의 변수 'c'를 가리킴,변수가 입력되지 않으면 0출력
         Console.WriteLine($"MyClass({b}.{c})");
      }
      
     public void PrintFields()
      {
          Console.WriteLine($"a:{a},b:{b},c:{c}");
      }
   }

   class Program
   {
      static void Main(string[] args)
      {
         MyClass a = new MyClass(); // a 객체를 생성후 실행,생성자는 생성시 자동 실행
         a.PrintFields();	// PrintFields()를 호출
         Console.WriteLine();

         MyClass b = new MyClass(1);	// b 객체를 변수 1로 생성후 실행
         b.PrintFields();	// PrintFields()를 호출
         Console.WriteLine();

         MyClass c = new MyClass(10, 20);	//b,c 객체를 변수 10, 20으로 생성및 초기화후 실행
         c.PrintFields();
      }
   }
}

* 생성자는 자동으로 생성과 동시에 호출이 이루어짐.

 

출력 결과:

MyClass()
a:5425,b:0,c:0

 

MyClass()
MyClass(1)
a:5425,b:1,c:0

 

MyClass()
MyClass(10)
MyClass(10.20)
a:5425,b:10,c:20