🗓️ 오늘 하루 일정
✅ 오전
- 09:00 ~ 11:30 : 개인 복습 및 블랙잭 게임 완성
- 콘솔 블랙잭 게임 예제 제작 및 실습
- C# 문법 예제들 분석
- 인터페이스와 열거형
- 예외 처리
- 값형과 참조형 비교
- 박싱(Boxing) / 언박싱(Unboxing)
- 델리게이트와 람다식
- Nullable 타입과 null 조건 연산자(?.)
- StringBuilder 사용법
- 11:30 ~ 13:00 : C# 체크리스트 강의 Day2 수강
- 연산자 및 프로그래머스 실습 문제 풀이
- Math.Pow, Math.Sqrt, Math.Log10 등 수학 함수 사용 학습
🍽️ 점심시간
- 13:00 ~ 14:00 : 점심시간
✅ 오후
- 14:00 ~ 18:00 : 텍스트 RPG 프로젝트 개발
- Program 클래스
- Main() 메서드에서 게임 전체 흐름 시작
- StartGame()을 통해 시작화면 출력 및 Scene 이동 처리
- 전역 객체 관리: player, inventory, shop
- Player 클래스
- 플레이어의 상태 정보 보유: Name, Job, Level, HP, Attack, Defense, Gold
- PlayerInfo()로 상태 출력 (👉 오늘 꾸민 UI 포함)
- Item 클래스
- 아이템 속성 보유: Name, Info, Price, StatValue, ItemType, IsEquipped
- Inventory 클래스
- 아이템 보관 및 출력: Items 리스트
- AddItem(), ShowInventory(), ManageEquip() 메서드로 인벤토리 관리
- 오늘 꾸민 인벤토리 UI (장착 여부, 설명, 종류 표시 등)
- Shop 클래스
- 상점 아이템 리스트 보유 및 초기화: Items, InitializeItems()
- ShowShopMenu()를 통해 상점 기능 선택
- BuyItem()과 SellItem() 구현, 아이템 출력 정렬 + 색상 출력 등 UI 개선
- GameSystem 클래스 (static 유틸리티)
- 메시지 색상 출력 기능 모듈화
- 예: StringPrintRed(), StringPrintGreen(), FaileInput()
- Program 클래스
🍽️ 저녁시간
- 18:00 ~ 19:00 : 저녁식사 및 휴식
✅ 저녁 이후
- 19:00 ~ 21:00 : 텍스트 RPG 마무리 정리
- 플레이어 상태 보기 꾸미기
- 상점 메뉴 입장 오류 디버깅
- 인벤토리 장착 관리 switch-case 보완
✅ 오늘 학습 키워드
- 콘솔 블랙잭 게임 구현 실습
- C# 인터페이스 (interface)
- 열거형 (enum)
- 예외 처리 (try-catch)
- 값 형식과 참조 형식
- 박싱(Boxing)과 언박싱(Unboxing)
- 델리게이트(delegate)와 람다(lambda)
- Nullable 타입 & null 조건 연산자 (?.)
- StringBuilder 클래스
- 삼항 연산자(? :) 활용
- Console UI 색상 꾸미기
- 인벤토리/상점 시스템 구현
- 텍스트 RPG 시스템 개발 (Player, Item, Inventory, Shop 클래스 설계)
✅ 오늘 학습 한 내용을 나만의 언어로 정리하기
C# - 콘솔 블랙잭 게임 & 사용되는 예제들
1. 게임 기획게임 목표 정의 (21점을 넘지 않으면서 딜러보다 높은 점수 획득)플레이어 수 (1인 vs 딜러)승패 조건 정의카드 규칙 요약 (A=1 또는 11, J/Q/K=10, 숫자카드=해당 숫자)2. 기본 구조 설계클
dev-jen.tistory.com
C# - 인터페이스와 열거형 (Interface, enum)
✅ 인터페이스란 무엇인가요?객체지향 프로그래밍을 공부하면서 인터페이스는 정말 많이 등장하는 개념이다.클래스와 비슷해 보이지만, 사용하는 목적이 분명히 다르다.이번 글에서는 인터페
dev-jen.tistory.com
C# - 예외처리(Exception Handling)
✅ 예외 처리(Exception Handling) - 프로그램을 안전하게 지키는 방패C#을 비롯한 대부분의 언어에서는 **예외(Exception)**라는 개념이 있다.예외는 프로그램 실행 중에 발생하는 예상하지 못한 상황을
dev-jen.tistory.com
C# - 값형(Value Type)과 참조형(Reference Type) 그리고 박싱(Boxing) & 언박싱(Unboxing)
📦 값형과 참조형, 그리고 박싱과 언박싱 완전 정복하기!이번엔 C#을 공부하면서 헷갈리기 쉬운 개념 중 하나인**값형(Value Type)**과 참조형(Reference Type), 그리고그 사이에서 왔다갔다 하는 박싱(Bo
dev-jen.tistory.com
C# - 델리게이트와 람다, 함수도 변수처럼! + LINQ
🎯 델리게이트와 람다 - 함수도 변수처럼 다룰 수 있다?!이번엔 드디어 **델리게이트(delegate)**와 람다(lambda) 개념에 대해 배웠다.처음엔 "함수를 변수처럼 넘긴다고?" 싶어서 어려웠는데,직접 써
dev-jen.tistory.com
C# - Nullable 타입과 null 조건 연산자
❓ C# Nullable 타입과 null 조건 연산자 완전 정복프로그래밍을 하다 보면 "값이 없을 수도 있는 상황"이 자주 발생한다.예를 들어, 점수가 없을 수도 있고, 데이터가 존재하지 않을 수도 있다.이럴
dev-jen.tistory.com
C# - StringBuilder - 문자열 성능 최적화
🧱 StringBuilder - 문자열 성능 최적화의 열쇠C#에서 문자열을 다룰 때 가장 흔하게 쓰는 건 string 타입이다.그런데 문자열을 반복해서 붙이고 수정할 일이 많아지면,string을 계속 쓰는 건 성능적으
dev-jen.tistory.com
1. 콘솔 블랙잭 게임 실습
콘솔 게임을 통해 C#의 조건문, 반복문, 랜덤 숫자 생성, 리스트 사용을 복습했다. 사용자와 딜러가 번갈아 카드를 뽑고 점수를 비교하는 방식으로 진행되며, 게임 흐름 제어에 while, break, continue 등이 효과적으로 사용되었다.
2. 인터페이스 (interface)
interface는 클래스들이 공통적으로 가져야 할 기능(메서드 시그니처)을 정의하는 틀이다. 클래스에 : IAttackable 같은 식으로 상속하며, 명세된 메서드를 반드시 구현해야 한다. 인터페이스는 다중 상속이 가능하다는 점에서 클래스보다 더 유연한 설계가 가능하다.
3. 열거형 (enum)
열거형은 관련된 상수들을 그룹화해 코드를 더 명확하게 만든다.
예:
enum Scene { Start, PlayerInfo, Shop, Inventory, Battle, Dungeon }
숫자 대신 의미 있는 이름으로 분기를 할 수 있어 가독성이 향상된다.
4. 예외 처리 (try-catch)
사용자의 입력이나 연산 과정에서 오류가 발생할 수 있는데, 이를 미리 감지하고 처리할 수 있도록 try-catch 블록을 사용했다. 특히 int.Parse() 실패에 대비해 TryParse()로 안정성을 확보함.
5. 값 형식과 참조 형식, 박싱과 언박싱
int, float 같은 값형은 스택에 저장되고, class나 object는 힙에 저장되는 참조형이다. 값형을 object에 담을 때는 박싱(Boxing), 다시 꺼낼 땐 언박싱(Unboxing)이 일어난다. 메모리 구조를 이해하면 퍼포먼스 최적화에도 도움이 된다.
6. 델리게이트(delegate)와 람다(lambda)
델리게이트는 메서드를 변수처럼 다룰 수 있는 기능이고, 람다는 익명 메서드를 간결하게 작성할 수 있도록 도와주는 문법이다.
Action<string> print = (msg) => Console.WriteLine(msg);
7. Nullable 타입 & null 조건 연산자
값형에 null을 허용하려면 int?, bool? 같은 Nullable 타입을 사용한다. 객체가 null일 수 있는 경우에는 ?. 연산자를 통해 안전하게 접근 가능하다.
player?.ShowStatus();
8. StringBuilder
문자열을 반복적으로 더할 때 + 연산을 반복하는 대신 StringBuilder를 사용하면 성능이 좋아진다. Append(), ToString() 메서드를 사용하여 메모리 할당을 줄인다
9. 삼항 연산자 (? :)
if-else를 간단하게 표현할 수 있는 연산자로,
Console.ForegroundColor = item.Price != 0 ? ConsoleColor.Green : ConsoleColor.Gray;
이렇게 짧고 명확하게 조건 분기를 표현할 수 있다.
10. 텍스트 RPG 시스템 개발
오후에는 Player, Item, Inventory, Shop, GameSystem, Program 클래스를 나누어 텍스트 기반 RPG를 본격적으로 구현했다.
- 색상을 이용해 UI를 꾸몄고
- 플레이어 정보, 상점, 인벤토리 메뉴 분기
- 아이템 구매/판매/장착 기능을 구현
- enum, List<T>, switch, 삼항 연산자 등 다양한 문법을 실제 적용하며 객체 지향적 구조에 익숙해질 수 있었다.
🧩 학습하며 겪었던 문제점 & 에러
1. Console.WriteLine 출력 시 줄 맞춤이 어긋남
- 문제정의: 아이템 리스트를 표 형태로 출력할 때 글자들이 좌우로 밀리면서 줄 정렬이 맞지 않았다.
- 시도: PadRight()와 PadLeft()를 사용한 문자열 너비 조정 함수 AdjustWidth를 만들어서 글자 폭을 고정했다.
- 해결 방법: 숫자와 문자열의 길이를 고정폭으로 맞추고, 글자의 길이 차이로 생기는 문제를 보완함.
- 새롭게 알게 된 점: Console 출력은 글자 수 기준이기 때문에 한글과 영어, 이모지가 혼합되면 너비가 다를 수 있음.
- 다시 만나게 된다면: StringInfo, EastAsianWidth 또는 콘솔 전용 UI 라이브러리 사용 고려.
2. item.Price = 0 대입 오류 (읽기 전용)
- 문제정의: 아이템 가격을 item.Price = 0으로 수정하려고 하자 읽기 전용 속성이라는 에러 발생.
- 시도: Item 클래스의 Price 프로퍼티를 확인함.
- 해결 방법: Price { get; set; }로 set 접근자를 명시적으로 추가하여 수정 가능하게 만듦.
- 새롭게 알게 된 점: get; private set;처럼 set을 private으로 만들면 외부 클래스에서 값을 변경할 수 없음.
- 다시 만나게 된다면: 캡슐화가 필요한 상황인지 먼저 판단하고 접근 제한자를 적절히 설정할 것.
3. Scene enum을 switch문에서 사용할 때 case (int)Scene.Start처럼 형변환
- 문제정의: int를 입력받아 enum과 비교할 때마다 (Scene)Sel로 형변환을 해야 하는 게 번거로움.
- 시도: enum 이름을 그대로 사용하려고 했지만 컴파일 오류 발생.
- 해결 방법: Scene scene = (Scene)Sel;로 한 번만 변환한 뒤 switch (scene) 구문 사용.
- 새롭게 알게 된 점: enum은 int 기반이지만 명시적 형변환이 필요함.
- 다시 만나게 된다면: Enum.TryParse()를 사용하는 것도 좋은 방법.
4. 삼항 연산자 내 Console.ForegroundColor = ... 문법 오류
- 문제정의: 다음 코드에서 삼항 연산자 사용 시 문법 오류 발생
- item.Price != 0 ? Console.ForegroundColor = ConsoleColor.Green : Console.ForegroundColor = ConsoleColor.Gray;
- 시도: 삼항 연산자 내에 대입문을 넣어 표현하려고 시도
- 해결 방법: 삼항 연산자는 값의 반환에 적합하며 대입에는 적절하지 않음 → 아래처럼 변경
- Console.ForegroundColor = item.Price != 0 ? ConsoleColor.Green : ConsoleColor.Gray;
- 새롭게 알게 된 점: 삼항 연산자는 '값'을 선택하는 표현식이지, 문장(statement)을 수행하는 용도는 아님.
- 다시 만나게 된다면: 삼항 연산자는 반드시 반환 값이 있는 상황에서만 사용하는 것으로 기억할 것.
📝 메모

