내일배움캠프 9일차 TIL
❓오늘 겪은 문제
어제부터 Text RPG 과제하고 있는데 모든 기능에서 선택지 이외의 입력을 했을 때 오류 확인하다가
이름 입력 후 저장 / 취소를 선택하는 흐름에서 의도와 다르게 작동하는 걸 발견했다!!
문제 상황
NameInput() 함수에서 사용자가 이름을 입력하고, 저장(1) 또는 취소(2)를 선택해야 하는 구조였는데
그런데 1, 2 이외의 잘못된 값을 입력하면 이름이 공백("")으로 초기화되어버리는 문제가 생기는 것!
while (true)
{
player.Name = Console.ReadLine(); // 여기가 문제
...
}
player.Name에 바로 입력값을 할당하는 코드가 루프 안에 있었는데
선택지에서 "잘못된 입력"이 들어오면 루프가 다시 시작되면서 Console.ReadLine()이 또 실행됨
사용자는 이름을 다시 입력한 적이 없지만, 입력값 없이 루프만 도는 상황에서 player.Name = ""으로 바뀌어버렸다..
이게 문제인줄 모르고 잘못입력했을 때 아무 키나 입력받아 다시 처음부터 반복하는 반복문 내 로직 문제인 줄 알고 계속 수정하고있엇음..
해결 방법
이름 입력하는 함수와 저장하는 선택지를 분리
프로젝트를 처음 실행하면 나오는 화면에서 사용자에게 이름을 입력받고,
입력을 확정할 건지 다시 입력할 건지는 다른 함수에서 입력받기로!
public static void StartScreen()
{
Console.WriteLine("던전에 오신 여러분 환영합니다.");
Console.WriteLine("원하시는 이름을 설정해주세요.");
Console.Write(">> ");
player.Name = Console.ReadLine();
}
public static void NameInput()
{
while(true)
{
Console.Clear();
Console.WriteLine($"입력하신 이름은 {player.Name} 입니다.\n");
Console.WriteLine("1. 저장");
Console.WriteLine("2. 취소");
Console.Write("\n원하시는 행동을 입력해주세요.\n>> ");
string input = Console.ReadLine();
switch (input)
{
case "1":
break;
case "2":
Console.Clear();
StartScreen();
continue;
default:
Console.WriteLine("잘못된 입력입니다. 아무 키나 눌러 계속...");
Console.ReadKey();
continue;
}
break;
}
}
이러한 구조를 통해 이름을 다시 입력할 필요 없이 잘못된 입력에도 기존 입력을 유지할 수 있었다.
그리고 불필요한 중복 호출(NameInput() 내에서 자기 자신 호출)을 제거하여 스택 낭비를 방지했다.
💡 오늘의 교훈
- 루프 안에 입력을 두면 무조건 반복될 수 있다 → 입력 로직은 루프 밖에!
- 유저 입력 처리 시, 로직 순서를 신경 써야 값이 불필요하게 초기화되지 않는다.
- Console.ReadLine()이 입력마다 실행되는 타이밍을 정확히 이해하는 것이 중요!
🧠 기억할 포인트
- while 루프에서는 입력 / 처리 / 검증을 분리해서 구성하자
- 사용자의 상태(입력값, 선택 등)는 유지될 수 있어야 UX가 자연스러움
- Console.ReadLine()이 호출되는 위치 = 사용자의 입력을 요구하는 시점임을 명확히 인식할 것

'TIL' 카테고리의 다른 글
| TextRPG 팀 프로젝트 기획 & 협업 환경 세팅 (0) | 2025.04.21 |
|---|---|
| 오버로딩과 오버라이딩 (0) | 2025.04.18 |
| 델리게이트(Delegate)와 이벤트(Event) (0) | 2025.04.16 |
| 인터페이스 vs 추상 클래스 (0) | 2025.04.15 |
| 구조체(struct) vs 클래스(class) (0) | 2025.04.14 |