컴퓨터프로그래밍/C#

생성자와 소멸자

zelkova 2016. 11. 25. 16:10

<목차로 돌아가기>


  생성자


생성자는 객체를 생성할때 동작(호출)하는 메소드 입니다. 사용방법은 아래와 같습니다.


클래스 클래스명{


  한정자 클래스명(매개변수){

 //

  }

}


위를 보면 알 수 있듯이 생성자는 클래스와 이름과 같고, 메소드의 형태를 유지하고 있습니다.


  1.  using System;
  2.  using System.Collections.Generic;
  3.  using System.Linq;
  4.  using System.Text;
  5.  using System.Threading.Tasks;

  6.  namespace ConsoleApplication1
  7.  {
  8.     class Car
  9.     {
  10.         int maxSpeed=0;
  11.         int lowSpeed=0;

  12.         internal Car(int max,  int low)
  13.         {
  14.             maxSpeed = max;
  15.             lowSpeed = low;
  16.         }
  17.         internal void speedup(int speed)
  18.         {
  19.             if (maxSpeed >= speed && 0 <= speed)
  20.             {
  21.                 Console.WriteLine("현재시속은 {0}km 입니다.", speed);
  22.             }
  23.             else if (maxSpeed < speed)
  24.             {
  25.                 Console.WriteLine("엔진이 파괴되었습니다. ㅈㅈ");
  26.             }
  27.             else if (lowSpeed <= speed)
  28.             {
  29.                 Console.WriteLine("{0}km로 후진중입니다.", speed);
  30.             }
  31.             else
  32.             {
  33.                 Console.WriteLine("후진하다 엔진이 터졌습니다.");
  34.             }
  35.         }
  36.     }
  37.     class driver
  38.     {
  39.         static void Main(string[] args)
  40.         {
  41.             Car car = new Car(300, -50);
  42.             car.speedup(350);
  43.             car.speedup(280);
  44.             car.speedup(-30);
  45.             car.speedup(-60);
  46.         }
  47.     }
  48.  }


결과)


14~18줄 : 생성자를 생성하여 값을 초기화시키고 있습니다. 생성자는 보통 이런용도로
              자주 사용됩니다.


43줄 : 객체를 생성하고 생성자에 값을 넣어주는 모습입니다.


앞에서 배웠던것을 살짝 정정하면 아래와 같습니다.


객체명 객체식별자 = new 생성자(인자값);



요약정리

ㆍ클래스명과 생성자명이 같다.

ㆍ반환값이 없다. 그러지만 void를 의미하지 않는다.

ㆍ기본 생성자의 접근권한은 public이다.

ㆍ기본 생성자의 경우 인자를 포함하지 않는다.

ㆍ기본 생성자에 의해 객체의 모든 멤버들이 초기화된다.


PS. 생성자도 오버로딩이 된다.



  소멸자


C#에서 객체를 더이상 사용하지 않으면 쿨~~하게 제거합니다. 이것을 가비지컬렉터라하는데 이건 나중으로 미루고.


이렇게 사용하지 않고 제거하기 직전에 소멸자라는 메소드를 실행하는데 이를 사용하는방법은 아래와 같습니다.



클래스 클래스명{


  ~ 클래스명(){

 //

  }

}


클래스명 앞에 '~'만 붙였습니다.


  1.  using System;
  2.  using System.Collections.Generic;
  3.  using System.Linq;
  4.  using System.Text;
  5.  using System.Threading.Tasks;

  6.  namespace ConsoleApplication1
  7.  {
  8.     class Drop
  9.     {
  10.         private string name;

  11.         public Drop(string name)
  12.         {
  13.             this.name = name;
  14.             Console.WriteLine("Drop객체 생성!");
  15.         }
  16.         ~Drop()
  17.         {
  18.             Console.WriteLine("과 동시에 사라지다 ㅠ_ㅠ");
  19.         }
  20.     }
  21.     class Program
  22.     {
  23.         static void Main(string[] args)
  24.         {
  25.             Drop test = new Drop("a");
  26.         }
  27.     }
  28.  }

결과)


소멸자는 가끔 가비지컬렉터에서 소멸시키지 못하는 객체를 처리할 때 사용합니다.

왠만한건 가비지컬렉터가 잘 처리하니 손대지 말아요~

괞히 손대면 한번일할거 두번일하는 경우가 생기겠죠..?



요약정리


ㆍ 접근 지정자를 사용하지 않는다.

ㆍ 반환 값이 없다. void도 허용하지 않는다.

ㆍ 클래스명과 같지만 시장을 '~'로 표시해준다.

ㆍ 인자를 포함하지 않는다.



반응형

'컴퓨터프로그래밍 > C#' 카테고리의 다른 글

C# - 메소드 메소드 재정의(override), 숨기기  (0) 2016.11.27
C# - 상속  (0) 2016.11.25
접근제한자와 this  (0) 2016.11.24
C# - 클래스, 객체지향의 개념잡기  (0) 2016.11.24
C# - 메소드 오버로딩  (0) 2016.11.24