목차
📌 생성자는 객체를 생성할 때 호출되는 메소드이며, 소멸자는 객체를 소멸시킬 때 호출되는 메소드라고 할 수 있다. 생성자의 선언 형식은 아래와 같다.
생성자의 일반적인 선언형식 :
class 클래스명 {
[접근제한자] 클래스명(매개변수..)
{
//
}
...
}
생성자의 이름은 클래스의 이름과 똑같다. 그리고 이 생성자의 메소드와 같이 매개변수를 가질 수 있으며, 메소드와는 달리 특정 값을 반환할 수 는 없고, 반환형도 가지고 있지 않다. 생성자는 객체 생성시 호출되는 메소드이며, 따로 생성자를 구현해주지 않아도 컴파일러에서 생성자를 직접 만들어 준다. 즉 자동으로 기본 생성자(default constructor)가 생성된다는 것이다.
🔔 예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Car
{
private int maxSpeed;
private int speed;
private string model;
public Car(int maxSpeed, string model)
{
this.maxSpeed = maxSpeed;
this.model = model;
}
public void ShowCarInfomation()
{
Console.WriteLine(model + "의 현재 속도: " + speed + "km/h, 최대 속도: " + maxSpeed + "km/h");
}
public void speedUp(int increment)
{
if (speed + increment > maxSpeed)
Console.WriteLine("최대 속도" + maxSpeed + "km/h를 넘길 수 없습니다.");
else
{
speed += increment;
Console.WriteLine(model + "의 현재 속도는 " + speed + "km/h 입니다.");
}
}
public void speedDown(int dcrement)
{
if (speed - dcrement < 0)
Console.WriteLine("속도는 0 아래로 떨어질 수 없습니다.");
else
{
speed -= dcrement;
Console.WriteLine(model + "의 현재 속도는 " + speed + "km/h 입니다.");
}
}
}
class Program
{
static void Main(string[] args)
{
Car car = new Car(325, "람보르기니 가야르도");
car.ShowCarInfomation();
car.speedUp(50);
car.speedUp(40);
car.speedUp(210);
car.speedUp(30);
}
}
}
결과)
람보르기니 가야르도의 현재 속도: 0km/h, 최대 속도: 325km/h
람보르기니 가야르도의 현재 속도는 50km/h 입니다.
람보르기니 가야르도의 현재 속도는 90km/h 입니다.
람보르기니 가야르도의 현재 속도는 300km/h 입니다.
최대 속도325km/h를 넘길 수 없습니다.
계속하려면 아무 키나 누르십시오 . . .
생성자에서 매개변수로 정수형 값 하나와, 문자열 값 하나를 받는 부분이 있는 것을 확인할 수 있다. 매개변수 maxSpeed의 값을 멤버 변수 maxSpeed에 넣고, 매개변수 model의 값을 멤버 변수 model에 넣는다.
생성자도 오버로딩이 가능하다. 아래 예는 생성자 오버로딩 사용 예이다.
🔔 예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
class MyClass
{
public MyClass()
{
Console.WriteLine("매개변수가 없는 디폴트 생성자");
}
public MyClass(int a)
{
Console.WriteLine("정수형 매개변수");
}
public MyClass(double a)
{
Console.WriteLine("실수형 매개변수");
}
}
class Program
{
static void Main(string[] args)
{
MyClass ma = new MyClass();
MyClass mb = new MyClass(10);
MyClass mc = new MyClass(25.5);
}
}
}
결과)
매개변수가 없는 디폴트 생성자
정수형 매개변수
실수형 매개변수
계속하려면 아무 키나 누르십시오 . . .
생성자에는 메소드 오버로딩 규칙이 그대로 적용된다.
소멸자는 생성자와 달리 가비지 컬렉터(garbage collector)에 의해 객체가 소멸하는 시점을 판단하여 호출되는 메소드이다. 여기서 가비지 컬렉터란, C#에서 효율적인 메모리 관리를 위해 가비지 컬렉터가 자동으로 더는 사용되지 않는 객체를 수거해 간다. 소멸자는 생성자와 달리 상속되거나 오버로드 될 수 없으며, 사용자가 호출할 수도 없다.
소멸자의 사용 형태:
class 클래스명()
{
~클래스명()
{
//
}
..
}
위에서 보는거와 같이 클래스의 이름 앞에 ~ 기호를 붙인게 소멸자이다.
🔔 예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp
{
class MyClass
{
private string name;
public MyClass(string name)
{
this.name = name;
Console.WriteLine(name + "객체 생성!");
}
~MyClass()
{
Console.WriteLine(name + "객체 소멸!");
}
}
class Program
{
static void Main(string[] args)
{
MyClass ma = new MyClass("A");
MyClass mb = new MyClass("B");
MyClass mc = new MyClass("C");
}
}
}
결과)
A객체 생성!
B객체 생성!
C객체 생성!
C객체 소멸!
B객체 소멸!
A객체 소멸!
계속하려면 아무 키나 누르십시오 . . .
위 예제를 보면 a, b, c, 객체가 만들어진 뒤에 소멸하는 것을 확인할 수 있다. 그런데 소멸하는 순서를 보면 a, b, c가 아닌 c, b, a 순으로 소멸된다. 이것은 가비지 컬렉터가 언제 움직일지, 어떤 순서로 소멸시킬지 모르기 때문에, 실행할 때마다 소멸되는 순서는 바뀔수 있다.
[WPF] 사용자 설정 저장(윈도우 상태, 크기, 위치) (0) | 2020.04.03 |
---|---|
[C#] 클래스(Class), 접근 제한자(Access Modifier), this (0) | 2019.09.06 |
[C#] 배열(Array) (0) | 2019.09.06 |
[C#] foreach, Method (1) | 2019.09.06 |
[C#] 연산자(Operators) (0) | 2019.09.06 |