Search

์ปจํŠธ๋กค๋Ÿฌ ์ƒ๋ช…์ฃผ๊ธฐ

์ปจํŠธ๋กค๋Ÿฌ ์ƒ๋ช…์ฃผ๊ธฐ

JavaFX ์ปจํŠธ๋กค๋Ÿฌ๋Š” FXMLLoader.load() ์‹œ ์ž๋™ ์ƒ์„ฑ๋˜๊ณ , FXML ์ฃผ์ž… ํ›„ initialize()๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ ํ›„, UI ๋ณ€๊ฒฝ์€ Platform.runLater()๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋œ๋‹ค.

JavaFX ์ปจํŠธ๋กค๋Ÿฌ ์ƒ๋ช…์ฃผ๊ธฐ

sequenceDiagram
    participant StageManager
    participant Controller as Controller
    participant FXThread as JavaFX Application Thread

    StageManager->>Controller: new Controller() ์ƒ์„ฑ<br> (FXMLLoader.load())
    FXThread->>Controller: initialize() ํ˜ธ์ถœ
    note right of Controller: FXML ๋กœ๋“œ ํ›„ ์ž๋™ ํ˜ธ์ถœ
    StageManager->>Controller: receiveData(data) ํ˜ธ์ถœ
    note right of Controller: StageManager๊ฐ€ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
    Controller->>FXThread: Platform.runLater(() -> {...}) ๋“ฑ๋ก
    note right of FXThread: UI ์—…๋ฐ์ดํŠธ ์ฝ”๋“œ ์˜ˆ์•ฝ
    FXThread-->>Controller: runLater ๋‚ด๋ถ€ ์ฝ”๋“œ ์‹คํ–‰
    note right of Controller: UI ์Šค๋ ˆ๋“œ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰๋จ
Mermaid
๋ณต์‚ฌ

๋‹จ๊ณ„๋ณ„ ์„ค๋ช…

โ‘  FXMLLoader.load() ์‹คํ–‰

โ€ข
StageManager์—์„œ FXMLLoader.load()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด,
โ—ฆ
FXML ํŒŒ์ผ์„ ํ•ด์„ํ•˜๋ฉด์„œ <fx:controller>๋กœ ์ง€์ •๋œ ํด๋ž˜์Šค(Controller)์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
โ†’ ์ฆ‰, new Controller() ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์‹คํ–‰๋จ.
โ€ข
์ƒ์„ฑ ์งํ›„, FXML ๋‚ด์˜ UI ์ปดํฌ๋„ŒํŠธ(@FXML TextField input ๋“ฑ)๊ฐ€ ์ž๋™์œผ๋กœ ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค.

โ‘ก initialize() ์ž๋™ ํ˜ธ์ถœ

โ€ข
๋ชจ๋“  FXML ์š”์†Œ๊ฐ€ ์ฃผ์ž…๋œ ํ›„,
์ปจํŠธ๋กค๋Ÿฌ์˜ @FXML initialize() ๋ฉ”์„œ๋“œ๊ฐ€ ์ž๋™ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
โ€ข
์ดˆ๊ธฐํ™” ๋กœ์ง(UI ๊ธฐ๋ณธ ์„ค์ •, ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก ๋“ฑ)์„ ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์•„์ง StageManager์—์„œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ์ „์ด๋ผ,
์™ธ๋ถ€ ๊ฐ’(receiveData)์€ ์•„์ง null์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ‘ข StageManager.show(fxml, data) โ†’ receiveData() ํ˜ธ์ถœ

โ€ข
StageManager๊ฐ€ ํ™”๋ฉด ์ „ํ™˜์„ ์™„๋ฃŒํ•œ ๋’ค,
์ƒˆ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ DataReceiver๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด receiveData(data)๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์ด ๋‹จ๊ณ„์—์„œ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ(์˜ˆ: ๋กœ๊ทธ์ธ ์ •๋ณด, ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๋“ฑ)๋ฅผ ์ „๋‹ฌ๋ฐ›์Šต๋‹ˆ๋‹ค.

โ‘ฃ Platform.runLater() ํ˜ธ์ถœ

โ€ข
receiveData() ์•ˆ์—์„œ UI ์š”์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด
JavaFX UI Thread์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
Platform.runLater(() -> {...}) ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด
์ „๋‹ฌ๋œ ์ฝ”๋“œ ๋ธ”๋ก์ด JavaFX Application Thread ํ์— ๋“ฑ๋ก๋˜์–ด,
๋‹ค์Œ UI ํ”„๋ ˆ์ž„ ์‹œ์ ์— ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

โ‘ค runLater ๋‚ด๋ถ€ ์ฝ”๋“œ ์‹คํ–‰

โ€ข
JavaFX Application Thread๊ฐ€ ๋“ฑ๋ก๋œ ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
์ด๋•Œ TextField.setText() ๋“ฑ UI ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•ด๋„ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
ํ™”๋ฉด์ด ์ตœ์ข… ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์š”์•ฝ

์ˆœ์„œ
๋‹จ๊ณ„
์‹คํ–‰ ์Šค๋ ˆ๋“œ
์„ค๋ช…
1
Controller ์ƒ์„ฑ (FXMLLoader.load())
JavaFX Application Thread
FXML ๋กœ๋“œ ์‹œ ์ž๋™ ์ƒ์„ฑ
2
initialize()
JavaFX Application Thread
UI ๊ตฌ์„ฑ์š”์†Œ ์ดˆ๊ธฐํ™”
3
receiveData()
JavaFX Application Thread
StageManager์—์„œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
4
Platform.runLater() ๋“ฑ๋ก
JavaFX Application Thread
UI ๋ณ€๊ฒฝ ์ฝ”๋“œ ์˜ˆ์•ฝ
5
runLater ์‹คํ–‰
JavaFX Application Thread
UI ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐฑ์‹