Search

๋ฐ์ดํ„ฐ ์ „๋‹ฌ

๋ฐ์ดํ„ฐ ์ „๋‹ฌ

ํ™”๋ฉด ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ๋ฒ•

1.
FXML ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
2.
์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์ด์šฉํ•œ ์ „์—ญ ๋ฐ์ดํ„ฐ ๊ณต์œ 

FXML ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

FXMLLoader๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹

1. ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๊ณผ์ •

1.
FXML ํŒŒ์ผ์„ ๋กœ๋“œํ•  ๋•Œ FXMLLoader๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
2.
getController()๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
3.
๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
4.
์ƒˆ๋กœ์šด ํ™”๋ฉด์—์„œ ๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ ๋ฐ›๋Š”๋‹ค.
a.
์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ UI๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
b.
์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€์ˆ˜์— ์ง€์ •ํ•œ๋‹ค.

2. ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๊ณผ์ • ์ƒ์„ธ ์„ค๋ช…

FXML ํŒŒ์ผ๊ณผ ์ปจํŠธ๋กค๋Ÿฌ ์ค€๋น„

โ€ข
๋จผ์ € Main.fxml๊ณผ Login.fxml์„ ์ค€๋น„ํ•œ๋‹ค.
โ€ข
๊ฐ๊ฐ์˜ ํ™”๋ฉด์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ(MainController์™€ LoginController)๋ฅผ ๋งŒ๋“ ๋‹ค.

MainController์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ

โ€ข
์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด Login.fxml ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.
โ€ข
FXMLLoader๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Login.fxml์„ ๋กœ๋“œํ•œ ํ›„ getController()๋ฅผ ํ†ตํ•ด LoginController์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
โ€ข
setUserData() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

LoginController์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ UI ์—…๋ฐ์ดํŠธ

โ€ข
์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ initialize() ๋˜๋Š” ๋ณ„๋„์˜ ๋ฉ”์†Œ๋“œ์—์„œ UI ์š”์†Œ(Label ๋“ฑ)์— ๋ฐ˜์˜ํ•œ๋‹ค.

3. ์ฝ”๋“œ ์˜ˆ์ œ

Main.fxml (๋ฉ”์ธ ํ™”๋ฉด)

<VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="application.MainController"> <Button text="๋กœ๊ทธ์ธ ํ™”๋ฉด ์ด๋™" fx:id="loginButton" onAction="#handleLogin"/> </VBox>
XML
๋ณต์‚ฌ

Login.fxml (๋กœ๊ทธ์ธ ํ™”๋ฉด)

<VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="application.LoginController"> <Label fx:id="userLabel" text="์‚ฌ์šฉ์ž ์ •๋ณด ์—†์Œ"/> </VBox>
XML
๋ณต์‚ฌ

MainController.java (๋ฐ์ดํ„ฐ ์ „๋‹ฌ)

