클래스

댓글 0
댓글을 작성하려면 로그인이 필요합니다.
아직 댓글이 없습니다. 첫 번째 댓글을 작성해보세요.
데이터와 동작을 함께 담아 새로운 형식을 만드는 문법 입니다.
★ 클래스는 ==참조타입==입니다.

class Program
{
static void Main(string[] args)
{
Monster slime = new Monster(); // 인스턴스 생성
slime.Name = "슬라임";
slime.Health = 100;
Monster goblin = slime;
goblin.Name = "고블린";
goblin.Health = 200;
slime.PrintInfo();
goblin.PrintInfo();
}
}
public struct Monster // 구조체 : 얕은 복사 (값 타입)
{
public string Name;
public int Health;
public void PrintInfo()
{
Console.WriteLine($"{Name} 체력 : {Health}");
}
}
public class Monster // 클래스 : 깊은 복사 (참조 타입)
{
public string Name;
public int Health;
public void PrintInfo()
{
Console.WriteLine($"{Name} 체력 : {Health}");
}
}
클래스와 클래스 간의 관계, 그 안에서 사용되는 객체 타입을 정의하고, 그 관계들을 표현한 다이어그램입니다.

멤버를 어디까지 공개할지 정하는 키워드입니다.
| 접근 제한자 | 접근할 수 있는 범위 |
|---|---|
public | 어디서든 |
private | 같은 클래스 안에서만 |
protected | 같은 클래스와 그 클래스를 물려받은 클래스에서 |
internal | 같은 프로젝트 안에서 |
구조체와 동일하게 인스턴스가 생성될때 호출되는 메서드(함수)입니다.
class Program
{
static void Main(string[] args)
{
Monster goblin = new Monster("고블린", 100);
}
}
public class Monster
{
public string Name;
public int Hp;
public Monster(string name, int hp)
{
Name = name;
Hp = hp;
}
}
인스턴스가 메모리에서 사라질때 호출되는 메서드(함수)입니다.
~< 클래스 이름 > ( ) { }
public으로 열어 놓기에는 리스크가 있거나,
데이터를 언제 가져가고 수정하였는지 디버깅할때 유용하게 사용할 수 있다.
get은 값을 읽을 때, set은 값을 넣을때 실행됩니다.
밖에서 넘어온 값을 set 안의 value 라는 이름으로 받습니다. 따로 선언하지 않아도 사용 가능합니다.
class Program
{
static void Main(string[] args)
{
Monster mon = new Monster();
mon.MoveSpeed = 10f;
mon.Level = 1;
}
}
public class Monster
{
private string Name;
public int Health;
private float _moveSpeed;
public float MoveSpeed { get; set; } // 자동구현 프로퍼티
private int _level;
public int Level
{
get
{
return _level;
}
set
{
_level = value;
}
}
}
public float MoveSpeed { get; private set; }
// or
public int Level
{
get
{
return _level;
}
private set
{
_level = value;
}
}
static 멤버는 클래스 전체에 하나만 존재하는 멤버입니다.
class Program
{
static void Main(string[] args)
{
Monster mon1 = new Monster();
Monster mon2 = new Monster();
mon1.Spawn();
mon2.Spawn();
// Console.WriteLine(mon1.Count); // 에러
// Console.WriteLine(mon2.Count); // 에러
Console.WriteLine(Monster.Count); // 출력 : 2
mon1.PrintInfo(); // 출력 : 2
// static으로 선언된 Count는 Monster 클래스 전역변수로
// Monster 변수들이 개인으로 가지고 있는 Count 값은 없다.
}
}
public class Monster
{
public static int Count = 0;
public void PrintInfo()
{
Console.WriteLine(Count);
}
public void Spawn()
{
Count++;
}
public void DiSpawn()
{
Count--;
}
}
static 생성자는 기존 생성자보다 빠르게 호출된다.
호출타이밍 : 인스턴스 생성, 해당 클래스 메소드 접근 시
public class Monster
{
public static int Count = 4;
public Monster()
{
Console.WriteLine("생성자");
}
static Monster()
{
Console.WriteLine("static 생성자");
}
public static void AddMonsterCount()
{
Count++;
}
}
Monster mon1 = new Monster();
Monster mon2 = new Monster();
Console.WriteLine(Monster.Count);
출력 :
static 생성자
생성자
생성자
4
Console.WriteLine(Monster.Count);
Monster mon1 = new Monster();
Monster mon2 = new Monster();
출력 :
static 생성자
4
생성자
생성자
Monster.AddMonsterCount();
Monster mon1 = new Monster();
Monster mon2 = new Monster();
Console.WriteLine(Monster.Count);
출력 :
static 생성자
카운트 증가
생성자
생성자
5

열거형은 정해진 몇 가지 값에 이름을 붙여 하나의 자료형으로 만드는 문법 입니다.

구조체(struct)는 관련 있는 값 여러개를 묶어 하나의 형식으로 만드는 문법입니다.

함수는 일정한 동작을 수행하는 코드(블럭)을 의미한다.
