MVC Pattern์— ๊ธฐ๋ฐ˜ํ•œ GUI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ JavaFX

๋ฐ˜์‘ํ˜•

Java GUI Programming ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” AWT, SWT, Swing, JavaFX๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์˜ ๊ฒฝ์šฐ, AWT์™€ Swing์œผ๋กœ๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ–ˆ์—ˆ๋Š”๋ฐ์š”. ์•„๋งˆ ํ•ด๋ณด์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด, Java์˜ GUI ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ข€ ๋‹ต๋‹ตํ•จ์„ ๋งŽ์ด ๋Š๋ผ์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.


์ œ๊ฐ€ GUI Programming์œผ๋กœ ์ฒ˜์Œ ์ ‘ํ–ˆ๋˜ ๊ฒƒ์€ Visual Basic 6.0 ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฑ๋”ฑํ•˜๊ณ  ๊ณ ์ •์ ์ธ ๋Š๋‚Œ์˜ UI์˜€์ง€๋งŒ ๋ถ„๋ช…ํ•œ ๊ฒƒ์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ด์„œ ๊ต‰์žฅํžˆ ์‰ฝ๋‹ค๋Š” ์ ๊ณผ ๋”๋ถˆ์–ด ๋””์ž์ธ์„ ๊ทธ๋ƒฅ ๋งˆ์šฐ์Šค๋กœ๋งŒ ์™”๋‹ค๊ฐ”๋‹ค ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค๋Š” ์ ์ด ๋งค์šฐ ๋ฉ”๋ฆฌํŠธ ์žˆ์—ˆ์ง€์š”. ๊ทธ๋ฆฌ๊ณ , ๋กœ์ง๋งŒ ์ฝ”๋“œ๋กœ ์งœ๋ฉด, ํ”„๋กœ๊ทธ๋žจ์ด ๊ธˆ๋ฐฉ ๊ฐœ๋ฐœ์ด ๋˜์–ด ์ƒ์‚ฐ์„ฑ์ด ๋งค์šฐ ์ข‹์•˜๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๊ธฐ๋„ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ง€๊ธˆ๋„ ์กด์žฌํ•˜๋Š” ์–ธ์–ด์ง€์š”.


ํ•˜์ง€๋งŒ ์œ ์ผํ•œ ๋‹จ์ ์€ "Windows" ์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐ ๋งค์šฐ ํฐ ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ์ง€์š”. ์ง€๊ธˆ๋„ Windows ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ๋Š” C#๋งŒํผ์ด๋‚˜ ๋Œ€๋‹จํ•œ ๊ฒƒ์ด ์—†์„ ์ •๋„๋ž€ ๋ง์ด ์‚ฌ์‹ค์ผ ์ •๋„์ž…๋‹ˆ๋‹ค.


์ง€๊ธˆ์€ Mono๋ผ๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ Silverlight์— ์ด์–ด์„œ C#๊ณผ .NET์—๋„ ํž˜์„ ๊ธฐ์šธ์—ฌ Linux์™€ ๊ฐ™์€ ์šด์˜์ฒด์ œ์—์„œ๋„ ๊ฐœ๋ฐœ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ํฐ ๋ณ€ํ™”์˜ ์กฐ์ง์€ ๋ณด์ด์ง€ ๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„์ง๊นŒ์ง€๋Š” ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ์šฉ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์ข‹์€ ๊ฐœ๋ฐœ์˜ ์–ธ์–ด๋Š” Java๊ฐ€ ์•„๋‹Œ๊ฐ€ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.


ํ•˜์ง€๋งŒ Java์—์„œ ์ œ๊ณตํ•˜๋Š” Swing ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋„ˆ๋ฌด ๋Š๋ ธ๊ณ , ์˜ค๋ฅ˜๋„ ๊ต‰์žฅํžˆ ์‹ฌํ•ด์„œ ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ๊ต‰์žฅํžˆ ์•…๋ช…์ด ๋†’๊ธฐ๋„ ํ•˜์ง€์š”.. ๊ทธ๋ž˜์„œ Java๋กœ๋Š” ๊ฑฐ์˜ GUI ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์„ ์•ˆํ•˜๋‹ค ์‹œํ”ผํ–ˆ์—ˆ๋Š”๋ฐ์š”.


