전체 코드

#include <iostream>
using namespace std;

int main()
{
    // [배경 설명]
    // 몬스터 체력 관리 시나리오
    int hp = 100;   // 몬스터의 체력 (초기값)
    int damage = 100;   // 플레이어의 공격력 (데미지)

    // 🪐 1️⃣ 피격 처리 (hp 감소)
    hp -= damage;   // hp = hp - damage

    // 🪐 2️⃣ 처치 판정 (hp <= 0 이면 죽은 것으로 간주)
    bool isDead = (hp <= 0);

    // 🔥 3️⃣ if 문 - 조건에 따른 처리 흐름
#pragma region if문
    if (isDead)
    {
        cout << "몬스터를 처치했습니다" << endl;
        cout << "경험치를 획득했습니다." << endl;
    }
    else
    {
        if (hp <= 20)
            cout << "몬스터가 도망가고 있습니다." << endl;
        else
            cout << "몬스터가 반격했습니다." << endl;
    }

    // 위의 중첩 if-else를 풀어서 표현하면 아래처럼도 가능
    /*
    if (isDead)
    {
        cout << "몬스터를 처치했습니다" << endl;
    }
    else if (hp <= 20)
    {
        cout << "몬스터가 도망가고 있습니다." << endl;
    }
    else
    {
        cout << "몬스터가 반격했습니다." << endl;
    }
    */

#pragma endregion

    // 🪐 4️⃣ if 조건 반전 패턴
    if (!isDead)
    {
        cout << "몬스터가 반격 준비를 합니다." << endl;
    }
    // 또는 명확한 가독성을 위해
    if (isDead == false)
    {
        cout << "몬스터가 다시 일어났습니다." << endl;
    }

    // 🎮 5️⃣ 가위바위보 예제
    const int ROCK = 0;
    const int PAPER = 1;
    const int SCISSORS = 2;

    int input = 40;   // 잘못된 값 입력 상황 가정

    if (input == ROCK)
        cout << "바위를 냈습니다." << endl;
    else if (input == PAPER)
        cout << "보를 냈습니다." << endl;
    else if (input == SCISSORS)
        cout << "가위를 냈습니다." << endl;
    else
        cout << "뭘 낸겁니까?" << endl;

    // 🪐 6️⃣ switch-case 예제 (가위바위보 처리)
#pragma region switch-case문
    switch (input)
    {
        case ROCK:
            cout << "바위를 냈습니다." << endl;
            break;
        case PAPER:
            cout << "보를 냈습니다." << endl;
            break;
        case SCISSORS:
            cout << "가위를 냈습니다." << endl;
            break;
        default:
            cout << "뭘 낸겁니까?" << endl;
            break;
    }
#pragma endregion

    return 0;
}

📚 분기문 핵심 정리 (강의 요약)

🌱 분기문이란?

  • 프로그램 흐름을 조건에 따라 나누는 것
  • 대표적 분기문: if, if-else, if-else if-else, switch-case

🌱 if 문

기본 구조

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

여러 조건 체크

if (조건1)
{
    // 조건1이 참일 때 실행
}
else if (조건2)
{
    // 조건2가 참일 때 실행
}
else
{
    // 모든 조건이 거짓일 때 실행
}

🌱 switch-case 문

기본 구조

switch (변수)
{
    case1:
        // 값1일 때 실행할 코드
        break;
    case2:
        // 값2일 때 실행할 코드
        break;
    default:
        // 위의 값들에 해당하지 않을 때 실행할 코드
        break;
}

주의점

  • switch의 조건문에는 정수 계열만 사용 가능
  • break 없으면 아래 case로 계속 실행됨 (fall-through)

🪛 디스어셈블리 분석 (어셈과 연결)

C++ 코드어셈블리 대응
if (isDead)test eax, eax + je
else ifcmp + je 연속 처리
switchcmp + je로 case 검사
hp -= damagesub 명령어로 연산
bool isDead = (hp <= 0)cmp + jle로 판단

🚀 디스어셈블리 예시

cmp dword ptr [hp], 0    ; hp와 0 비교
jle 죽음처리구역
...
cmp dword ptr [input], 0
je 바위처리
cmp dword ptr [input], 1
je 보처리
cmp dword ptr [input], 2
je 가위처리
jmp 기본처리

📢 팁과 주의점

항목설명
조건문 깊이너무 깊은 중첩은 피하자 (3단계 이상 X)
switch-case정수형만 가능 (문자, 열거형 포함)
break 누락누락 시 다음 case로 넘어가는 fall-through 발생
조건 순서자주 나오는 조건을 먼저 배치 (성능 최적화)
디버깅 팁조건문 걸고 F10 단위로 실행하며 흐름 확인

💡 마무리 요약

분기문 종류특징
if기본적인 조건 분기
if-else참일 때와 거짓일 때 각각 처리
if-else if다중 조건 처리
switch-case정수형 조건 분기 최적화

📂 정리

개념정리
if문가장 기본적인 조건문
if-else참/거짓 각각 처리
if-else if-else다중 조건 처리
switch-case다수의 값 비교에 유리
디스어셈블리cmp, test, je, jne, jmp 등과 1:1 대응

📦 완전 정리 패키지 제공

이 코드와 주석은 "분기문"을 완벽히 마스터할 수 있는 패키지입니다.
👉 실습 코드 + 주석 설명 + 어셈블리 해석까지 ALL-IN-ONE!


필요하시면 이 내용을 PDF로 정리해 드리거나, 퀴즈와 연습 문제도 만들어 드릴 수 있습니다.
다음으로 어떤 내용이 필요하신가요? 😊

profile
李家네_공부방

0개의 댓글