[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