๊ทธ๋Ÿฐ๋ฐ, Swing์ด ๋‚˜์˜จ ์ดํ›„, Java์˜ GUI ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋˜ ๋‹ค์‹œ ์ƒˆ๋กœ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”. ๋ฐ”๋กœ JavaFX๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.




What is JavaFX?

JavaFX๋Š” Java SE(Standard Edition)์˜ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Swing์„ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. Swing์„ ์ ‘ํ•˜์‹  ๋ถ„๋“ค์€ ์•„์‹œ๊ฒ ์ง€๋งŒ, ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งค์šฐ ๋ฌด๊ฒ๊ณ , ๋Š๋ ค์„œ ์ž˜ ์“ฐ์ง€๋„ ์•Š๊ณ , ๊ฑฐ์˜ ๋ฌตํ˜€๋‘๊ณ  ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘์— ํ•˜๋‚˜์ด๊ธฐ๋„ ํ•˜์ฃ . 


๊ทธ๋Ÿฐ๋ฐ, ์ด JavaFX๋Š” ๊ธฐ์กด Swing๋ณด๋‹ค ๊ฐ€๋ณ๊ณ , ๋”์šฑ ๋” ์ข‹์€ ๊ฒƒ์€ ๊ทธ๋ž˜ํ”ฝ์„ ์ง€์›ํ•œ๋‹ค๋Š” ์ ๊ณผ Web์—์„œ๋„ ํ˜ธํ™˜์ด ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ทธ๋ž˜ํ”ฝ์„ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ๋ž˜ํ”„, ์ด๋ฏธ์ง€, ์˜์ƒ, ์‚ฌ์šด๋“œ ๋“ฑ์˜ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด๋ฅผ ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.


๋ณธ๋ž˜ JavaFX๋Š” RIA(Rich Internet Application)์˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. Java ๊ธฐ๋ฐ˜์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Linux, Windows, OS X ํ•  ๊ฒƒ์—†์ด Java๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋žซํผ์ด๋ผ๋ฉด ์–ด๋””์„œ๋“ ์ง€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์„ ์ง€๋‹ˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


์ง€๊ธˆ ํ˜„์žฌ JavaFX๋Š” 2.2 ๋ฒ„์ „๊นŒ์ง€ ์ถœ์‹œ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋ณธ๋ž˜ JavaFX๋Š” JavaFX Script๋ผ๊ณ  ํ•˜๋Š” ๋ณ„๊ฐœ์˜ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ๋˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜€์ง€๋งŒ, 1.0 ์ดํ›„, 2.0์—์„œ ๋ถ€ํ„ฐ๋Š” ์ผ๋ฐ˜ Java ์–ธ์–ด๋กœ๋„ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋˜,  RIA์˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด์ง€๋งŒ, ์ง€๊ธˆ์€ HTML5์™€ jQuery ๋“ฑ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋“ค์ด ์ž˜ ์ฒ˜๋ฆฌ๋˜์–ด ์žˆ์–ด์„œ JavaFX๋Š” ๊ฑฐ์˜ ๊ทธ ์กด์žฌ๊ฐ€ ์žŠํ˜€์งˆ ์ •๋„์ž…๋‹ˆ๋‹ค.


ํ•˜์ง€๋งŒ Java ์–ธ์–ด๋ฅผ ์ด์šฉํ•ด GUI ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, Swing ๋ณด๋‹ค๋Š” JavaFX๊ฐ€ ๋‚ซ์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.



MVC Design Pattern

