본문 바로가기

C#43

하드코딩으로 구현한 간단한 퀘스트 분기 처리 C# 에서 하드코딩으로 의사 결정 트리를 구성해보았습니다. 이 구조는 복잡한 if-else 대신, 조건과 결과를 분기 노드(DecisionNode) 형태로 깔끔하게 구성할 수 있어 가독성과 유지보수 측면에서 유리합니다. 퀘스트 트리플레이어의 상태에 따라 다음과 같은 분기를 수행하는 퀘스트 결정 트리를 만듭니다[레벨 ≥ 15?]├─ 예 → [고대 열쇠 + 왕의 인장 있음?]│ ├─ 예 → [튜토리얼 + 사이드미션1 완료?]│ │ ├─ 예 → 🎁 특별 퀘스트 지급: 왕의 시험│ │ └─ 아니오 → 📌 보조 퀘스트들을 먼저 완료하세요.│ └─ 아니오 → 🔑 필요한 아이템이 없습니다.└─ 아니오 → [VIP 토큰 있음?] ├─ 예.. 2025. 5. 2.
Dictionary 를 배열처럼 접근할 때 주의사항 C# 에서 Dictionary는 대괄호 [ ] 기호를 사용해 값을 가져오기 때문에 얼핏 보면 배열처럼 보입니다.그래서 처음에는 for (int i = 0; i 하지만 아래 코드를 보면, 배열처럼 접근하는 것이 왜 문제가 되는지 쉽게 이해할 수 있습니다. 실행시 오류가 나는 코드Dictionary numbers = new Dictionary() { { 1, "one" }, { 20, "twenty" }, { 3, "three" }, { 19, "nineteen" }, { 5, "five" }, }; for (int i = 0; i 이 코드는 실행과 동시에 다음과 같은 예외를 발생시킵니다The given key '0' was not present in the dictio.. 2025. 5. 2.
Parsing과 TryParse() 계열 함수들 Parsing 은 문자열을 특정 데이터 형식으로 변환하는 과정을 말합니다.예를 들어, 문자열 "123"을 정수형 int로 변환하는 것이 대표적인 예입니다.Parsing은 주로 입력 값 검증이나 데이터 변환을 위해 사용됩니다.문자열을 다른 형식으로 변환할 때, 특히 형 변환이 실패할 수 있는 경우를 대비하여 예외 처리를 고려해야 합니다. 예를 들어, "123"을 정수로 변환하는 건 문제가 없지만, "abc" 를 정수로 변환하려고 하면 예외가 발생할 수 있습니다. 이러한 예외를 처리하는 데 유용한 메서드가 바로 *TryParse()* 입니다. TryParse() 계열 함수들TryParse()는 형 변환이 실패할 가능성이 있는 경우 예외를 발생시키지 않고 안전하게 변환을 시도할 수 있는 메서드입니다. 형 변환.. 2025. 4. 30.
이벤트 관리를 위한 설계 제안 게임 매니저와 같은 싱글톤 클래스에서 모든 이벤트를 관리하는 방식은 초기에 유용하지만, 게임이 커짐에 따라 사소한 이벤트까지 게임 매니저가 처리하게 되어 코드가 비대해지고 복잡해지기 시작합니다. 이런 상황에서는 이벤트를 분리하여 관리하는 방식이 필요합니다. 이벤트 관리 방식의 문제점게임 매니저가 모든 이벤트를 관리하다 보면, 게임 로직과 UI 관련 코드가 혼합되어 유지보수가 어려워집니다. 또한, 이벤트가 늘어나면서 게임 매니저가 점점 비대해지고, 단일 책임 원칙에 어긋나게 됩니다. 예를 들어, 보너스 점수 증가, UI 업데이트, 플레이어 상태 변화 등 모든 이벤트를 게임 매니저가 관리하게 되면, 게임의 확장성에 한계를 가져오게 됩니다. 이벤트 전담 클래스를 도입한 해결책이벤트 전담 클래스를 도입하면, 게.. 2025. 4. 30.
Unity 에서 Singleton 클래스에 Instance로 접근하는 이유 C# 또는 Unity에서 싱글톤 클래스를 만들 때, 우리는 보통 두 가지 접근 방식을 선택하게 됩니다.하나는 Instance를 공개하여 Manager.Instance.SomeFunction()처럼 접근하는 방식이고, 다른 하나는 Instance를 숨기고 변수나 함수를 static으로 포장하여 Manager.SomeFunction()처럼 접근하는 방식입니다. 두 방법 모두 실제로 동작하지만, 장기적으로 보면 Instance를 명시적으로 사용하는 방식이 훨씬 낫습니다. Instance를 공개하는 방식public class GameManager : MonoBehaviour { public static GameManager Instance { get; private set; } public.. 2025. 4. 30.
속성은 컴파일 단계에서 변수를 자동 생성합니다 C# 어플리케이션에서 Property(속성)을 보면, 단순히 변수처럼 값을 저장하고 불러오는 것처럼 보입니다.하지만 실제로 속성은 변수와는 다릅니다.속성은 컴파일 단계에서 숨겨진 변수를 자동으로 생성하고, 이 변수에 값을 저장하거나 가져오는 메소드 형태로 동작합니다. Property는 데이터를 저장하는 것처럼 보이지만, 실제로는 값을 저장하고 읽어오는 메소드가 결합된 구조입니다. 예시public int Score { get; private set; } 겉으로 보기에는 Score라는 변수가 하나 있는 것처럼 보입니다.하지만 컴파일 시점에서는 다음과 같이 변환됩니다.[CompilerGenerated] private int k__BackingField; public int Score { [Compile.. 2025. 4. 28.