아직 구현안된게 너무 많다 하나씩 내일 다시 천천히 만들어보자.. 솔직히 하다보니까 생각보다 머리가 너무 아팠지만 근데 너무 재밌었다!! 내일 열심히 다시 만들어보자!!
오늘 하루 정말 많이 배우고, 많이 만들었다!
처음에는 단순한 텍스트 RPG라고 생각했는데, 만들면 만들수록 고려할 게 많고 UI도 신경 써야 할 게 많다는 걸 느꼈다.
C# 콘솔에서도 이렇게 다양한 표현이 가능하다는 게 신기했고, 내가 원하는 디자인을 직접 코딩해서 구현해낼 수 있다는 점이 정말 뿌듯했다.
처음 삼항 연산자 쓸 때 문법 오류 나서 조금 당황했지만, 그 덕분에 삼항 연산자의 역할은 '값 선택'에만 국한된다는 사실을 확실히 배웠다.
또, 콘솔 UI를 깔끔하게 꾸미는 데 문자열 너비 조정, 색상 변경, 이모지, 문자 폭 계산까지 다양한 요소가 필요하다는 걸 체감했다.
특히 오늘은 예외 처리, 박싱/언박싱, Nullable 타입, 람다 등 C#의 문법을 실전 프로젝트에 적용해보면서 훨씬 더 이해가 잘 됐다.
공부는 결국 직접 부딪히면서 구현해봐야 진짜 내 것이 된다는 걸 다시 느낀 하루였다.
내일도 조금씩 꾸준히 발전해나가자!
진짜 RPG 게임이 되는 그날까지! ✨
'스파르타 코딩클럽 > TIL작성' 카테고리의 다른 글
| TIL - 내일배움캠프 10일차 TIL [텍스트RPG, 정렬과 탐색 알고리즘] (3) | 2025.07.11 |
|---|---|
| 내일배움캠프 9일차 TIL [텍스트 RPG 개발] (0) | 2025.07.10 |
| TIL - 내일배움캠프 7일차 TIL [C# 튜플과 LINQ로 배우는 컬렉션 활용 + Snake 게임 제작기] (2) | 2025.07.08 |
| TIL - 내일배움캠프 6일차 TIL [기초 문법 강의 수강](25.07.07) (7) | 2025.07.07 |
| TIL - 내일배움캠프 5일차 TIL [디자인 패턴 + CS공부](25.07.04) (2) | 2025.07.04 |