์ด ํฌ์ŠคํŠธ์— ๋Œ€ํ•œ ์ค‘์‹ฌ์ ์ธ ์ฃผ์ œ๋Š” ์•„๋‹ˆ์ง€๋งŒ, MVC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจํ„ด์„ ๋ชจ๋ฅด๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ MVC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจํ„ด์— ๋Œ€ํ•ด ์„ค๋ช…์„ ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.


ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—๋„ ๋””์ž์ธ ํŒจํ„ด์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋””์ž์ธ ํŒจํ„ด์€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์˜ ์ผ์ข…์ด๊ธฐ๋„ ํ•œ๋ฐ์š”. ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด, ์šฐ๋ฆฌ๊ฐ€ ๊ฑด์ถ•๋ฌผ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์–ด๋–ค ์ œํ’ˆ์„ ๋งŒ๋“ค ๋•Œ, ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ์„ค๊ณ„๋„์ž…๋‹ˆ๋‹ค. ์ด ์„ค๊ณ„๋„๋Š” ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งŒ๋“ค๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ๊ตฌ์„ฑํ•ด๋†“์€ ์–ด๋–ค ๊ตฌ์ƒ๋„์ด๊ธฐ๋„ ํ•˜์ฃ .


๋””์ž์ธ ํŒจํ„ด ๋˜ํ•œ ์ด์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ •ํ•ด์ง„ ํ‹€์ด ๋ฏธ๋ฆฌ ๊ตฌ์„ฑ๋œ ๊ฒƒ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๊ทธ๋Ÿผ MVC ๋””์ž์ธ ํŒจํ„ด์€ ๋ฌด์—‡์ผ๊นŒ์š”?


MVC๋Š” Model, View, Controller์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค. View๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ์‹œ๊ฐ์ ์ธ ํŽ˜์ด์ง€, (์›น์œผ๋กœ ๋งํ•˜๋ฉด, HTML ์ฝ”๋“œ), Model์€ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•˜๋Š” ํ˜•ํƒœ, Controller๋Š” View์™€ Model์ด ์ƒํ˜ธ ๊ฐ„์˜ ์ด๋ฒคํŠธ๋‚˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋™์ž‘์„ ํ•˜๋Š” ๋กœ์ง ์ฝ”๋“œ๋ฅผ ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. (์›น์œผ๋กœ ๋งํ•˜๋ฉด, PHP, Java ์ฝ”๋“œ)


์œ„ ์‚ฌ์ง„์€ ๋ฏธ๊ตญ ์Šคํƒ ํฌ๋“œ ๋Œ€ํ•™๊ต์˜ Developing Apps for iOS ๊ฐ•์˜์— ๋‚˜์˜ค๋Š” MVC ํŒจํ„ด ์Šฌ๋ผ์ด๋“œ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…๋“œ๋ฆฌ์ž๋ฉด..


์‚ฌ์šฉ์ž๋Š” ๋งจ ์ฒ˜์Œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ, ์–ด๋–ค View๋ฅผ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ํ•ด๋‹น View์—์„œ ์–ด๋–ค ๋ฒ„ํŠผ์ด๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ํ˜ธ์ถœํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด ํ˜ธ์ถœ๋œ ๋ช…๋ น์€ Controller์—๊ฒŒ ์ „๋‹ฌ์ด ๋˜๊ณ , Controller๋Š” Model์„ ํ†ตํ•ด์„œ ๊ฒฐ๊ณผ๋ฌผ์„ ๊ฐ€์ ธ์˜ค๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฐ”ํƒ•์œผ๋กœ View๋ฅผ ์ œ์–ดํ•ด์„œ ์ตœ์ข…์ ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๋ฌผ์„ View์— ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์˜ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.



MVC ํŒจํ„ด์— ๊ธฐ๋ฐ˜ํ•œ JavaFX

JavaFX๋Š” Swing๊ณผ ๋‹ฌ๋ฆฌ View์™€ Controller๊ฐ€ ๋ถ„๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์™€ ๋น„์Šทํ•œ ์˜ˆ๋กœ, Spring๊ณผ Android Application์ด ์žˆ์ฃ . Android Application์„ ์˜ˆ๋กœ ๋“ค์ž๋ฉด, Android Application์€ Java ์ฝ”๋“œ๋กœ Controller๋ฅผ, XML ์–ธ์–ด๋กœ View๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ .


