팀스파르타 코딩

📚 복습 정리 - 텍스트 RPG 개발에 사용된 C# 개념들 (개념 + 실습 응용)

creator2041 2025. 4. 16. 15:38

📌 01. 클래스와 객체(Class & Object)

  • 클래스(Class): 객체를 만들기 위한 설계도. 게임에서는 Player, Inventory, Item, Shop 등으로 기능별로 나누어 설계했습니다.
  • 객체(Object): 클래스로부터 생성된 실체. new 클래스명()으로 생성되며, 실제 게임에서 사용되는 데이터 단위입니다.
  • 역할: 현실 세계의 개념(플레이어, 상점 등)을 코드로 추상화하여 관리할 수 있도록 합니다.
Player player = new Player("이름", "직업");

📌 02. 생성자(Constructor)와 소멸자(Destructor)

  • 생성자: 객체가 생성될 때 자동으로 실행되어 초기화 작업 수행. 직업별 스탯 설정 등에 사용됩니다.
  • 소멸자: 객체가 메모리에서 제거될 때 호출. 보통 자원 해제용으로 사용되며, C#에서는 자주 직접 사용하진 않음.
public Player(string name, string job) { ... }  // 생성자
~Player() { ... }                              // 소멸자
  • 활용 예: Player 클래스의 생성자에서 SetInitialStats()를 호출하여 직업에 맞는 스탯을 자동 설정합니다.

📌 03. 접근 제한자 (Access Modifiers)

  • 개념: 클래스나 클래스 내부 요소의 접근 가능 범위를 제한하는 키워드.

키워드 설명

public 외부 모든 클래스에서 접근 가능
private 해당 클래스 내부에서만 접근 가능
protected 해당 클래스와 상속받은 클래스만 접근 가능
public string Name { get; private set; }
  • 활용 예: 외부에서 Name은 읽을 수 있지만, 수정은 불가하도록 private set으로 설정.

📌 04. 필드(Field)와 프로퍼티(Property)

  • 필드(Field): 클래스 내부에서 데이터를 저장하는 변수. 보통 private로 선언.
  • 프로퍼티(Property): 외부에서 안전하게 필드 값을 읽거나 쓸 수 있도록 하는 인터페이스.
private int health;
public int Health { get; private set; }
  • 활용 예: Player 클래스의 스탯(공격력, 방어력 등)을 외부에서는 읽기만 가능하도록 설정해 게임 밸런스를 유지.

📌 05. 메서드(Method)

  • 개념: 클래스의 동작을 정의하는 코드 블록. 재사용성과 가독성을 향상시킴.
public void DisplayStatus() { ... }
  • 활용 예: Inventory.AddItem() → 아이템 추가 / Player.UpdateStats() → 장비에 따른 능력치 갱신 / Game.Start() → 게임 시작 흐름 구성

📌 06. 조건문 (if, switch)

  • 개념: 특정 조건에 따라 실행 흐름을 다르게 설정하는 문법.
if (player.Health <= 0) { ... }
switch (job) { case "전사": ... }
  • 활용 예: 직업별 스탯 부여, 아이템 구매 가능 여부 판단, 입력 값 처리 등에 사용됨.

📌 07. 반복문 (for, while)

  • 개념: 특정 코드를 여러 번 반복 실행할 수 있게 하는 문법.
for (int i = 0; i < items.Count; i++) { ... }
while (true) { ... }
  • 활용 예: 인벤토리 출력 반복, 장착 아이템 검색, 메인 메뉴 루프 처리 등.

📌 08. 컬렉션 (List)

  • 개념: 동일한 타입의 데이터를 순차적으로 담는 컨테이너. 유연한 데이터 관리 가능.
List<Item> items = new List<Item>();
  • 활용 예: Inventory 클래스의 아이템 목록, Shop 클래스의 판매 아이템 등.

📌 09. 열거형 (enum)

  • 개념: 관련된 상수 값을 그룹화하여 사용하기 편하게 만들어 주는 자료형.
public enum ItemType { Weapon, Armor, Consumable }
  • 활용 예: 아이템의 종류를 명확하게 구분하여 처리. 장비 구분, 구매 판단 등에 활용됨.

📌 10. 상속과 추상 클래스

  • 상속: 부모 클래스의 속성과 메서드를 자식 클래스가 물려받아 사용.
  • 추상 클래스: 구체화되지 않은 메서드를 자식 클래스에서 구현하게 강제하는 구조.
