๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/C++ ์‘์šฉ

if-init์˜ ๋ชจ๋“  ๊ฒƒ(if๋ฌธ ๋‚ด์—์„œ ๋ณ€์ˆ˜ ์„ ์–ธ, ์ดˆ๊ธฐํ™”)

by ์„œ์•„๋ž‘๐Ÿ˜ 2024. 8. 26.

 

 

 

if-init ๋ฌธ๋ฒ•

C++17์—์„œ ๋„์ž…๋œ if-init ๋ฌธ๋ฒ•์€ if ์กฐ๊ฑด๋ฌธ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„(์œ ํšจ ๋ฒ”์œ„)๋ฅผ if ๋ฌธ ๋‚ด๋ถ€๋กœ ์ œํ•œํ•˜์—ฌ ๋” ์•ˆ์ „ํ•˜๊ณ  ๋ช…ํ™•ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ๊ธฐ๋ณธ ๊ฐœ๋…

๊ธฐ์กด์˜ if ์กฐ๊ฑด๋ฌธ์—์„œ๋Š” ์กฐ๊ฑด๋ฌธ ์™ธ๋ถ€์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•œ ํ›„, ์ด ๋ณ€์ˆ˜๋ฅผ if ์กฐ๊ฑด์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ C++17๋ถ€ํ„ฐ๋Š” if ๋ฌธ ์•ˆ์—์„œ ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๋ฅผ ํ•จ๊ป˜ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ์กด ๋ฐฉ์‹ (C++17 ์ด์ „):
    int x = getValue();
    if (x > 0) {
        std::cout << "x is positive: " << x << std::endl;
    }
  • if-init ์‚ฌ์šฉ ๋ฐฉ์‹ (C++17):
    if (int x = getValue(); x > 0) {
        std::cout << "x is positive: " << x << std::endl;
    }


2. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

if-init์˜ ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

if (init-statement; condition) {
    // if block
} else {
    // else block
}
  • init-statement: if ๋ฌธ ๋‚ด์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • condition: ์ดˆ๊ธฐํ™”๋œ ๋ณ€์ˆ˜๋‚˜ ๋‹ค๋ฅธ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‰๊ฐ€๋˜๋Š” ์กฐ๊ฑด์‹์ž…๋‹ˆ๋‹ค.

3. ์˜ˆ์ œ ์ฝ”๋“œ

๋‹ค์–‘ํ•œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด if-init ๋ฌธ๋ฒ•์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ 1: ๊ธฐ๋ณธ ์‚ฌ์šฉ ์˜ˆ

#include <iostream>

int getValue() {
    return 10;
}

int main() {
    if (int x = getValue(); x > 5) {
        std::cout << "x is greater than 5: " << x << std::endl;
    } else {
        std::cout << "x is 5 or less." << std::endl;
    }

    return 0;
}

์ถœ๋ ฅ:

x is greater than 5: 10

์„ค๋ช…:

  • getValue() ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฐ’์„ x์— ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐ๊ฑด์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • x๋Š” if ๋ฌธ ๋‚ด๋ถ€์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ 2: else if์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ

#include <iostream>

int getValue() {
    return 3;
}

int main() {
    if (int x = getValue(); x > 5) {
        std::cout << "x is greater than 5: " << x << std::endl;
    } else if (x == 3) {
        std::cout << "x is exactly 3: " << x << std::endl;
    } else {
        std::cout << "x is less than or equal to 5 but not 3: " << x << std::endl;
    }

    return 0;
}

์ถœ๋ ฅ:

x is exactly 3: 3

์„ค๋ช…:

  • x๊ฐ€ else if์™€ else ๋ธ”๋ก์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” if-init์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๊ฐ€ ํ•ด๋‹น ๋ธ”๋ก์—์„œ ๊ณ„์†ํ•ด์„œ ์œ ํšจํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์˜ˆ์ œ 3: ๋ณตํ•ฉ ์กฐ๊ฑด ์‚ฌ์šฉ

#include <iostream>

int main() {
    if (int x = 10, y = 20; x < y) {
        std::cout << "x is less than y: " << x << " < " << y << std::endl;
    } else {
        std::cout << "x is not less than y." << std::endl;
    }

    return 0;
}

์ถœ๋ ฅ:

x is less than y: 10 < 20

์„ค๋ช…:

  • x์™€ y๋ฅผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์ด๋ฅผ ์กฐ๊ฑด์‹์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณตํ•ฉ ์กฐ๊ฑด์‹์„ ํ†ตํ•ด ๋‹ค์ˆ˜์˜ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์ด๋ฅผ ์กฐ๊ฑด๋ฌธ์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ์žฅ์  ๋ฐ ์ฃผ์˜์‚ฌํ•ญ

์žฅ์ :

  • ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ: ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๊ฐ€ if ๋ฌธ๊ณผ ํ•จ๊ป˜ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
  • ์Šค์ฝ”ํ”„ ์ œํ•œ: ๋ณ€์ˆ˜๊ฐ€ if ๋ฌธ ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•˜๊ฒŒ ๋˜์–ด, ์˜๋„์น˜ ์•Š์€ ์™ธ๋ถ€ ์ ‘๊ทผ์ด๋‚˜ ์‚ฌ์šฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ๊ฐ„๊ฒฐํ™”: ์ดˆ๊ธฐํ™”์™€ ์กฐ๊ฑด ๊ฒ€์‚ฌ๋ฅผ ํ•œ ์ค„๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง‘๋‹ˆ๋‹ค.

์ฃผ์˜์‚ฌํ•ญ:

  • ์Šค์ฝ”ํ”„ ์ฃผ์˜: if ๋ฌธ ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” if-else ๋ธ”๋ก ์™ธ๋ถ€์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์ ์„ ์—ผ๋‘์— ๋‘๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณต์žกํ•œ ์ดˆ๊ธฐํ™”: ๋„ˆ๋ฌด ๋ณต์žกํ•œ ์ดˆ๊ธฐํ™”๋‚˜ ์—ฌ๋Ÿฌ ๋ณ€์ˆ˜๋ฅผ ๋™์‹œ์— ์„ ์–ธํ•  ๊ฒฝ์šฐ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ์ˆ˜์ค€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

if-init ๋ฌธ๋ฒ•์€ C++17 ์ดํ›„์— ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ์กฐ๊ฑด๋ถ€ ๋กœ์ง์—์„œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€