using System.ComponentModel;
using System.Numerics;
using System.Threading;
namespace CSharp
{
// 참조
class Knight
{
public int hp;
public int attack;
// 생성자
// 반환형 없음 void도 안됨
// 클래스 이름과 같음
public Knight()
{
hp = 100;
attack = 10;
Console.WriteLine("생성자 호출");
}
// 생성자도 여러가지 버전이 있음 생성자 오버로딩
public Knight(int hp) :this() // 생성자가 호출 할경우 빈 생성자를 호출한다. 자기자신의 기본 생성자를 호출한다.
{
// 자기 자신의 hp라는 것을 표현하고 싶다의 의미
this.hp = hp;
Console.WriteLine("int 생성자 호출");
}
public Knight(int hp, int attack) : this()
{
this.hp = hp;
this.attack = attack;
}
public void Move()
{
Console.WriteLine("Knight Move");
}
public void Attack()
{
Console.WriteLine("Knight Attack");
}
}
internal class Program
{
static void Main(string[] args)
{
Knight knight = new Knight(50,5);
}
}
}
this() 키워드를 사용하여 기본 생성자를 호출할 수 있음using System;
class Knight
{
public int hp;
public int attack;
// 기본 생성자 (매개변수 없음)
public Knight()
{
hp = 100;
attack = 10;
Console.WriteLine("기본 생성자 호출");
}
// 매개변수 하나를 받는 생성자
public Knight(int hp) : this() // 기본 생성자 호출 후 실행됨
{
this.hp = hp;
Console.WriteLine("int 매개변수 생성자 호출");
}
// 매개변수 두 개를 받는 생성자
public Knight(int hp, int attack)
{
this.hp = hp;
this.attack = attack;
Console.WriteLine("int, int 매개변수 생성자 호출");
}
}
class Program
{
static void Main(string[] args)
{
Knight knight1 = new Knight(); // 기본 생성자 호출
Knight knight2 = new Knight(50); // hp만 설정, attack은 기본값(10)
Knight knight3 = new Knight(50, 20); // hp와 attack 모두 설정
}
}
Knight knight1 = new Knight(); → hp = 100, attack = 10Knight knight2 = new Knight(50); → 기본 생성자를 호출한 후 hp = 50, attack = 10Knight knight3 = new Knight(50, 20); → hp = 50, attack = 20| 생성자 유형 | 설명 |
|---|---|
| 기본 생성자 | 매개변수가 없으며, 기본 값을 설정함 |
| 매개변수 생성자 | 매개변수를 받아 객체를 초기화함 |
this() 호출 | 기존 생성자를 재사용하여 코드 중복을 줄임 |
| 오버로딩 | 여러 개의 생성자를 정의할 수 있음 |
public Knight(int hp) : this() // 기본 생성자를 호출한 후 실행됨
{
this.hp = hp;
}
this()를 사용하면 현재 클래스의 다른 생성자를 호출할 수 있음public class Knight
{
public int hp;
public int attack;
public Knight()
{
hp = 100;
attack = 10;
}
// 복사 생성자 (깊은 복사)
public Knight(Knight other)
{
this.hp = other.hp;
this.attack = other.attack;
}
}
✅ 깊은 복사(Deep Copy): 새 객체를 생성하고, 원본 객체의 값을 복사함 → 두 객체는 독립적