abstract class GameScene { public abstract void Run(); }
  • 활용 예: GameScene을 기반으로 ShopScene, InventoryScene, StartScene 등을 상속 구현하여 씬마다 다른 동작 정의.

📌 11. LINQ (Where, FirstOrDefault 등)

  • 개념: 컬렉션 데이터에서 조건에 맞는 항목을 편리하게 찾거나 필터링할 수 있게 하는 문법.
var equippedItems = items.Where(item => item.IsEquipped).ToList();
  • 활용 예: 인벤토리에서 장착된 아이템만 골라 출력할 때 활용.

📌 12. 캡슐화 (Encapsulation)

  • 개념: 데이터와 그 데이터를 처리하는 코드를 하나로 묶고 외부로부터 숨기는 것. 객체지향의 핵심 개념 중 하나.
  • 활용 예: Inventory 클래스의 items 필드는 private으로 외부 직접 접근 차단, 대신 GetItems()를 통해 안전하게 정보 제공.

📌 13. 난수(Random)

  • 개념: 무작위 수를 생성하는 기능. 게임의 불확실성과 재미 요소를 강화합니다.
Random random = new Random();
int value = random.Next(1, 101);
  • 활용 예: 던전 탐험에서 보상 지급 여부, 획득 아이템 결정 등 확률적 이벤트 처리에 사용됨.

✅ 이 개념들이 어떻게 게임을 구성했나?

개념 게임 내 역할 설명

클래스/객체 Player, Inventory, Shop 등 주요 요소 정의 및 생성
생성자 캐릭터 생성 시 초기 능력치 설정 및 기본 아이템 지급
메서드 상태 출력, 장비 변경, 상점 구매, 전투 계산 등 행동 구현
조건문/반복문 메뉴 입력 처리, 루프 반복, 전투 상황 판단 등 흐름 제어
컬렉션 & LINQ 인벤토리 관리, 장착 아이템 필터링, 상점 아이템 조회 등
프로퍼티/접근제한 외부 접근 제어 및 캡슐화로 객체 보호
캡슐화/상속/다형성 GameScene 기반 씬 구조 설계 및 동작 정의 분리
Random 전투 성공 여부, 랜덤 보상, 아이템 드랍 등 불확실성 구현

🎯 GPT랑 구글링에 기대서 어찌어찌 만들긴 했는데... 이제부터가 진짜 공부 시작인 것 같다.

다음 주 시험도 있고, 개념들을 확실히 내 걸로 만들어야겠다는 생각이 든다. 필드, 메서드, 생성자, 상속, 추상 클래스 같은 거... 처음엔 그냥 단어 외우는 기분으로 봤는데, 막상 직접 RPG 코드 짜보니까 "아, 이래서 이런 식으로 쓰는 거구나" 싶더라.

특히 장비 장착/해제 구현하면서 메서드와 프로퍼티가 어떤 역할을 하는지 몸으로 느꼈던 것 같다. 생성자는 초기값 셋팅할 때 얼마나 중요한지도 이번에 확실히 알게 됐고.

개념은 이해되는데 막상 백지 상태에서 똑같이 만들어보라고 하면 너무 막막하다. 어디서부터 시작해야 할지도 잘 모르겠고... 기능은 아는데 '어떻게 짜야 하지?' 싶을 때가 너무 많다. 이거 연습 진짜 많이 해야겠다 싶었음.

구조는 이제 조금 보이니까 다음엔 몬스터도 만들고, 스킬도 넣고, 전투도 조금 더 고도화해보고 싶다. 진짜 게임 시스템처럼 짜보는 게 목표다. 물론 우리는 유니티로 개발하게 되겠지만, 이런 텍스트 기반 게임부터 차근차근 밟아가는 게 진짜 중요한 것 같음.

GPT랑 구글링 도움 받아서 어찌어찌 완성은 했지만, 아직도 기초 개념이 체화되진 않은 느낌이라 다음 주 시험 전에 개념 하나하나 다시 뜯어보고 복습하면서 완전히 내 걸로 만들어야겠다고 다짐 중이다. 그래도 이제 진짜 게임 개발 입문 문턱에 딱 서 있는 느낌이다. 계속 공부하고 연습하면 점점 나아질 거라 믿고 있음!