JavaFX๋„ ์ด์ฒ˜๋Ÿผ View์™€ Controller๊ฐ€ ๋ถ„๋ฆฌ๋œ ํ˜•ํƒœ๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” View๋กœ FXML์ด๋ผ๊ณ  ํ•˜๋Š” ๋งˆํฌ์—… ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด ์–ธ์–ด๋Š” ์œ„์ ฏ(์ปดํฌ๋„ŒํŠธ)์˜ ๋ฐฐ์น˜๋ฅผ ์ง๊ด€์ ์œผ๋กœ ํ‘œํ˜„ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ์–ธ์–ด์ด๊ณ , Scene Builder๋ผ๊ณ  ํ•˜๋Š” ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด ๋งˆ์šฐ์Šค๋กœ ์กฐ์ž‘ํ•ด ๋ฐฐ์น˜๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์„ ์ง€๋‹ˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


์œ„ ์‚ฌ์ง„์€ Scene Builder๋ฅผ ์‹คํ–‰ํ•œ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค. 


FXML์€ XML๊ณผ ์œ ์‚ฌํ•œ ๋งˆํฌ์—… ์–ธ์–ด์ธ๋ฐ, ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ XML๊ณผ ๋ณ„๋ฐ˜ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์•ˆ๋“œ๋กœ์ด๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•ด๋ณด์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด, ์•„๋งˆ ์‰ฝ๊ฒŒ ์ ‘ํ•˜์‹ค ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.



JavaFX ์„ค์น˜์™€ ๊ฐœ๋ฐœ ๋„๊ตฌ

๊ธฐ๋ณธ์ ์œผ๋กœ JavaFX๋Š” JDK-SE-1.7 ๋ฒ„์ „ ์ด์ƒ์„ ์„ค์น˜ํ•˜๋ฉด ๊ฐ™์ด ์„ค์น˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค๋งŒ, Linux ์šด์˜์ฒด์ œ์—์„œ๋Š” ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


$ sudo apt install openjfx

Ubuntu, Debian ์šด์˜์ฒด์ œ์—์„œ JavaFX๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ ค๋ฉด ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ, openjfx ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์…”์•ผ ๋ฉ๋‹ˆ๋‹ค.


JavaFX๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋ฅผ ๋Œ€ํ‘œ์ ์ธ ๋ช‡ ๊ฐœ๋งŒ ์„ ์ถœํ•ด๋ดค์Šต๋‹ˆ๋‹ค.


- IntelliJ IDEA

- NetBeans

- eFXclipse


์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ IntelliJ IDEA๋ฅผ Java ๊ฐœ๋ฐœ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, JavaFX Application๋„ IntelliJ IDEA์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ํ•™์ƒ ์‹ ๋ถ„์ด๋ผ์„œ, ๋งˆ์Œ๊ป Ultimate์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ๋„ ์žˆ์ง€๋งŒ ๋ฌด๋ฃŒ ๊ฐœ๋ฐœ ๋„๊ตฌ์ธ NetBeans๋ฅผ ์จ๋ณด๋‹ˆ. ์—ญ์‹œ IntelliJ๋ฅผ ์“ฐ๋‹ค๊ฐ€ ์˜ค๊ธฐ์—๋Š” ๋ญ”๊ฐ€ ๋ถˆํŽธํ•˜๋‹ค๋Š” ์ ์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ^^;



๊ฐ„๋‹จํ•œ JavaFX Application ์˜ˆ์ œ

๊ทธ๋Ÿผ IntelliJ IDEA๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•œ JavaFX Application์„ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


IntelliJ IDEA์—์„œ New Project ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•˜๋ฉด, ์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด JavaFX Application ํ•ญ๋ชฉ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ•ญ๋ชฉ์„ ์ด์šฉํ•ด์„œ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.


