게임 개발_HISTORY
C# STUDY_TIL251007 [클래스와 객체] 본문
📝 학습 요약
- 클래스와 객체
- 상속과 다형성
🧩 학습 내용
✔️ 클래스와 객체
static void Main() 은 프로그램의 시작점이다. C# 프로그램이 실행될 때 가장 먼저 호출되는 메서드가 바로 "Main()"이다.
그리고 클래스나 구조체는 실제 실행되는 코드가 아니라, 데이터와 기능을 묶어 정의한 틀(템플릿)이다.
class Program
{
static void Main()
{
Player hero = new Player(); // 객체 생성
hero.name = "스파르타 전사";
hero.hp = 100;
hero.Attack(); // 메서드 실행
}
}
여기서 Main() 은 "게임의 무대",
클래시는 "캐릭터 설계도",
"객체(Object)"는 설계도로 만든 실제 캐릭터라고 보면 된다.
| 비유 | 프로그래밍 용어 | 설명 |
| 게임의 시작 버튼 | Main () 메서드 | 프로그램이 시작되는 곳 |
| 캐릭터 설계서 | 클래스 / 구조체 | 데이터와 행동을 정의한 틀 |
| 실제 캐릭터 | 객체(Object) | 설계도로 만든 실제 인스턴스 |
method는 독립적으로 존재할 수 없으며 어떤 형식의 맴버로 정의되어야 한다. 따라서 관련된 Class 하위에 속해 있어야만 한다.
class 즉, 설계도는 속성(필드)과 행동(메소드)이 포함된다.
class Car
{
public string brand; // 속성
public string color; // 속성
public void ShowInfo() // 행동
{
Console.WriteLine($"{color} {brand} 자동차입니다.");
}
}
위 코드 처럼 class Car 설계도 안에 ShowInfo 라는 행동을 가진다. 만약 public void ShowInfo() 가 class 밖에 있으면 자동차의 해동이 아니라 프로그램 전체의 일반 함수가 되어버려 Car 객체가 함수를 호출하는 구조가 불가능하게 된다.
▫️클래스와 객체 구조 다이어그램
┌──────────────────────────────┐
│ [class Car] │ ← 설계도 (Blueprint)
│──────────────────────────────│
│ public string brand; │ ← 자동차의 브랜드 (데이터)
│ public string color; │ ← 자동차의 색상 (데이터)
│──────────────────────────────│
│ public void ShowInfo() │ ← 자동차의 기능 (행동)
│ { │
│ Console.WriteLine(...); │
│ } │
└──────────────────────────────┘
↑
│ new (설계도로부터 실체를 만든다)
│
┌──────────────────────────┐
│ Car myCar = new Car(); │ ← 객체 생성 (메모리에 실물 등장)
└──────────────────────────┘
│
│
┌──────────────┐
│ myCar 변수 │
│──────────────│
│ brand = "현대"│
│ color = "빨간색"│
└──────────────┘
│
│
▼
myCar.ShowInfo();
│
▼
📢 콘솔 출력 → "이 자동차는 빨간색 현대입니다."
💡class program 의 의미
C# 프로그램이 실제로 시작되는 진입점(Entry Point)을 담고 있는 클래스이다. 프로그램의 출발선을 지정해 주는 껍데기 클래스.
Main() 메서드는 하나의 클래스 안에 있어야만 하는데 그게 바로 class program 이다.
✔️ 상속과 다형성
class Player
{
public string Name;
public virtual void Attack()
{
Console.WriteLine($"{Name}이(가) 기본 공격을 했다!");
}
}
class Warrior : Player
{
public override void Attack()
{
Console.WriteLine($"{Name}이(가) 검으로 강하게 공격했다!");
}
}
여기서 핵심은 Warrior가 Player 를 상속받는다 점과 Attack () 을 재정의 (override) 한다는 점이다.
Player hero = new Warrior();
| 단계 | 설명 |
| Player | 변수의 데이터 타입. hero 라는 변수는 Player타입이다. |
| hero | 객체 변수 이름(참조 변수), Player 설계도로 만든 hero 하나를 가르킨다. |
| new | 메모리에 새 객체를 생성하는 명령어. 실제로 "영웅 하나 만들기" |
| Warrior() | Player 클래스의 생성자(Constructor) 호출as |
| hero.Attack(); | 실제로는 Warrior가 재정의한 Attack() 실행됨 (다형성) |
▫️객체 생성 양식은 다음과 같다.
클래스이름 객체이름 = new 클래스이름();
여기서 클래스는 같은 클래스를 가르킨다.
- 인스턴스(instans) : 객체는 클래스의 인스턴스로, 동일한 클래스에서 여러 개의 객체를 생성할 수 있다.
- 속성 접근 : 객체의 필드(속성)에 접근하여 값을 설정하거나 읽을 수 있다.
- 메서드 호출 : 객체의 메서드를 호출하여 특정 동작을 수행할 수 있다.
▫️ 다형성(polymorphism)
hero 는 Player 타입의 변수이지만 실제로 가르키는 건 Warrior 객체이다. 그래서 hero.Attack() 을 호출하면 자식 클래스(Warrior)의 Attack() 이 실행된다.
Player hero = new Warrior();
hero.Name = "스파르타 전사";
hero.Attack();
hero 의 타입은 Player인데도, 실제로는 Warrior의 행동이 나타나는 이유가 virtual / override 를 통한 다형성 때문이다.
new Warrior () : Warrior 객체 생성(Player 기반 포함)
⇩
Player hero = ... : Player 참조 변수에 주소 저장
⇩
hero.Attack() : Player 타입이지만, Warrior의 메서드를 찾아 실행
⇩
결과:다형성 : "하나의 변수(hero)"가 여러 형태(player, warrior)로 행동 가능
Player hero1 = new Warrior();
Player hero2 = new Mage();
Player hero3 = new Archer();
hero1.Attack(); // 전사가 검 공격
hero2.Attack(); // 마법사가 마법 공격
hero3.Attack(); // 궁수가 화살 공격
따라서 이렇게도 확장이 가능하다.
Player 라는 공통된 타입 하나로 여러 서로 다른 행동을 통합 관리할 수 있게 할 수 있다.
'Development In Unity > Study : C#' 카테고리의 다른 글
| C# STUDY_TIL251009 [out, ref 키워드] (0) | 2025.10.09 |
|---|---|
| C# STUDY_TIL251008 [클래스 기초 문제 풀이, 제너릭] (0) | 2025.10.08 |
| C# STUDY_TIL251006 [숫자 맞추기 게임, 틱텍토 게임 구현] (0) | 2025.10.06 |
| C# STUDY_TIL251005 [메서드] (0) | 2025.10.05 |
| C# STUDY_TIL251004 [배열과 컬렉션] (0) | 2025.10.04 |
