목차
C# 개인 학습 및 팀 프로젝트
https://www.udemy.com/course/the-complete-c-sharp-developer-course/
Section 2 마무리 Assignments 3개를 진행했다.
Assignment 1
string name;
int age = 0;
Console.WriteLine("What is your name?");
name = Console.ReadLine();
Console.WriteLine($"Nice to meet you {name}. My name is Younga. How old are you?");
do
{
string input = Console.ReadLine();
if (int.TryParse(input, out age))
{
Console.WriteLine($"{age} yrs old. Good, as for me I was born on 2002 which makes me 15 yrs old.");
}
else
{
Console.WriteLine("Please enter number for your age");
}
} while (age == 0);

Assignment2
integer input을 받는 경우가 반복되어서 아예 메서드로 빼버렸다.
static void Assignment2()
{
int day = 0;
int month = 0;
int year = 0;
Console.WriteLine("Enter the day");
day = GetInteger();
Console.WriteLine("Enter the month");
month = GetInteger();
Console.WriteLine("Enter the year");
year = GetInteger();
DateTime date = new DateTime(year, month, day);
Console.WriteLine($"{date.ToString("yyyy-MM-dd")} should be {date.DayOfWeek}.");
}
static int GetInteger()
{
int integer = 0;
do
{
string input = Console.ReadLine();
if (!int.TryParse(input, out integer))
{
Console.WriteLine("Please enter number only.");
}
} while ( integer == 0);
return integer;
}

Assignment3
var day = DateTime.Today.DayOfWeek.ToString();
switch(day)
{
case "Monday":
Console.WriteLine("Blue");
break;
case "Tuesday":
Console.WriteLine("Grey");
break;
case "Wendesday":
Console.WriteLine("Red");
break;
case "Thursday":
Console.WriteLine("Orange");
break;
case "Friday":
Console.WriteLine("White");
break;
case "Saturday":
Console.WriteLine("Yellow");
break;
case "Sunday":
Console.WriteLine("Green");
break;
}