๊ทธ๋Ÿผ Main Class๊ฐ€ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š”๋ฐ์š”. ์ด Main Class๋Š” JavaFX์—์„œ ๊ฐ€์žฅ ์ฒ˜์Œ ์‹คํ–‰ํ•˜๋Š” ํด๋ž˜์Šค๋กœ, ์ด ํด๋ž˜์Šค์—๋Š” ๋ฐ˜๋“œ์‹œ Application ํด๋ž˜์Šค๊ฐ€ ์ƒ์†๋˜์–ด์•ผ ํ•˜๊ณ , start ๋ฉ”์†Œ๋“œ๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , Java Application์˜ ๋ฉ”์ธ ํ•จ์ˆ˜์ธ main ํ•จ์ˆ˜์— ๋ฐ˜๋“œ์‹œ ์„ ์–ธ๋˜์–ด ์žˆ์–ด์•ผ ๊ฐ€์žฅ ์ฒ˜์Œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.


JavaFX์—์„œ๋Š” Parent๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด FXML ํŒŒ์ผ์„ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๊ณ , Stage ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด View๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


FXML ํŒŒ์ผ์— View๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด, Controller์™€ ์ƒํ˜ธ์ž‘์šฉ์ด ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” FXML์—์„œ fx namespace์— ์กด์žฌํ•˜๋Š” controller๋ผ๋Š” ์†์„ฑ์„ ํ†ตํ•ด ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


FXML์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋ ค๋ฉด, ์–ด๋…ธํ…Œ์ด์…˜(Annotation)์„ ์ด์šฉํ•ด ๋ถˆ๋Ÿฌ์˜ค์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, ๋ถˆ๋Ÿฌ์˜ค์‹ค ๋•Œ ๋ณ€์ˆ˜ ์ด๋ฆ„์€ FXML์˜ fx:id์™€ ๋™์ผํ•˜๊ฒŒ ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅด๊ฒŒ ์ฃผ๋ฉด, ๋ถˆ๋Ÿฌ์˜ค์ง€๋ฅผ ๋ชปํ•˜๋ฏ€๋กœ ์‚ฌ์šฉํ•ด ๋ฐ˜๋“œ์‹œ ์œ ์˜.


๋‚˜๋จธ์ง€๋Š” Java ์ฝ”๋“œ์™€ ๋˜‘๊ฐ™์ด ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


๊ทธ๋Ÿผ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋กœ ์ฃผ์†Œ๋ก ํ”„๋กœ๊ทธ๋žจ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


๊ตฌ์„ฑ์€ ์œ„์™€ ๊ฐ™์ด MVC ํŒจํ„ด์˜ ๊ตฌ์„ฑ์„ ๋”ฐ๋ฅด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฃผ์†Œ๋ก์—๋Š” ์‚ฌ๋žŒ์˜ ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—, Person์ด๋ผ๋Š” Model์„ ์ƒ์„ฑํ•˜๊ณ , samples.fxml๊ณผ Controller.java๋กœ ๊ตฌ์„ฑํ•ด๋ดค์Šต๋‹ˆ๋‹ค.


์œ„ ์†Œ์Šค ์ฝ”๋“œ๋Š” Model ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒ ์ฃ ? ์ฃผ์†Œ๋ก์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฆ„, ์ „ํ™”๋ฒˆํ˜ธ, ์ด๋ฉ”์ผ ์ฃผ์†Œ๊ฐ€ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ €๋Š” ์™ธ๊ตญ ํ˜•์‹์— ๋งž์ถฐ First Name, Last Name์„ ์ด์šฉํ•ด ์„ฑ๊ณผ ์ด๋ฆ„์„ ๋ณ„๋„๋กœ ๊ตฌ๋ถ„ ์ง€์–ด์„œ ๋งŒ๋“ค์–ด๋ดค์Šต๋‹ˆ๋‹ค.