package application; import java.io.IOException; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class MainController { @FXML private void handleLogin(ActionEvent event) throws IOException { // FXML ๋กœ๋“œ FXMLLoader loader = new FXMLLoader(getClass().getResource("Login.fxml")); Parent root = loader.load(); // ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ€์ ธ์˜ค๊ธฐ LoginController loginController = loader.getController(); // ๋ฐ์ดํ„ฐ ์ „๋‹ฌ (์˜ˆ: "admin" ์‚ฌ์šฉ์ž ID ์ „๋‹ฌ) loginController.setUserData("admin"); // ํ™”๋ฉด ์ „ํ™˜ Stage stage = (Stage) ((javafx.scene.Node) event.getSource()).getScene().getWindow(); stage.setScene(new Scene(root)); stage.show(); } }
Java
๋ณต์‚ฌ

LoginController.java (๋ฐ์ดํ„ฐ ๋ฐ›๊ธฐ ๋ฐ UI ์—…๋ฐ์ดํŠธ)

package application; import javafx.fxml.FXML; import javafx.scene.control.Label; public class LoginController { @FXML private Label userLabel; // ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ public void setUserData(String userId) { userLabel.setText("ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค, " + userId + "๋‹˜!"); } }
Java
๋ณต์‚ฌ

4. ๊ณผ์ • ์ •๋ฆฌ

MainController์—์„œ FXMLLoader๋ฅผ ์‚ฌ์šฉํ•ด Login.fxml์„ ๋กœ๋“œ
getController()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ LoginController์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์˜ด
LoginController์˜ setUserData(String userId) ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
LoginController๋Š” ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ Label ๋“ฑ์— ๋ฐ˜์˜ํ•˜์—ฌ UI๋ฅผ ์—…๋ฐ์ดํŠธ
์ด ๋ฐฉ์‹์€ ๋‹จ์ˆœํ•˜๊ณ  ์ง๊ด€์ ์ด๋ฉฐ, ํ™”๋ฉด ์ „ํ™˜ ์‹œ ๋‹จ๋ฐœ์„ฑ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์— ๊ฐ€์žฅ ์ ํ•ฉํ•˜๋‹ค.

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์ด์šฉํ•œ ์ „์—ญ ๋ฐ์ดํ„ฐ ๊ณต์œ 

์‹ฑ๊ธ€ํ†ค ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์—ฌ๋Ÿฌ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•

1. ๊ฐœ๋…

โ€ข
์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์ „์—ญ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.
โ€ข
์—ฌ๋Ÿฌ ํ™”๋ฉด์—์„œ ๋ฐ์ดํ„ฐ(์˜ˆ: ๋กœ๊ทธ์ธ ์ •๋ณด, ์‚ฌ์šฉ์ž ์„ค์ • ๋“ฑ)๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ„์— ์ฃผ๊ณ ๋ฐ›์•„์•ผ ํ•  ๋•Œ ํŽธ๋ฆฌํ•˜๋‹ค.

2. ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ์ „๋‹ฌ ๊ณผ์ •

์‹ฑ๊ธ€ํ†ค ํด๋ž˜์Šค ์ƒ์„ฑ

โ€ข
๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ „์—ญ ๊ฐ์ฒด ์—ญํ• ์„ ํ•œ๋‹ค.
โ€ข
ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๋Š” getter/setter ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

MainController์—์„œ ๋ฐ์ดํ„ฐ ์ €์žฅ

โ€ข
์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•˜๋ฉด DataStorage์— ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

LoginController์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

โ€ข
DataStorage์—์„œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ UI์— ๋ฐ˜์˜ํ•œ๋‹ค.

3. ์ฝ”๋“œ ์˜ˆ์ œ

DataStorage.java (์‹ฑ๊ธ€ํ†ค ๋ฐ์ดํ„ฐ ์ €์žฅ ํด๋ž˜์Šค)

package application; public class DataStorage { private static DataStorage instance; private String username; private int userAge; private DataStorage() {} // ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ ๋ถˆ๊ฐ€ (private ์ƒ์„ฑ์ž) // ์‹ฑ๊ธ€ํ†ค ์ธ์Šคํ„ด์Šค ๊ฐ€์ ธ์˜ค๊ธฐ public static DataStorage getInstance() { if (instance == null) { instance = new DataStorage(); } return instance; } // ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฉ”์†Œ๋“œ public void setUserData(String username, int userAge) { this.username = username; this.userAge = userAge; } // ์‚ฌ์šฉ์ž ์ด๋ฆ„ ๊ฐ€์ ธ์˜ค๊ธฐ public String getUsername() { return username; } // ์‚ฌ์šฉ์ž ๋‚˜์ด ๊ฐ€์ ธ์˜ค๊ธฐ public int getUserAge() { return userAge; } // ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” (๋กœ๊ทธ์•„์›ƒ ์‹œ) public void clearData() { username = null; userAge = 0; } }
Java
๋ณต์‚ฌ

MainController.java (๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ํ™”๋ฉด ์ด๋™)

package application; import java.io.IOException; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class MainController { @FXML private void handleLogin(ActionEvent event) throws IOException { // ์‚ฌ์šฉ์ž ์ •๋ณด ์ €์žฅ DataStorage.getInstance().setUserData("admin", 25); // ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ์ด๋™ FXMLLoader loader = new FXMLLoader(getClass().getResource("Login.fxml")); Parent root = loader.load(); Stage stage = (Stage) ((javafx.scene.Node) event.getSource()).getScene().getWindow(); stage.setScene(new Scene(root)); stage.show(); } }
Java
๋ณต์‚ฌ

LoginController.java (๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ UI ์—…๋ฐ์ดํŠธ)

package application; import javafx.fxml.FXML; import javafx.scene.control.Label; public class LoginController { @FXML private Label userLabel; @FXML public void initialize() { // DataStorage์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ String username = DataStorage.getInstance().getUsername(); int userAge = DataStorage.getInstance().getUserAge(); if (username != null) { userLabel.setText("ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค, " + username + "๋‹˜! ๋‚˜์ด: " + userAge); } else { userLabel.setText("์‚ฌ์šฉ์ž ์ •๋ณด ์—†์Œ"); } } }
Java
๋ณต์‚ฌ
initialize()
JavaFX ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค.
FXML ๋ฅผ ํ†ตํ•ด์„œ ํ™”๋ฉด์ด ์ ์šฉ๋  ๋•Œ, FXML ๊ณผ ์—ฐ๊ฒฐ๋œ ์ปจํŠธ๋กค๋ ˆ์˜ ์ด ์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ € ํ™”๋ฉด์— ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์š”์ฒญ์„ ํ•˜์—ฌ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ์— ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

4. ๊ณผ์ • ์ •๋ฆฌ

DataStorage ์‹ฑ๊ธ€ํ†ค ํด๋ž˜์Šค์—์„œ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ
MainController์—์„œ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ DataStorage์— ์ €์žฅ
LoginController์—์„œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ UI๋ฅผ ์—…๋ฐ์ดํŠธ
ํ•„์š”ํ•  ๋•Œ clearData()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” ๊ฐ€๋Šฅ (์˜ˆ: ๋กœ๊ทธ์•„์›ƒ ์‹œ)
์ด ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ ํ™”๋ฉด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด ์œ ์ง€๋ณด์ˆ˜์— ์œ ๋ฆฌํ•˜๋‹ค!