[C++] C++20: ๋ชจ๋“ˆ

๋ชจ๋“ˆ์€ ๊ธฐ์กด C/C++์˜ ์›์‹œ์ ์ด๊ณ  ๋ถˆํŽธํ•œ ๋ชจ๋“ˆ ๊ด€๋ฆฌ๋ฒ•์—์„œ ๋ฒ—์–ด๋‚˜๊ณ ์ž ํ•˜๋Š” ๋ฐœ๋ฒ„๋‘ฅ ์ค‘ ํ•˜๋‚˜๋‹ค.

ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์€ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์˜ MSVC๋‹ค.
์›ฌ๋งŒํ•ด์„œ๋Š” C++20 ์‹ ํƒ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ณ„๋„ ์˜ต์…˜์„ ์ค˜์•ผ ํ•  ๊ฒƒ์ด๋‹ค.
๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์˜ ๊ฒฝ์šฐ์—๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฒ„์ „ ์ฒดํฌ๋ฅผ ํ•ด์ค˜์•ผ ๊ธฐ๋Šฅ์ด ํ™œ์„ฑํ™”๋œ๋‹ค.




๋ชจ๋“ˆ์˜ ์žฅ์ 

๊ธฐ์กด์˜ #include ๋“ฑ์„ ์‚ฌ์šฉํ•œ ๋งคํฌ๋กœ ์ฒ˜๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌด์‹ํ•œ ๋ณต๋ถ™์— ์ง€๋‚˜์ง€ ์•Š๋Š”๋‹ค.
๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์ฐธ ๋งŽ์•˜๋Š”๋ฐ, ๋ชจ๋“ˆ์€ ์ด๋Ÿฌํ•œ ๋‹จ์ ๋“ค์„ ๋Œ€๋ถ€๋ถ„ ํ•ด์†Œํ–ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์šฐ์„  ๋ชจ๋“ˆ ์ฝ”๋“œ ๋‚ด์— ์žˆ๋Š” ์š”์†Œ๋“ค์€ ๋ช…์‹œ์ ์œผ๋กœ "๋‚ด๋ณด๋‚ด๊ธฐ(export)"๊ฐ€ ์ง€์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ๋งคํฌ๋กœ๋‚˜ ์ „์—ญ ํ•จ์ˆ˜, ๋ณ€์ˆ˜ ๋“ฑ์ด ์ฝ”๋“œ๋ฅผ ๋งˆ๊ตฌ์žก์ด๋กœ ์นจ๋ฒ”ํ•˜๋Š” ์ผ์€ ์›์ฒœ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ ๋ชจ๋“ˆ์€ ๋ชจ๋“ˆ๋งŒ์˜ ๋‹จ์œ„๋กœ ์ปดํŒŒ์ผ๋œ ์ฑ„๋กœ ๊ด€๋ฆฌ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•œ๋ฒˆ ์ปดํŒŒ์ผ๋œ ๋ชจ๋“ˆ์„ ๋˜ ๊ตณ์ด ์žฌ์ปดํŒŒ์ผํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ปดํŒŒ์ผ ์‹œ๊ฐ„์„ ํš๊ธฐ์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.




์‚ฌ์šฉ๋ฒ•?

๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์€ ์ด๋ ‡๋‹ค.

์›๋ž˜ ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋˜ ๊ฒƒ์„

์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๋‹ค๋งŒ ์ด ์ฝ”๋“œ๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด ์žˆ๋Š”๋ฐ,
์•„์ง std ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ๋ชจ๋“ˆ ์žฌ๊ตฌํ˜„์ด ์•„์ง ๋œ ๋˜์—ˆ๋Š”์ง€, import๋กœ ์‚ฌ์šฉ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค...

ํ‘œ์ค€์ด ๊ณตํ‘œ๋œ์ง€ 2๋…„์ด ๋„˜์—ˆ๋Š”๋ฐ, ์žฅ๋‚œํ•˜๋Š”๊ฑด๊ฐ€?

๋‹ค์‹œ ๋ชจ๋“ˆ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ตฌ์กฐ๋ฅผ ์ตํ˜€๋ณด์ž




๋ชจ๋“ˆ ๋งŒ๋“ค๊ธฐ

๋ชจ๋“ˆ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž.

Visual Studio์˜ ๊ฒฝ์šฐ์—๋Š”, ๋ชจ๋“ˆ์˜ ํŒŒ์ผ ํ™•์žฅ๋ช…์ด .ixx๋‹ค.
๋‹ค๋ฅธ ์ปดํŒŒ์ผ๋Ÿฌ๋“ค์€ ์–ด๋–ค์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฐ์‹์œผ๋กœ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋งจ ์œ—์ค„์—๋Š” export module๋กœ ์ง€๊ธˆ ๋ชจ๋“ˆ์˜ ์ด๋ฆ„์„ ์ง€์–ด์ค€๋‹ค.
์™ธ๋ถ€์—์„œ importํ• ๋•Œ๋Š” ์†Œ์ŠคํŒŒ์ผ ์ด๋ฆ„์ด ์•„๋‹ˆ๋ผ ์ € ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‚ด๋ณด๋‚ผ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด์„œ๋งŒ export๋ฅผ ๋ถ™์—ฌ์ค€๋‹ค.
์—ฌ๊ธฐ์„  ํ•จ์ˆ˜์—๋งŒ export๋ฅผ ๋ถ™์˜€์ง€๋งŒ, ์ „์—ญ๋ณ€์ˆ˜, ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋“ฑ์—๋„ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.




