나 개발자 진짜 되냐?

[ C# 기본 문법 8 ] 조건문 본문

C# 을 맛보았어요!/문법정리를 해보았어요!

[ C# 기본 문법 8 ] 조건문

Snow Rabbit 2024. 9. 20. 16:49


정말 자주 쓰이는 조건문과 반복문

진짜 제대로 머리 싸매고 알아볼 예정이다.

 

🌟 If 문 🌟

주어진 조건식의 결과에 따라 프로그램의 제어 흐름을 변경하는 제어문

 

쉽게 말해서,

만약에.. 

라고 생각해 주면 좋다.

# 실행할 코드가 여러줄인 경우
if (조건식)
{
    // 조건식이 참일 경우 실행할 코드
}

# 실행할 코드가 한줄인 경우
if (조건식)
    // 조건식이 참일 경우 실행할 코드

만약에, 조건식이 참일 경우

if문 안으로 들어가서 조건문이 수행되는 방식이다.

 

중괄호는 웬만해서는 작성하는 것을 원칙!

 

 

⭐ else 문 ⭐

 

if문 조건식이 참이 아닐 경우 실행되는 조건문

 

if (조건식)
{
    // 조건식이 참일 경우 실행할 코드
}
else
{
    // 조건식이 거짓일 경우 실행할 코드
}

 

if문에서 거짓이 나와서 if {} 중괄호를 들어가지 못한다면

else가 실행

 

예시문을 봐보자

int itemCount = 5;
string itemName = "HP 포션";

if (itemCount > 0)
{
	// if문이 참일경우 즉 포션이 있을때
    Console.WriteLine($"보유한 {itemName}의 수량: {itemCount}");
}
else
{	// if문이 거짓일때, 즉 포션이 없을때
    Console.WriteLine($"보유한 {itemName}이 없습니다.");
}

 

 else if문 ⭐

if 문의 조건식이 거짓일 때, 새로운 조건식을 사용하여 실행 여부를 결정하는 조건문

 

else랑 차이점은

2개일 땐 else( 조건이 참인 거 제외 전부 ) 랑 if ( 조건문 ) 두 개

 

2개 이상일 땐

if ( 조건식 1) elseif( 조건식 2 ) else( 조건식 3, 나머지 전부 )

를 의미한다.

 

if (조건식1)
{
    // 조건식1이 참일 경우 실행할 코드
}
else if (조건식2)
{
    // 조건식2가 참일 경우 실행할 코드
}
else
{
    // 모든 조건식이 거짓일 경우 실행할 코드
}

 

전체적인 예시문이다.

눈으로 보면서 else와 elseif의 차이점을 꼭 확인해 보자

int playerScore = 100;
string playerRank = "";

if (playerScore >= 90)
{
    playerRank = "Diamond";
}
else if (playerScore >= 80)
{
    playerRank = "Platinum";
}
else if (playerScore >= 70)
{
    playerRank = "Gold";
}
else if (playerScore >= 60)
{
    playerRank = "Silver";
}
else
{
    playerRank = "Bronze";
}

Console.WriteLine("플레이어의 등급은 " + playerRank + "입니다.");

 

중첩 조건문

조건문 안에 조건문이 있는 경우

즉,

if문 안에 if문이 또 있는 경우

int itemLevel = 3; // 아이템 레벨
string itemType = "Weapon"; // 아이템 종류

if (itemType == "Weapon")
{
    if (itemLevel == 1)
    {
        // 레벨 1 무기 효과
        Console.WriteLine("공격력이 10 증가했습니다.");
    }
    else if (itemLevel == 2)
    {
        // 레벨 2 무기 효과
        Console.WriteLine("공격력이 20 증가했습니다.");
    }
    else
    {
        // 그 외 무기 레벨
        Console.WriteLine("잘못된 아이템 레벨입니다.");
    }
}
else if (itemType == "Armor")
{
    if (itemLevel == 1)
    {
        // 레벨 1 방어구 효과
        Console.WriteLine("방어력이 10 증가했습니다.");
    }
    else if (itemLevel == 2)
    {
        // 레벨 2 방어구 효과
        Console.WriteLine("방어력이 20 증가했습니다.");
    }
    else
    {
        // 그 외 방어구 레벨
        Console.WriteLine("잘못된 아이템 레벨입니다.");
    }
}
else
{
    // 그 외 아이템 종류
    Console.WriteLine("잘못된 아이템 종류입니다.");
}

 

예시를 보며 확인해 보자!

if 문안에서

또 만약에, 를 작성하는 코드이다.

 

 중첩 조건문

if문을 간단하게 만드는 형태로

조건식의 결과에 따라 두 값을 선택하는 연산자

 

(조건식)? 참일 경우 값 : 거짓일 경우 값;

int currentExp = 1200;
int requiredExp = 2000;

# 삼항 연산자
string result = (currentExp >= requiredExp) ? "레벨업 가능" : "레벨업 불가능";
Console.WriteLine(result);


# if else 문
if (currentExp >= requiredExp)
{
    Console.WriteLine("레벨업 가능");
}
else
{
    Console.WriteLine("레벨업 불가능");
}

 

이런 기능이 있다 정도만 알아두자!

 

길어 보이는 if문을 

간단하게 줄일 수 있다는 장점이 있다.

두 가지 일경우만 사용하는 것이 헷갈리지 않는다!


 

🌟 Switch 문 🌟

변수나 식에 따라 다른 코드 블록을 실행하는 제어문

switch (변수나 식)
{
    case 값1:
        // 값1이 나온 경우 실행되는 코드
        break;
    case 값2:
        // 값2가 나온 경우 실행되는 코드
        break;
    // ...
    default:
        // 모든 case문에 해당하지 않는 경우 실행되는 코드
        break;
}

 

 break라는 친구를 통해

case하나를 탈출할 수 있다.

 

if문과의 차이점을 본다면

 

if문은 참문장이 나오면

다른 문장을 다 배제하지만

 

switch는 케이스가 하나하나 있기 때문에

case4가 정답이어도

1,2,3,4,5,6까지 스윽 내려가 보기 때문에

사실 컴퓨터한테는 뭐

어엉ㅁ청난 차이가 있는 건 아니지만..

 

사용하는 메모리가 조금 더 있지 않을까? 하는 게

제 생각..ㅎㅎ

 

하지만!

 스위치를 사용하는 것이 더 효율적일 때도 많기 때문에

적재적소에 잘 사용하는 것이 중요하다!

 

예시문이다.

Console.WriteLine("게임을 시작합니다.");
Console.WriteLine("1: 전사 / 2: 마법사 / 3: 궁수");
Console.Write("직업을 선택하세요: ");
string job = Console.ReadLine();

switch (job)
{
    case "1":
        Console.WriteLine("전사를 선택하셨습니다.");
        break;
    case "2":
        Console.WriteLine("마법사를 선택하셨습니다.");
        break;
    case "3":
        Console.WriteLine("궁수를 선택하셨습니다.");
        break;
    default:
        Console.WriteLine("올바른 값을 입력해주세요.");
        break;
}

Console.WriteLine("게임을 종료합니다.");

if문이랑 굉장히 비슷한 친구지만.

switch 문과 if문을 동시에 쓸 수 있다면

if문을 쓰는 것이 더 효율적이지 않을까..

라는 생각이 들었다.

 


지금까지 한 내용을 바탕으로

여러 예시들을 준비했다!

 

보면서

if문을 활용해 보자

 

1. 홀수 짝수 구분하기

홀수 짝수는 어떻게 구분할까?

수학적 패턴을 분석해 보자

홀수는 2로 나눌 때 나머지가 1이고

짝수는 2로 나누면 나머지가 0이다

 

이것을 활용해 보자!

Console.Write("번호를 입력하세요: ");
int number = int.Parse(Console.ReadLine());

if (number % 2 == 0)
{
    Console.WriteLine("짝수입니다.");
}
else
{
    Console.WriteLine("홀수입니다.");
}

 

저번에 배운 친구 ReadLind 입력받아오는 친구인데,

 

ReadLine 하고

그 값을 따로 parse 하는 게 아니라

한 번에 가능할 수 있다!

 

 

 

2. 등급을 스위치로 표현

case를 나누어서

90점일 때 80점일 때

등등해주고

break;

잊지 않기!!

 

int playerScore = 100;
string playerRank = "";

switch (playerScore / 10)
{
	case 10:
	case 9:
		playerRank = "Diamond";
		break;
	case 8:
		playerRank = "Platinum";
		break;
	case 7:
		playerRank = "Gold";
		break;
	case 6:
		playerRank = "Silver";
		break;
	default:
		playerRank = "Bronze";
		break;
}

Console.WriteLine("플레이어의 등급은 " + playerRank + "입니다.");

 

3. 로그인 프로그램 만들어보기

논리연산자를 이용해서

아이디랑 패스워드가 다 같으면 성공!

하나라도 다르면 실패..!!

 

string id = "myid";
string password = "mypassword";

Console.Write("아이디를 입력하세요: ");
string inputId = Console.ReadLine();
Console.Write("비밀번호를 입력하세요: ");
string inputPassword = Console.ReadLine();

if (inputId == id && inputPassword == password)
{
    Console.WriteLine("로그인 성공!");
}
else
{
    Console.WriteLine("로그인 실패...");
}

 

4. 알파벳 판별 프로그램

 

비슷한 원리로

대문자 A부터 Z까지

또는

소문자 a부터 z까지 

맞으면 알파벳, 아니면 아니라고!

Console.Write("문자를 입력하세요: ");
char input = Console.ReadLine()[0];

if (input >= 'a' && input <= 'z' || input >= 'A' && input <= 'Z')
{
    Console.WriteLine("알파벳입니다.");
}
else
{
    Console.WriteLine("알파벳이 아닙니다.");
}
​

 

여기서 중요한건,

 

두번째 줄 char 도 문자 이기 때문에

따로 문자열처리를 안해줘도 된다.

 

[0] 이것은 인덱스로

받은 문자열에 첫번째 친구를 가져올거에요!

라고 해석 할 수 있다.