View๋Š” FXML ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์†Œ๋ก์„ ์ €๋Š” TableView๋ฅผ ์ด์šฉํ•ด์„œ ํ‘œ์— ์ฐจ๊ณก์ฐจ๊ณก ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“์•„๋†“๋Š” ํ˜•ํƒœ๋กœ ํ•˜์—ฌ, ์ถ”๊ฐ€์™€ ์‚ญ์ œ๋งŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ฒ„ํŠผ 2๊ฐœ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ…์ŠคํŠธ ์ƒ์ž๋ฅผ 4๊ฐœ๋กœ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๋งˆ์ง€๋ง‰์œผ๋กœ Controller์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด, ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ผ๋Š” ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ๋‚ด์šฉ์ด TableView์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์‚ญ์ œ๋ฅผ ํ•˜๋ฉด, ํ•ด๋‹น ๋‚ด์šฉ์ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์—ฌ๊ธฐ์— ์˜๊ตฌ์ ์œผ๋กœ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ์ €์žฅ์— ๋Œ€ํ•œ ์ฝ”๋“œ๋Š” ์ ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.


์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.



๋งˆ์น˜๋ฉฐ...

์—ฌ๊ธฐ๊นŒ์ง€ JavaFX์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•ด๋ดค์Šต๋‹ˆ๋‹ค. 


Java์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ์—ญ๋Ÿ‰์ด ์žˆ์œผ์‹  ๋ถ„์ด๋ผ๋ฉด, ์ถฉ๋ถ„ํžˆ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” JavaFX ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ช‡ ๋ฒˆ ์ €๋„ ์จ๋ดค์ง€๋งŒ Swing์— ๋น„ํ•ด์„œ๋Š” ๋ช‡ ๋ฐฐ๋‚˜ ์ข‹๊ณ , ๋‹จ์ ์ด ์žˆ๋‹ค๋ฉด, FXML๋กœ ์ฝ”๋”ฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” Scene Builder๊ฐ€ ๋ฒ„๊ทธ๊ฐ€ ๋งŽ์ด ์กด์žฌํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.


์‹ค์ œ๋กœ Oracle ํ™ˆํŽ˜์ด์ง€์—์„œ ์ œ๊ณตํ•˜๋Š” Scene Builder๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ„์ „์˜ Scene Builder๋Š” FXCollection ๋“ฑ์˜ ์™ธ๋ถ€ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฑ‰์–ด๋‚ด๋Š” ๋ฒ„๊ทธ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.


๊ทธ๋ž˜์„œ ์ €๋Š” Gluon์—์„œ ์ œ๊ณตํ•˜๋Š” Scene Builder 8 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์‹œ๋ฉด ๋‹ค์šด๋กœ๋“œ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.


Download Scene Builder


๊ทธ ์™ธ JavaFX์—์„œ๋Š” ๊ทธ๋ž˜ํ”„, 3D ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ทธ๋ž˜ํ”ฝ ์š”์†Œ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์ผ๋ถ€ ์กด์žฌํ•˜๋Š” ํŽธ์ด๊ธด ํ•˜์ง€๋งŒ, Swing ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋น„ํ•˜๋ฉด ์†๋„๋„ ํ›จ์”ฌ ๋น ๋ฅด๊ณ , ์ข‹์€ ํŽธ์ž…๋‹ˆ๋‹ค. ํ˜น์‹œ๋ผ๋„ Java GUI Application์„ ๊ฐœ๋ฐœํ•˜์‹œ๋Š” ๋ถ„์ด๋ผ๋ฉด, ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์กฐ์‹ฌ์Šค๋ ˆ ์ถ”์ฒœํ•ด๋ด…๋‹ˆ๋‹ค.


ํ•œ ๊ฐ€์ง€ ๋”, ๊ธฐ์กด์— Swing์œผ๋กœ ๊ฐœ๋ฐœํ•˜์…จ๋˜ ํ”„๋กœ๊ทธ๋žจ๋„ JavaFX์™€ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. JavaFX์—์„œ๋„ ๊ธฐ์กด์˜ AWT, SWT, Swing์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋Š๋ฆฐ ์†๋„์™€ ๋ถˆํŽธํ•œ Swing ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ถˆํŽธํ•จ์„ ๊ฒช์œผ์‹œ๋Š” ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค์ด๋ผ๋ฉด, ์†ํžˆ JavaFX๋กœ ๊ฐˆ์•„ํƒ€๋ณด๊ธฐ๋ฅผ ๊ถŒํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments