์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
Microsoft Foundation Classes

MSDN์˜ MFC ํŽ˜์ด์ง€

1. ๊ฐœ์š”2. ์‚ฌ์šฉ ๋ชฉ์ 3. ๋‹จ์ 4. ๋Œ€์•ˆ

1. ๊ฐœ์š”[ํŽธ์ง‘]

Microsoft Windows ์šด์˜์ฒด์ œ ํ™˜๊ฒฝ์—์„œ ์ž‘๋™ํ•˜๋Š” GUI ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ C++ ์–ธ์–ด ๊ธฐ๋ฐ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, 1992๋…„ ๋ฐœํ‘œ๋˜์—ˆ๋‹ค.

Windows API์˜ C์–ธ์–ด ํ•จ์ˆ˜๋“ค์„ Wrapping ํ•˜์—ฌ C++ ์–ธ์–ด์˜ ํด๋ž˜์Šคํ™” ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์œˆ๋„์šฐ ํ™˜๊ฒฝ์—์„œ COM(Component Object Model) ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ATL(Active Template Library)๊ณผ CString ๋“ฑ์˜ ๊ธฐ๋ฐ˜ ํด๋ž˜์Šค๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋“ฑ ๋งค์šฐ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ๋‹ค.

๋ณ„๋„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด ์œˆ๋„์šฐ์ฆˆ์šฉ GUI ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋ ค๋ฉด ์šด์˜์ฒด์ œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” C์–ธ์–ด ๊ธฐ๋ฐ˜์˜ Windows API๋ฅผ ์จ์•ผ ํ•˜๋Š”๋ฐ, ๋‹จ์ˆœํžˆ ์šด์˜์ฒด์ œ์˜ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์„ ๋…ธ์ถœ์‹œ์ผœ์ฃผ๋Š” C ํ•จ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์ผ ๋ฟ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•œ UI๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋“ฑ์˜ ๊ณ ์ฐจ์›์ ์ธ ์ž‘์—…์„ ํ• ๋•Œ์—๋Š” ํ•„์—ฐ์ ์œผ๋กœ ์ฝ”๋“œ ๋…ธ๊ฐ€๋‹ค๊ฐ€ ์ˆ˜๋ฐ˜๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ตœ์‹ ์˜ ์œˆ๋„ ์ปจํŠธ๋กค๊ณผ ๊ฐ™์€ ๊ณ ์ฐจ์›์ ์ธ ๊ธฐ๋Šฅ๋“ค์€ Windows API๊ฐ€ ์•„๋‹Œ COM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋งŒ ์“ธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Windows API๋งŒ์œผ๋กœ๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๊ฑธ ๊ทธ๋‚˜๋งˆ ์ข€ ํŽธํ•˜๊ฒŒ ํด๋ž˜์Šค ํ˜•ํƒœ๋กœ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š”๊ฒƒ์ด ๋ฐ”๋กœ MFC์ด๋‹ค.

๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์˜ ์œ ๋ฃŒ ๋ฒ„์ „๊ณผ Community(๊ฐœ์ธ์‚ฌ์šฉ์ž์šฉ)์—๋Š” ๊ธฐ๋ณธ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ๋ฌด๋ฃŒ์ธ 'Express' ๋ฒ„์ „์—๋Š” MFC์™€ ATL์ด ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.

2. ์‚ฌ์šฉ ๋ชฉ์ [ํŽธ์ง‘]

Microsoft Windows์šฉ GUI ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. C์–ธ์–ด๊ธฐ๋ฐ˜์˜ Windows API๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์œผ๋‚˜, C++์–ธ์–ด ๊ธฐ๋ฐ˜์˜ MFC๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ณด๋‹ค ๊ตฌ์กฐ์ ์ด๊ณ  ๊ฐ„ํŽธํ•˜๋ฉฐ ๋Œ€๊ทœ๋ชจ์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ด ์šฉ์ดํ•˜๋‹ค.

