[C++] IIFE ํŠธ๋ฆญ

IIFE๋Š” ๋ฐ”๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹(Immediately-invoked function expression)์˜ ์•ฝ์ž๋กœ, ๋ณต์žกํ•œ ์ดˆ๊ธฐํ™”๋ฅผ ์ •๋ˆํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๋ชจ๋“  ์ดˆ๊ธฐํ™” ์ž‘์—…์ด ๋”ฑ ์ƒ์„ฑ์ž๋‚˜ ๋‹จ์ˆœ ๋Œ€์ž…๋งŒ์œผ๋กœ ๋๋‚˜๋ฉด ์ฐธ ์ข‹๊ฒ ์ง€๋งŒ.
์•„์‰ฝ๊ฒŒ๋„ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ํŠน์ • ๊ฐ’์„ ๋Œ€์ž… ํ›„์— ์ถ”๊ฐ€์ ์ธ ์กฐ๊ฑด์‹์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜... ๋ฃจํ”„๋ฅผ ๋Œ๊ฑฐ๋‚˜... ๋กœ์ง์ƒ์œผ๋กœ ๊ทธ๋ ‡๊ฒŒ ๋  ์ˆ˜๋ฐ–์— ์—†๋Š” ๊ฒฝ์šฐ๋“ค.

ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก
int foo = 1;

if(?)
**ย ย ย  foo+=?**
else
**ย ย ย  foo*=?**
//์ดํ›„๋กœ foo๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ
ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก
์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์–ด๋–จ๊นŒ. ์˜๋ฏธ์ƒ์œผ๋กœ๋Š” ์ƒ์ˆ˜์ง€๋งŒ, ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ์ž‘์—…ํ• ๊ฒŒ ์žˆ์–ด const๋ฅผ ๋ถ™์ด์ง€ ๋ชปํ–ˆ๋‹ค.

๊ทธ๋Ÿผ ๋ญ˜ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ• ๊นŒ?
๊ทธ๊ฒƒ๋„ ๋‚˜์˜์ง€ ์•Š์€ ๋ฐฉ๋ฒ•์ด๊ธด ํ•  ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. C++11์˜ ๋žŒ๋‹ค๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด๋‹ค.
๋žŒ๋‹ค๋ฅผ ์‘์šฉํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.
ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก
const int foo = []{
**ย ย ย  int sum = 1;**

**ย ย ย  if(?)
****ย ย ย ย ย ย ย  foo+=?
**
****ย ย ย  else****
****ย ย ย ย ย ย ย  foo*=?****

****ย ย ย  return;****
}();
ใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…กใ…ก

๋žŒ๋‹ค๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฐ”๋กœ ํ˜ธ์ถœ, ๋ณ€์ˆ˜์— ๋ฐ”์ธ๋”ฉํ•œ๋‹ค.
์ด๋Ÿฌ๋ฉด ๋ณ€์ˆ˜์˜ ์ƒ์ˆ˜์„ฑ๋„ ๋ณด์กดํ•  ์ˆ˜ ์žˆ๊ณ ,
์ดˆ๊ธฐํ™” ์ž‘์—…๋“ค์„ ์ € ๋žŒ๋‹ค ์•ˆ์— ๊ฐ€๋‘ฌ์„œ ๋ถ„๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.


์ฐธ์กฐ
https://www.bfilipek.com/2016/11/iife-for-complex-initialization.html?m=1