if-init์ ๋ชจ๋ ๊ฒ(if๋ฌธ ๋ด์์ ๋ณ์ ์ ์ธ, ์ด๊ธฐํ)
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 ์ดํ์ ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ณ ๋ช ํํ๊ฒ ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ ์ ์ฉํ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํ์ฉํ๋ฉด, ์กฐ๊ฑด๋ถ ๋ก์ง์์ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์์ต๋๋ค.