여기에 이어서
2025.07.01 - [부트캠프/개인학습] - C# 프로그래밍 기초
TryParse, const (상수), Command Prompt 설정, 문자열 조작 (String Manipulation), 이스케이프 시퀀스 (Escape Sequences), 문자열 연결 항목들을 정리했다.
Git Stash
Git Stash에 대해서 이해한 것 같다!
현재 작업 중인 변경사항을 임시로 저장(stash)해두고, 작업 디렉토리를 깨끗하게 만든다.
그래서 커밋(이름) 입력하는 곳 상단에 뜨는 stashed changes를 클릭하면 저장된 시점의 코드를 확인할 수 있다.
여기서 restore를 누르면, 저장되었던 코드가 다시 적용된다.
Discard를 누르면 저장된 stash만 삭제된다.
따라서, 해당 부분을 커밋 완료한 이후 필요가 없어지면 stash를 discard 하는 것 자체는 괜찮다!
임시저장소 같은 것이라고 이해하기로 했다.
Coroutine
Coroutine: 시간이 걸리는 작업을 순차적으로 처리 할 수 있도록 도와주는 Unity의 기능.
동시에 여러 작업을 하는 것처럼 보이게 만들거나, 중간에 다시 멈췄다가 다시 이어서 실행할 수 있는 함수이다.
C#에도 sleep, delay와 같은 개념이 있긴 하지만, 이를 Unity에서 사용하면 전체 게임이 멈춘다거나 하는 결과가 나온다.
반면에 Coroutine은 게임을 멈추지 않고도 기다리거나 반복 작업을 할 수 있게 해준다.
예를 들면 라면을 끓일 때 물을 올려서 끓을 때까지 기다린 후에 면과 스프를 넣고 다시 3분 기다리는 것처럼 순서 대로 진행할 수 있다.
그 동안 TV를 동시에 시청한다거나 하는 작업도 가능하다. 전체 기능을 멈추는 것이 아니라 Coroutine만 멈추고 반복하는 것이기 때문이다.
StartCoroutine()
IEnumerator 타입인 Coroutine 메소드를 실행할 때 사용.
비동기 작업 (딜레이, 애니메이션 타이밍 등)에 자주 사용된다.
StartCoroutine(MyCoroutine());
IEnumerator MyCoroutine()
{
yield return new WaitForSeconds(2f);
Debug.Log("2초 후 실행됨");
}
StopAllCoroutines(), StopCoroutine()
현재 MonoBehaviour에서 실행 중인 모든 Coroutine을 중단.
씬 전환, 게임 오버, 리셋 시 사용된다.
StopAllCoroutines();
StopCoroutine(myRoutine); // myRoutine만 중단
//예시
void Start()
{
StartCoroutine(AutoSave());
StartCoroutine(ShowWarning());
}
public void OnGameOver()
{
StopAllCoroutines(); // 현재 스크립트(this)의 실행중인 Coroutines 중단
ShowGameOverUI();
}
yield return
Coroutine 함수 내에서 실행을 일시 중단하고 특정 조건(시간, 프레임 등)이 되면 다시 이어서 실행하도록 하는 명령어
yield return null; //다음 프레임까지 대기
yield return new WaitForSeconds(2f); //2초 동안 대기
yield return new WaitForEndOfFrame(); //현재 프레임이 끝날 때까지 대기
yield return new WaitUntil(() => count == 0); //조건이 참이 될 때까지 대기 (람다식 사용)
yield return StartCoroutine(AnotherCoroutine()); //AnotherCoroutine이 끝날 때까지 대기
Time을 if 문 조건에 포함시켰을 때...
이미 사전캠프 진행하면서 Time을 가지고 if 문을 이용 했을 때 도저히 조건에 걸리지 않아서 애를 먹었었다.
이번에는 다른 경우지만 Time 때문이었다는 점이 비슷해서 캐치할 수 있었다.
앞으로는 if 문 조건에 Time이 있는데 뭔가 안된다? 무조건 Time 탓을 하게 될 것 같다.
Update() 에서 호출되는 메서드 안에서 GameManager.instance.TimeSet을 가지고 비교를 해야했다.
게임 성공은 시간이 0보다 많이 남아있어야 하고, 0이거나 그보다 작으면 실패인 것이다.
이때 시간을 멈췄어야 했는데 멈추지 않고 계속 진행된 것 같다.
시간이 계속 줄어들면서 이후에는 0보다 작게 되어 게임 실패 창을 액티브하는 트리거가 된 것.
메인 화면으로 가기 버튼을 누르면 실패 창이 잠깐 겹쳐져서 뜨고 타이틀로 돌아간다.
이때 resultShown 변수를 생성해주어서 보여줬다면 스킵하도록 코드를 짜주었다.
시간을 멈추는 쪽도 괜찮았겠지만, 현재 코드가 스파게티 처럼 꼬여있고, 당장 내일이 제출이라 일단은 이렇게 봉합했다.
private bool resultShown = false;
//End() 시작 직후
if (resultShown) return;
//End() 끝 직전
resultShown = true; //결과 보여줬다고 표시
//Start()에서 다시 false로 초기화
resultShown = false;


느낀점
팀으로 코딩하면서 엄청 배운 게 많다.
Coroutine...? 뭐야.. 나 이런거 안배웠어.. 였는데 다른 팀원들이 사용하는 것을 보고 존재를 인지할 수 있었다.
엄청 좋은, 그리고 필수적인 기능이었잖아?
내일 학습 할 것은 무엇인지
내일 발표할 때 발표 자료를 만들라고 하셨는데, 어떻게 만들어야할지 감이 안잡혀서 예시를 보여달라고 요청해볼까 싶다.
또한 셋쨋날에 하차하신 팀원분 이름과 사진이 그대로 있는데, 이름을 List에서 빼기가... 무섭다.
실은 한번 건들여봤었는데 에러가 엄청 떴었다. 아예 카드 셔플이 안되더라.
'부트캠프 > 본캠프' 카테고리의 다른 글
| [내일배움캠프_2025JUL05] C# 종합 프로그래밍 - 챕터1 (0) | 2025.07.05 |
|---|---|
| [내일배움캠프_2025JUL04] 팀 프로젝트 발표 및 TIL 특강 (0) | 2025.07.04 |
| [내일배움캠프_2025JUL02] C# 개인 학습 및 팀 프로젝트 (0) | 2025.07.02 |
| [내일배움캠프_2025JUL01] C# 개인 학습 및 팀 프로젝트 (0) | 2025.07.01 |
| [내일배움캠프_2025JUN30]팀 카드 맞추기 게임 + Git (0) | 2025.06.30 |