๋ชจ๋“ˆ ์‚ฌ์šฉํ•˜๊ธฐ

๊ทธ๋Ÿผ ์ด์ œ import๋ฅผ ํ•˜๋ฉด ๋ฐ”๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์–ด๋ ค์šธ๊ฒŒ ์žˆ์ง„ ์•Š๋‹ค.

ํ•˜์ง€๋งŒ export๋ฅผ ํ•˜์ง€ ์•Š์€ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด์„œ๋Š” ๊ฐ€์ ธ์˜ฌ ์ˆ˜๊ฐ€ ์—†๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทผ๋ฐ VS ์ธํ…”๋ฆฌ์„ผ์Šค ๊ธฐ๋Šฅ์ด ์ข€ ์ด์ƒํ•˜๋‹ค. ๋นจ๊ฐ„์ค„์„ ์ณ์•ผํ•˜๋Š”๋ฐ, ์ž๋™์™„์„ฑ์œผ๋กœ ๊ฐ€์ ธ์™€์ฃผ๋”๋ผ...




์ฃผ์˜์ 

๋ณ„๋„์˜ ์†Œ์ŠคํŒŒ์ผ์—์„œ๋Š” ๊ฐ™์€ ๋ชจ๋“ˆ๋ช…์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

์ •์ž‘ ์‹คํ–‰ํ• ๋•Œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š์•„์„œ ๊ธˆ๋ฐฉ์€ ๋ชจ๋ฅผ ์ˆ˜๋„ ์žˆ๋Š”๋ฐ... ํ•˜๋‚˜์˜ ์†Œ์ŠคํŒŒ์ผ๋งŒ ์œ ํšจํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฎ์–ด์”Œ์›Œ์ง„๋‹ค.
ํ•˜๋‚˜๋งŒ ๊ผฝํžˆ๋Š” ๊ธฐ์ค€์ด ๋ญ”์ง€๋„ ๋ชจ๋ฅด๊ฒ ๊ณ , ์ด๊ฑธ ์™œ ์˜ค๋ฅ˜๊ฐ€ ์•ˆ๋œจ๊ณ  ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ฒŒ ํ•œ๊ฑด์ง€๋„ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.

์ด๋”ฐ์œ„๋กœ ๋™์ž‘ํ• ๊ฑฐ๋ฉด ๊ทธ๋ƒฅ ์ค‘๋ณต๋œ ๋ชจ๋“ˆ๋ช…์— ๋Œ€ํ•ด์„œ ์‹ ํƒ์Šค ์˜ค๋ฅ˜๋ฅผ ๋„์›Œ์•ผ ํ•˜์ง€ ์•Š๋‚˜?

๋ชจ๋“ˆ์‹œ์Šคํ…œ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด์„œ ์ œ๋Œ€๋กœ ๋งŒ๋“œ๋‚˜ ์‹ถ์—ˆ๋”๋‹ˆ, ๊ฒฐ๊ตญ ๊ตฌํ˜„๋„ C++์Šค๋Ÿฝ๊ฒŒ ๋‚˜์™”๋‹ค.




๋ชจ๋“ˆ ์ค‘์ฒฉ

์ฝ”๋“œ๋ฅผ ์งœ๋‹ค๋ณด๋ฉด ๋‹น์—ฐํžˆ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์„œ๋ธŒ๋ชจ๋“ˆ์„ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ ํฐ ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค ๊ฒฝ์šฐ๊ฐ€ ๋งค์šฐ ์žฆ๋‹ค.
๊ทธ๋Ÿด ๊ฒฝ์šฐ์—๋Š” ์ด๋Ÿฐ์‹์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ๊ฐ์˜ ์„œ๋ธŒ๋ชจ๋“ˆ์„

๋งŒ๋“  ๋‹ค์Œ

๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ๊ทธ๊ฑธ ๋˜ importํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” importํ•œ๊ฑธ ๋˜ ๋ฐ–์œผ๋กœ ๋‚ด๋ณด๋‚ด์•ผํ•ด์„œ export import๋ฅผ ๋ถ™์˜€๋‹ค.

๊ทธ๋Ÿผ ์ž˜ ๋Œ์•„๊ฐˆ ๊ฒƒ์ด๋‹ค.

๋นจ๊ฐ„์ค„์ด ๋œจ๋Š”๊ฑด ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๊ฐ€ ๋ฉ์ฒญํ•ด์„œ ๊ทธ๋ ‡๋‹ค.

์—ฌ๊ธฐ์„œ ์กฐ๊ธˆ ๋” ๋‚˜์•„๊ฐ€์„œ, ํŒŒํ‹ฐ์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฆ„์„ ์ข€๋” ์„ธ๋ จ๋˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ณธ ๋ชจ๋“ˆ์— ์ฝœ๋ก (:)์œผ๋กœ ์„œ๋ธŒ๋ชจ๋“ˆ๋ช…์„ ๋ถ™์ด๊ณ , ๋ณธ ๋ชจ๋“ˆ์—์„  ์„œ๋ธŒ๋ชจ๋“ˆ๋ช…์œผ๋กœ๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

์„œ๋ธŒ๋ชจ๋“ˆ๋กœ ์ธํ•œ ์ด๋ฆ„ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹๋‹ค.

๊ทธ๋ ‡๋‹ค.



์ฐธ์กฐ
https://en.cppreference.com/w/cpp/language/modules
https://docs.microsoft.com/ko-kr/cpp/cpp/modules-cpp?view=msvc-170