90๋…„ ์ดˆ๋ฐ˜๋ถ€ํ„ฐ 2000๋…„ ์ค‘๋ฐ˜ ์‚ฌ์ด์˜ ์œˆ๋„์šฐ์ฆˆ์šฉ GUI ์‘์šฉํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค[1]. ํ˜„์žฌ๋Š” ๊ณผ๊ฑฐ ๊ฐœ๋ฐœ๋œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ฃผ๋œ ์šฉ๋„์ด๋‹ค. ์›น๊ณผ ๋ชจ๋ฐ”์ผํ™˜๊ฒฝ์ด ๋Œ€๋‘๋˜์—ˆ์„ ๋ฟ๋งŒ์•„๋‹ˆ๋ผ, ๋ฐ์Šคํฌํ†ฑ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๋„ .NET Framework๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” WinForms, WPF ๋“ฑ๊ณผ ์›น์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” Electron ๋“ฑ์ด ๋“ฑ์žฅํ•˜๋ฉด์„œ ๋”์ด์ƒ ์‹ ๊ทœ๊ฐœ๋ฐœ์—์„œ MFC๋Š” ํƒ€๋‹นํ•œ ์„ ํƒ์ง€๊ฐ€ ์•„๋‹ˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

MS์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ค‘ Microsoft Office๋‚˜ ์œˆ๋„ ์šด์˜์ฒด์ œ ์ž์ฒด ๋“ฑ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณต๋˜๋Š” ์ œํ’ˆ์€ MFC๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. MFC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ๋œ ๊ฒƒ ์ค‘ ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ๊ฒƒ์€ Visual Studio 6.0์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” Visual C++ 6.0 IDE์ผ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ .NET Framework๊ฐ€ ๋ฐœํ‘œ๋˜๋ฉด์„œ ํ˜„์žฌ์˜ Visual Studio๋Š” ๋‹ท๋„ท์˜ WPF๋กœ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ๋‹ค.

์‚ฌ์‹ค MFC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ์ค„๊ณง Visual Studio์— ํฌํ•จ๋˜์–ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๋Š” ๋ง์ด ์žˆ๋‹ค. ๋” ์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์กด์žฌํ•˜์ง€๋งŒ(ํ˜น์€ ์กด์žฌ๋ฅผ ์ž˜ ๋ชฐ๋ผ์„œ) ๊ตณ์ด ์ฐพ์ง€ ์•Š๊ณ  ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ. ๊ทผ๊ฑฐ ์—†๋Š” ๋ง์ด ์•„๋‹Œ ๊ฒƒ์ด, ํƒ€์ธ์—๊ฒŒ ์ž‘์—…๋ฌผ์„ ์ „๋‹ฌํ•œ๋‹ค๊ฑฐ๋‚˜, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ GUI ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•จ๊ป˜ ์™ธ๋ถ€ ๊ณต๊ฐœํ•œ๋‹ค๊ฑฐ๋‚˜ ํ•  ๋•Œ์—๋Š” MFC์˜ ๊ฒฝ์šฐ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค ๋ฒ„์ „๋งŒ ๋งž์ถฐ์ฃผ๋ฉด ๋ณดํ†ต ๋ณ„ ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ, ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์—์„œ ๊ธฐ๋ณธ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์™ธ๋ถ€ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์„ค์น˜์™€ ์„ค์ •๋ฐฉ๋ฒ•๋„ ํ•จ๊ป˜ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด๊ฒƒ์ด ๊ท€์ฐฎ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

3. ๋‹จ์ [ํŽธ์ง‘]

  • ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค 2019 ๋ฒ„์ „์—์„œ๋„ ์—ฌ์ „ํžˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‚˜, ๋ฉ”์ด์ € ๋ฒ„์ „์€ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค 2015 ์‹œ์ ˆ์˜ MFC 14์—์„œ ๋ฉˆ์ถฐ์žˆ๊ณ  ๋งˆ์ด๋„ˆ ์—…๋ฐ์ดํŠธ๋งŒ ์ œ๊ณต๋˜๋Š” ์ƒํ™ฉ์ด๋‹ค. 2015๋…„ ์ดํ›„ MFC๋ฅผ ์ƒˆ๋กœ ๊ณต๋ถ€ํ•˜๋Š”๊ฒƒ์€ ์‹œ๊ฐ„๋‚ญ๋น„์ด๋‹ค.
  • ์ˆœ์ˆ˜ํ•˜๊ฒŒ C์–ธ์–ด๋กœ Win32 API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•œ ํ”„๋กœ๊ทธ๋žจ์— ๋น„ํ•˜๋ฉด ๋ฌด๊ฒ๋‹ค. ๋ฌผ๋ก  Qt๋‚˜ GTK+์™€ ๋น„๊ตํ•œ๋‹ค๋ฉด์•ผ...
  • ATL๊ณผ ๊ณต์œ ๋˜๋Š” CString, CList ๋“ฑ์˜ ํด๋ž˜์Šค๋Š” ๋งค์šฐ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, GUI๋ฅผ ์œ„ํ•˜์—ฌ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ์€ Windows API์˜ ๋งค์šฐ ์–‡์€ Wrapper ์ •๋„์ด๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ MFC๋กœ ๊ฐœ๋ฐœํ•œ๋‹ค๊ณ  ํ•ด์„œ Windows API๋ฅผ ์“ฐ์ง€ ์•Š์„ ์ˆ˜๋„ ์—†๋‹ค.
  • Visual C++ 2008 Feature Pack์—์„œ ์ถ”๊ฐ€๋œ ๋ฆฌ๋ณธ ์ธํ„ฐํŽ˜์ด์Šค๋Š” Microsoft Office์™€ ๋น„๊ตํ•ด ๋ณด๋ฉด ๋งค์šฐ ์—‰์„ฑํ•˜๊ณ  ์กฐ์žกํ•œ ํ‹ฐ๊ฐ€ ๋‚œ๋‹ค. ์ด๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๋“ค์ด MS์—์„œ ์ œ์ž‘๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํƒ€์‚ฌ(http://www.bcgsoft.com/)์—์„œ ์ œ์ž‘ํ•œ๊ฒƒ์„ MS๊ฐ€ ๊ตฌ์ž…ํ•˜์—ฌ ํฌํ•จ์‹œ์ผฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • GUI ๋””์ž์ธ ๊ธฐ๋Šฅ์ด ๋งค์šฐ ๋ถ€์‹คํ•˜๋‹ค. ์ง์ ‘ UI๋ฅผ ๊ทธ๋ ค์„œ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์€ "์œˆ๋„ ๋ฆฌ์†Œ์Šค"๋ผ๋Š” ๋งค์šฐ ํŠน์ดํ•œ ํ˜•์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๋‹ค์ด์–ผ๋กœ๊ทธ(๋Œ€ํ™”์ƒ์ž)๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ผ๋ฐ˜์ ์ธ ํ™”๋ฉด์€ ์ง์ ‘ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. VB6.0์ด๋‚˜ ๋‹ท๋„ท์˜ WinForm/WPF, Qt์˜ QtDesigner ๋“ฑ๊ณผ ๋น„๊ตํ•˜๋ฉด ์ด๋ญ๋ณ‘ ์†Œ๋ฆฌ๊ฐ€ ์ ˆ๋กœ ๋‚˜์˜จ๋‹ค.
  • ๋‹ท๋„ท ์ถœ์‹œ ์ดํ›„๋กœ MS๋กœ๋ถ€ํ„ฐ ๋ฒ„๋ ค์กŒ๋‹ค๋Š” ์†Œ๋ฌธ์ด ์žˆ๋‹ค. ์‹ค์ œ๋กœ VS2008 ์ดํ›„๋ถ€ํ„ฐ MFC์— ํฐ ๋ณ€ํ™”๊ฐ€ ์—†์–ด์กŒ๊ณ , VS2012๊นŒ์ง€๋Š” MFC๊ฐ€ ํƒ‘์žฌ๋˜์–ด ๋ฆด๋ฆฌ์Šค ๋˜์—ˆ์ง€๋งŒ VS2015๋ถ€ํ„ฐ๋Š” ๋”ฐ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์ง€๋‚œ ๋ช‡๋…„ ์ƒˆ MFC์— ์†ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ˆ˜๊ฐ€ ๊ต‰์žฅํžˆ ๋ฐฉ๋Œ€ํ•ด์ ธ์„œ ํ˜„์žฌ๋Š” MS์—์„œ MFC๋ฅผ ์œ ์ง€/๊ฐœ๋ณด์ˆ˜ํ•˜๋Š” AFX ํŒ€์—์„œ๋„ ํฌ๊ธฐํ–ˆ๋‹ค๊ณ  ํ•  ์ •๋„๋กœ ์—ฌ๋Ÿฌ ๋ฉด์—์„œ ๊ผฌ์˜€๋‹ค๊ณ  ํ•œ๋‹ค. MFC ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์ž‘์„ฑ๋˜๋Š” ์„ค์ •๋“ค์ด ์ œ๋Œ€๋กœ ์„ค์ •๋˜์ง€ ์•Š๋Š”๋‹ค๋˜์ง€, ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ ์ฝ”๋“œ์ฐฝ์—์„œ ์ €์žฅ์„ ํ•˜๋ฉด ๋ฆฌ์†Œ์Šค ํ—ค๋”ํŒŒ์ผ์˜ ์ธ์ฝ”๋”ฉ์ด ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค๋˜์ง€... ๊ฐ์ข… ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋ฌดํ•˜๋Š” ์ค‘. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋กœ MS/AFX ํŒ€์ด ์‹ ๋ž„ํ•˜๊ฒŒ ๊นŒ์ด์ง€๋งŒ ๊ทธ๋“ค๋„ ์ธ๊ฐ„์ธ์ง€๋ผ ์–ด์ฉ” ์ˆ˜ ์—†๋Š” ๋ถ€๋ถ„[2]์ด๋‹ค.

C++ ์–ธ์–ด์™€ ์œˆ๋„์šฐ ์šด์˜์ฒด์ œ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ชป ์จ๋จน์„ ์ •๋„์˜ ๋ฌผ๊ฑด์€ ์•„๋‹ˆ๋‹ค. MFC๋Š” C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ, ์œˆ๋„์šฐ ์šด์˜์ฒด์ œ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์ด ๋‘˜์— ๋Œ€ํ•œ ์„ ํ–‰ ํ•™์Šต์ด ์ด๋ฃจ์–ด์ ธ์•ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ MFC์˜ ํด๋ž˜์Šค/ํ•จ์ˆ˜/๋ณ€์ˆ˜๋“ค์˜ ๋„ค์ด๋ฐ ์„ผ์Šค, Visual Studio๊ฐ€ ์ž๋™ ์ƒ์„ฑํ•ด์ฃผ๋Š” Template๋“ค์˜ ๊ตฌ์กฐ๋Š” ์ •๋ง ์ตœ์•…์ด๋‹ค. ๊ทธ๋Ÿฐ ์ฝ”๋“œ๋“ค์— ๋ฌผ๋“ค๋ฉด ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ๊ฐ€ ํƒ„์ƒํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  MFC๋Š” C++ ํ‘œ์ค€์—์„œ ๋ฒ—์–ด๋‚œ MS์˜ ๋น„ํ‘œ์ค€ ํ•จ์ˆ˜๋“ค์„ ๊ต‰์žฅํžˆ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋Ÿฐ ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์ฐจํ›„ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ์ง€๋„ ์—†์–ด์ง„๋‹ค.

4. ๋Œ€์•ˆ[ํŽธ์ง‘]

์œˆ๋„์šฐ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ Win32 API ๋˜๋Š” MFC๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  • C++๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ•๋ ฅํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ UI๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹ถ์€๊ฐ€?
    • ๊ทธ๋ ‡๋‹ค๋ฉด Qt ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์ž.
      • Qt๋Š” Windows, macOS, Linux๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๋Š” C++ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋‹จ์ˆœํ•œ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์ž์ฒด์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ, ํŒŒ์ผ ๋ฐ DB ์ฒ˜๋ฆฌ, XML ์ง€์›, ๊ฐ•๋ ฅํ•œ String ํด๋ž˜์Šค ๋“ฑ ๋ฐฉ๋Œ€ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
      • ์œˆ๋„์šฐ ์‹œ์Šคํ…œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.[3]
      • ํ•œ๋ฒˆ๋งŒ ์จ ๋ณด๋ฉด MFC์˜ ๋‹ค์ด์–ผ๋กœ๊ทธ ํŽธ์ง‘๊ธฐ๋Š” ์“ฐ๋ ˆ๊ธฐ๋กœ ๋ณด์ด๊ฒŒ ๋  GUI Designer๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์™€ ํ›Œ๋ฅญํžˆ ์—ฐ๋™๋œ๋‹ค. ํ™ˆํŽ˜์ด์ง€
      • ๋‹ท๋„ท์˜ WPF์™€ ๋น„์Šทํ•œ QtQuick์„ ์ œ๊ณตํ•œ๋‹ค. QML์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    • C++ Builder๋Š” ํ›Œ๋ฅญํ•œ GUI ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ฐ€์ง„ IDE์ด๋ฉฐ, C++๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์ผํ•œ ํŽธ์˜์„ฑ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ ์‚ฌ์šฉ๋ฅ ์ด ์ ์–ด ์ž๋ฃŒ๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ํž˜๋“ค๋‹ค. ๋˜ํ•œ, IDE๊ฐ€ ํ•œ๊ตญ์–ดํŒฉ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์˜์–ด์— ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฆฌ๋ˆ…์Šค์—์„œ ๋น›๋‚˜๋Š” ํฌ๋กœ์Šคํด๋žซํผ์„ ์ง€์›ํ•˜๋Š” GTK๊ฐ€์žˆ๋‹ค. C,C++,Python,C#๊ณผ์œ ์‚ฌํ•œVala๋“ฑ์„ ๋ชจ๋‘์ง€์›ํ•œ๋‹ค. wxWidgets๋„ ์žˆ๋‹ค.
  • ๋‹ค๋ฅธ ์–ธ์–ด๋Š” ์–ด๋–ค๊ฐ€? ๋ฐ˜๋“œ์‹œ C++๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด?
    • .NET Framework ํ”Œ๋žซํผ์—๋Š” Windows Forms์™€ WPF์˜ ๋‘ ๊ฐ€์ง€ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. Windows Forms๋Š” ์‰ฌ์šด ๋‚œ์ด๋„ ๋•๋ถ„์— ์ดˆ๋ณด์ž๊ฐ€ ์ ‘ํ•˜๊ธฐ์—๋„ ์šฉ์ดํ•˜๋‹ค. ๋˜ํ•œ C#์€ C++๊ณผ๋Š” ๋น„๊ต๋„ ๋˜์ง€ ์•Š๋Š” ๋†’์€ ์ƒ์‚ฐ์„ฑ์„ ์ž๋ž‘ํ•˜๋Š” ์–ธ์–ด์ด๋‹ค. ๊ธฐ์กด ์œˆ๋„์šฉ C/C++ ํ”„๋กœ์ ํŠธ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ์—ฐ๋™๋„ ์ˆ˜์›”ํ•˜๋ฏ€๋กœ ์ผ๋‹จ ํ•ต์‹ฌ ์ฝ”๋“œ๋Š” ๊ทธ๋Œ€๋กœ ๋‘” ์ฑ„ ๊ป๋ฐ๊ธฐ๋ถ€ํ„ฐ ์ฐจ์ฐจ ๊ต์ฒดํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋‹ท๋„ท ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ฐœ๋ฐœ๋œ ํ”„๋กœ๊ทธ๋žจ์˜ ๋Œ€ํ‘œ์ž‘์ด๋ผ๋ฉด ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค ์ค‘ 2008 ์ดํ›„์˜ ๋ฒ„์ „๋“ค(WPF๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค)์„ ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ปค๋‹ค๋ž€ ์šฉ๋Ÿ‰์˜ ๋‹ท๋„ท ๋Ÿฐํƒ€์ž„ ๋ฐฐํฌ๊ฐ€ ๋ถ€๋‹ด์Šค๋Ÿฝ๋‹ค๋ฉด, ๊ฐœ์ธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐœ๋ฐœ์—์„œ๋ถ€ํ„ฐ ํ™œ์šฉํ•ด ๋ณด์ž. ๋˜ํ•œ ์›น ์ธ์Šคํ†จ๋Ÿฌ ๋“ฑ์„ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์ธ์Šคํ†จ๋Ÿฌ๊ฐ€ ๋‹ท๋„ท ์„ค์น˜ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋„์›Œ์ฃผ๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฐํฌ์— ๋Œ€ํ•œ ๋ถ€๋‹ด์„ ์ค„์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์–ด์ฐจํ”ผ ์œˆ๋„์šฐ 7๋ถ€ํ„ฐ๋Š” ๋‹ท๋„ท ํ”„๋ ˆ์ž„์›Œํฌ 3.5๊ฐ€, ์œˆ๋„์šฐ 8๋ถ€ํ„ฐ๋Š” 4.5๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋ผ ์žˆ๊ธฐ๋„ ํ•˜๊ณ , ATI ์นดํƒˆ๋ฆฌ์ŠคํŠธ ์ปจํŠธ๋กค ์„ผํ„ฐ์ฒ˜๋Ÿผ ์žฅ์น˜ ๋“œ๋ผ์ด๋ฒ„ ๊ด€๋ จ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ๋‹ท๋„ท ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋˜๊ธฐ๋„ ํ•˜๋Š” ๋“ฑ, ์™„์ „ํžˆ ๋‹ท๋„ท์ด๋ž€ ๊ฒƒ๊ณผ ๋‹ด์„ ์Œ“๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ ์„ค์น˜ํ•ด์•ผ ๋˜๋Š” ์ผ์€ ๋งŽ์ด ์ค„์–ด๋“ค์—ˆ๋‹ค.
    • Python์€ Tcl/Tk, PyQt, PyGTK ๋“ฑ ๋‹ค์–‘ํ•œ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ์—ฐ๊ฒฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
    • Java์—๋Š” JavaFX์™€ SWT[4], SwingX ๋“ฑ์˜ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค. AWT๋‚˜ Swing์€ MFC์™€ ๋น„์Šทํ•œ ๊ฐœ๋ฐœ ๋‚œ์ด๋„๋ฅผ ์ž๋ž‘ํ•˜๊ธฐ์— ๋ณ„๋กœ ์ถ”์ฒœํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.
    • ํŒŒ์Šค์นผ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ธํŒŒ์ด ํ™˜๊ฒฝ์€ MFC์™€ ์–ผ๋งˆ ์ฐจ์ด๋‚˜์ง€ ์•Š๋Š”[5] ์—ญ์‚ฌ๋ฅผ ์ž๋ž‘ํ•˜์ง€๋งŒ, macOS์™€ Linux ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์•ˆ๋“œ๋กœ์ด๋“œ, iOS ํ™˜๊ฒฝ๋„ ์ง€์›ํ•˜๋ฉฐ RAD ํˆด๋กœ์„œ ๋น ๋ฅด๊ฒŒ ๊ฐ•๋ ฅํ•œ GUI ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • Electron์„ ์‚ฌ์šฉํ•˜๋ฉด HTML + CSS + JavaScript(Node.js)๋กœ ๋ฐ์Šคํฌํ†ฑ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค! ๋‹น์žฅ Atom๊ณผ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค ์ฝ”๋“œ๊ฐ€ ์‹ค๊ธฐ๋กœ ๋‚˜์™€ ์žˆ๋‹ค. ๋‹จ์ ์€ ๊ตฌํ˜„ ๋ฐฉ์‹์ด ์ผ๋‹จ ๋ธŒ๋ผ์šฐ์ € ํ•˜๋‚˜๋ฅผ ๋„์›Œ๋†“๊ณ  ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ์šฉ๋Ÿ‰์ด ํฌ๊ณ  ํผํฌ๋จผ์Šค๊ฐ€ ๋–จ์–ด์ง„๋‹ค๋Š” ์ . ์ด ๋ถ€๋ถ„์€ PC์˜ ํ‰๊ท  ์ŠคํŽ™์ด ์˜ฌ๋ผ๊ฐ€๋ฉด ์ฐจ์ฐจ ํ•ด๊ฒฐ๋  ๋“ฏํ•˜๋‹ค. ์œ„์—์„œ ์˜ˆ๋กœ ๋“  ๋‹ท๋„ท ํ”Œ๋žซํผ๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ, ๋‹ค์–‘ํ•œ ์šด์˜์ฒด์ œ๋ฅผ ์ง€์›ํ•˜๋Š” ํฌ๋กœ์Šคํ”Œ๋žซํผ ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๋Š” ๊ฒƒ์ด ์ƒ๋‹นํ•œ ์žฅ์ ์ด๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด ํ”„๋ก ํŠธ์—”๋“œ์—๋งŒ Electron์„ ์“ฐ๊ณ , IPC์™€ FFI ํ˜น์€ wasm์„ ์ด์šฉํ•ด ๋ฐฑ์—”๋“œ๋Š” C/C++ ๋“ฑ์œผ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. MS๊ฐ€ GitHub๋ฅผ ์ธ์ˆ˜ํ•œ ์ดํ›„๋ถ€ํ„ฐ๋Š” ์ด Electron์„ ๋ฐ€์–ด์ฃผ๊ณ  ์žˆ๋‹ค.
    • 2010๋…„๋Œ€์˜ ๋Œ€์„ธ์ธ ์›น์„ ํ†ตํ•ด UI๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์„œ๋ฒ„ ํ†ต์‹ ์ด ํ•„์š”์—†๋Š” ๋กœ์ปฌ ํ”„๋กœ๊ทธ๋žจ์ธ๋ฐ๋„ ์›น์œผ๋กœ ๊ตฌํ˜„๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ ์  ๋Š˜์–ด๋‚˜๊ณ  ์žˆ์œผ๋ฉฐ, ์‹œ์Šคํ…œ์„ ๋งŒ์ ธ์•ผ ํ•˜๊ฑฐ๋‚˜ ํผํฌ๋จผ์Šค๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์€ ๋”ฐ๋กœ ์›น API ์„œ๋ฒ„ ๋…ธ๋ฆ‡์„ ํ•˜๋Š” ์„œ๋น„์Šค ํ”„๋กœ์„ธ์Šค๋กœ ๋ถ„๋ฆฌ์‹œํ‚จ ๋’ค UI์™€ ํ†ต์‹ ํ•˜๋Š” ์‹์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค.[6] ์ผ๋ก€๋กœ ํฌ๋ฃจ์…œ์˜ SSD ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ(Crucial Storage Executive)์ด ์ด๋Ÿฐ ์‹. ๊ธฐ์กด ํ”„๋กœ๊ทธ๋žจ์˜ UI์™€ ์ฝ”์–ด๋ถ€๊ฐ€ ์ž˜ ๋ถ„๋ฆฌ๋ผ ์žˆ๋‹ค๋ฉด ์ƒ๊ฐํ•ด๋ณผ๋งŒ ํ•˜๋‹ค.
[1] ๋น„์Šทํ•œ ์‹œ๊ธฐ ๋Œ€์ฒด์ œ๋กœ๋Š” Object Pascal ์–ธ์–ด ๊ธฐ๋ฐ˜์˜ ๋ธํŒŒ์ด์™€ Visual Basic์ด ์žˆ์—ˆ๋‹ค.
[2] AFX ํŒ€์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋งŽ๋ƒ๋ฉด ์œˆ๋„์šฐ๊ฐ€ ํ•œ๋ฒˆ ์—…๊ทธ๋ ˆ์ด๋“œ ๋˜์—ˆ์„ ๋•Œ, MFC๋Š” ๋ฐ˜๋…„ ๋’ค์— ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ๋  ์ •๋„๋ผ๊ณ  ํ•˜๋‹ˆ...
[3] ๋‹น์—ฐํ•˜๊ฒ ์ง€๋งŒ ์œˆ๋„์šฐ ์™ธ ์šด์˜์ฒด์ œ์—์„œ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
[4] ์ดํด๋ฆฝ์Šค์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. ํ™ˆํŽ˜์ด์ง€
[5] 1995๋…„ ์ตœ์ดˆ ๊ณต๊ฐœ๋˜์—ˆ๋‹ค
[6] ์œ„์— ์„œ์ˆ ๋œ ์ผ๋ ‰ํŠธ๋ก ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ด๋Ÿฐ ๊ตฌ์กฐ์ด๋‹ค.