๐ฅ ๊ธฐ๋ฅ

๐ง ์ฝ๋
package team_project;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
class FootballPlayer { // ์ถ๊ตฌ์ ์ ํด๋์ค
private int pk; // PK, ๊ฐ์ฒด ๊ณ ์ id๋ก ์ฌ์ฉ
private String name; // ์ ์ ์ด๋ฆ
private String position; // ์ ์ ํฌ์ง์
private int totalPower; // ์ ์ ๋ฅ๋ ฅ์น
private int price; // ๊ฐ๊ฒฉ
private int ea; // ์๋
FootballPlayer(int pk, String name, String position, int totalPower, int price, int ea) {
this.pk = pk;
this.name = name;
this.position = position; // FW, MF, DF, GK
this.totalPower = totalPower;
this.price = price;
this.ea = ea;
}
public int getPk() {
return pk;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public int getTotalPower() {
return totalPower;
}
public void setTotalPower(int totalPower) {
this.totalPower = totalPower;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getEa() {
return ea;
}
public void setEa(int ea) {
this.ea = ea;
}
@Override // ์ ์ ํํ
PK ์๋ณด์ด๋๋ก ์ค์
public String toString() {
String ret = "[" + position + " "+ name + " ๋ฅ๋ ฅ์น : " + totalPower + ", " + price+"$";
if (this.ea == 0) {
return ret + ", ์ฌ๊ณ ์์]";
} else {
return ret + ", ์๋=" + ea + "]";
}
}
public void sell(int cnt) {
this.ea -= cnt;
}
public static Comparator<FootballPlayer> byPrice = new Comparator<FootballPlayer>() {
@Override
public int compare(FootballPlayer p1, FootballPlayer p2) {
return p2.price - p1.price;
}
};
public static Comparator<FootballPlayer> byTotalPower = new Comparator<FootballPlayer>() {
@Override
public int compare(FootballPlayer p1, FootballPlayer p2) {
return p2.totalPower - p1.totalPower;
}
};
public static Comparator<FootballPlayer> byPk = new Comparator<FootballPlayer>() {
@Override
public int compare(FootballPlayer p1, FootballPlayer p2) {
return p2.pk - p1.pk;
}
};
public static Comparator<FootballPlayer> byName = new Comparator<FootballPlayer>() {
@Override
public int compare(FootballPlayer p1, FootballPlayer p2) {
return p2.name.compareTo(p1.name);
}
};
}
public class FootballMarket {
public static int PK = 1001; // ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋๋ง๋ค ++
public final static int MANAGERMODE = 231121;
public static Scanner sc = new Scanner(System.in);
public static ArrayList<FootballPlayer> datas = new ArrayList<FootballPlayer>();
/*
* Utils
*/
// ๋ฌธ์์ด ์
๋ ฅ๋ฐ๊ธฐ
public static String inputString(String msg) {
System.out.print(msg);
return sc.next();
}
// ํฌ์ง์
์
๋ ฅ๋ฐ๊ธฐ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ
public static String getPosition(String msg) {
System.out.print(msg);
System.out.print("(FW / MF / DF / GK) >> ");
while (true) {
String position = sc.next();
if (position.equals("FW") || position.equals("MF") || position.equals("DF") || position.equals("GK")) {
return position;
}
System.out.println("ํฌ์ง์
์ FW, MF, DF, GK ์ค์๋ง ์
๋ ฅํ์ค ์ ์์ต๋๋ค.");
System.out.print("๋ค์ ์
๋ ฅํด์ฃผ์ธ์ >> ");
}
}
// Y or N ์
๋ ฅ๋ฐ๊ธฐ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ
public static String getAnswer(String msg) {
System.out.print(msg);
while (true) {
String answer = sc.next();
if (answer.equals("Y") || answer.equals("N")) {
return answer;
}
System.out.println("Y ๋๋ N ๋ง ์
๋ ฅ ๊ฐ๋ฅํฉ๋๋ค.");
System.out.print("๋ค์ ์
๋ ฅํด์ฃผ์ธ์ >> ");
}
}
/*
* Football Player Buy
*/
public static void buy(ArrayList<FootballPlayer> players) {
int eaCnt = 0;
for (int i = 0; i < players.size(); i++) {
eaCnt += players.get(i).getEa();
}
if (eaCnt <= 0) {
System.out.println("๋ฑ๋ก๋ ๋ชจ๋ ์ ์์ ์ฌ๊ณ ๊ฐ ์์ต๋๋ค.");
return;
}
while (true) {
int choiceNum = inputNum("๊ตฌ๋งคํ ์ ์ ๋ฒํธ ์
๋ ฅ ", 1, players.size());
if (players.get(choiceNum - 1).getEa() <= 0) {
System.out.println("ํด๋น์ ์ ์ฌ๊ณ ๊ฐ ์์ต๋๋ค.");
continue;
}
int cnt = inputNum("๊ตฌ์
ํ ์๋ ์
๋ ฅ ", 1, players.get(choiceNum - 1).getEa());
System.out.println(cnt + "๊ฐ๋ฅผ ๊ตฌ์
ํ์๊ฒ ์ต๋๊น ?");
String answer = getAnswer("Y or N >> ");
if (answer.equals("Y")) {
System.out.println(players.get(choiceNum - 1).getName() + " " + cnt + "๊ฐ ๊ตฌ์
์๋ฃ!");
players.get(choiceNum - 1).sell(cnt);
} else {
System.out.println("๊ตฌ์
์ทจ์");
}
break;
}
}
/*
* Manager Mode
*/
// ์ ์ ๋ชจ๋ ์ถ๋ ฅ ( ์ ๋ณด ๋ณ๊ฒฝ์ด๋ ์ญ์ ์์ ๋ชฉ๋ก์ ๋์ฐ๊ธฐ ์ํจ)
public static void printAllFootballPlayer() {
for (int i = 0; i < datas.size(); i++) {
System.out.println("[PK-" + datas.get(i).getPk() + "] " + datas.get(i));
}
}
// ๊ด๋ฆฌ์ ๋ชจ๋ ์คํ
public static void execManagerMode() {
System.out.println("๊ด๋ฆฌ์ ๋ชจ๋์
๋๋ค");
printManagermode();
}
// ๊ด๋ฆฌ์ ๋ฉ์ธ ๋ฉ๋ด
public static void printManagermode() {
while (true) {
System.out.println("1. ์ ์ ์ถ๊ฐ");
System.out.println("2. ์ ์ ์ ๋ณด ๋ณ๊ฒฝ");
System.out.println("3. ์ ์ ์ญ์ ");
System.out.println("0. ๊ด๋ฆฌ์ ๋ชจ๋ ์ข
๋ฃ");
if (chooseManagermenu() == 0) {
break;
}
}
}
// ๊ด๋ฆฌ์ ๋ฉ์ธ ๋ฉ๋ด ๋ฒํธ ์ ํ
public static int chooseManagermenu() {
int action = inputNum("๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์", 0, 3);
if (action == 1) { // ์ ์ ์ถ๊ฐ
addFootballPlayer();
} else if (action == 2) { // ์ ์์ ๋ณด ๋ณ๊ฒฝ
updateFootballPlayer();
} else if (action == 3) { // ์ ์ ์ญ์
deleteFootballPlayer();
} else if (action == 0) { // ์ฌ์ฉ์ํ๋ฉด์ผ๋ก ์ด๋
System.out.println("๊ด๋ฆฌ์๋ชจ๋๋ฅผ ์ข
๋ฃํฉ๋๋ค...");
}
return action;
}
// ๊ฐ๊ฒฉ ๋ณ๊ฒฝ
public static void UpdatePrice(int i) {
while (true) {
int price = inputNum("์๋ก์ด ๊ฐ๊ฒฉ์ ์
๋ ฅํด์ฃผ์ธ์", 1000, 10000);
if (price != datas.get(i).getPrice()) {
datas.get(i).setPrice(price);
System.out.println(datas.get(i).getName() + "์ ์ " + datas.get(i).getPrice() + "์ ๋ณ๊ฒฝ์๋ฃ!");
break;
} else {
System.out.println("๊ฐ์ ๊ฐ๊ฒฉ์ ์
๋ ฅํ์ค ์ ์์ต๋๋ค.");
}
}
}
// ๋ฅ๋ ฅ์น ๋ณ๊ฒฝ
public static void UpdateTotalPower(int i) {
while (true) {
int power = inputNum("์๋ก์ด ๋ฅ๋ ฅ์น๋ฅผ ์
๋ ฅํด์ฃผ์ธ์", 40, 100);
if (power != datas.get(i).getTotalPower()) {
datas.get(i).setTotalPower(power);
System.out.println(datas.get(i).getName() + "์ ์ ๋ฅ๋ ฅ์น " + datas.get(i).getTotalPower() + " ๋ณ๊ฒฝ์๋ฃ!");
break;
} else {
System.out.println("๊ฐ์ ๋ฅ๋ ฅ์น๋ ์
๋ ฅํ์ค ์ ์์ต๋๋ค.");
}
}
}
// ์๋ ๋ณ๊ฒฝ
public static void UpdateEa(int i) {
while (true) {
int ea = inputNum("์๋ก์ด ์๋์ ์
๋ ฅํด์ฃผ์ธ์", 1, 10);
if (ea != datas.get(i).getEa()) {
datas.get(i).setEa(ea);
System.out.println(datas.get(i).getName() + "์ ์ ์ฌ๊ณ " + datas.get(i).getEa() + "๊ฐ ๋ณ๊ฒฝ์๋ฃ!");
break;
} else {
System.out.println("๊ฐ์ ์๋์ผ๋ก๋ ์
๋ ฅํ์ค ์ ์์ต๋๋ค.");
}
}
}
// PK ์ ํจ์ฑ ๊ฒ์ฌ
public static int inputIndex() {
int i = 0;
while (true) {
try {
int firstPK = datas.get(0).getPk(); // datas๋ฆฌ์คํธ๋ ์๋ณธ๋ฐ์ดํฐ๋ก ์์๋ฅผ ์์ง์๊ณ PK๋ ํญ์ ์ฆ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์ถ๊ฐ๋ฉ๋๋ค.
int lastPK = datas.get(datas.size() - 1).getPk();
int changePlayer = inputNum("์ ์์ PK๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ ", firstPK, lastPK);// ์์ , ํ์ง =>
for (i = 0; i < datas.size(); i++) { // datas๋ฆฌ์คํธ์ 0๋ฒ์งธ ์ธ๋ฑ์ค PK๊ฐ ๋ถํฐ
if (datas.get(i).getPk() == changePlayer) { // datas๋ฆฌ์คํธ์ ๋ง์ง๋ง ์ธ๋ฑ์ค PK๊ฐ์
System.out.println("์ ํ๋ ์ ์ : [" + datas.get(i).getName() + "]");
return i; // datas๋ฆฌ์คํธ์ size()-1์ ํด์ฃผ์ด์ผ
// ๋ฆฌ์คํธ์ ๋ง์ง๋ง ์ธ๋ฑ์ค PK๊ฐ์ด ๋ฉ๋๋ค.
}
}
System.out.println("์ ํจํ์ง ์์ PK์
๋๋ค.");
} catch (Exception e) {
System.out.println("์ ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์");
sc.nextLine();
}
}
}
// ์ ์ ์ ๋ณด ๋ณ๊ฒฝ
public static void updateFootballPlayer() {
if (!checkListEmpty()) {
printAllFootballPlayer();
int i = inputIndex();
System.out.println("1. ๊ฐ๊ฒฉ ๋ณ๊ฒฝ");
System.out.println("2. ๋ฅ๋ ฅ์น ๋ณ๊ฒฝ");
System.out.println("3. ์๋ ๋ณ๊ฒฝ");
int select = inputNum("์ด๋ค์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ์๊ฒ ์ต๋๊น?", 1, 3);
if (select == 1) {
UpdatePrice(i);
} else if (select == 2) {
UpdateTotalPower(i);
} else if (select == 3) {
UpdateEa(i);
}
}
}
// ๋ฐฐ์ด๋ฆฌ์คํธ๊ฐ ๋น์ด์๋์ง ๊ฒ์ฌ
public static boolean checkListEmpty() {
if (datas.size() <= 0) {
System.out.println("๋ฑ๋ก๋ ์ ์๊ฐ ์์ต๋๋ค...");
return true;
}
return false;
}
// ์ ์ ์ญ์
public static void deleteFootballPlayer() {
if (!checkListEmpty()) {
printAllFootballPlayer();
int i = inputIndex();
String name = datas.get(i).getName();
datas.remove(i);
System.out.println(name + " ์ ์์ญ์ ์ฑ๊ณต!");
}
}
// ์ ์ ์ถ๊ฐ
public static void addFootballPlayer() {
System.out.println("์ ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.");
String name = inputString("์ด๋ฆ์ ์
๋ ฅํด์ฃผ์ธ์ >> ");
String position = getPosition("ํฌ์ง์
์ ์
๋ ฅํด์ฃผ์ธ์");
int totalPower = inputNum("๋ฅ๋ ฅ์น๋ฅผ ์
๋ ฅํด์ฃผ์ธ์", 40, 100);
int price = inputNum("๊ฐ๊ฒฉ์ ์
๋ ฅํด์ฃผ์ธ์", 1000, 10000);
int ea = inputNum("์๋์ ์
๋ ฅํด์ฃผ์ธ์", 1, 10);
datas.add(new FootballPlayer(PK++, name, position, totalPower, price, ea));
System.out.println(name + " ์ ์ " + ea + "๊ฐ ๋ฑ๋ก ์ฑ๊ณต!");
}
/*
* Functions
*/
// ๊ฐ๊ฒฉ๋ณ ์ถ๋ ฅ
public static void printByPrice() {
if (!checkListEmpty()) {
ArrayList<FootballPlayer> tmpDatas = new ArrayList<FootballPlayer>(datas);
tmpDatas.sort(FootballPlayer.byPrice);
for (int i = 0; i < tmpDatas.size(); i++) {
System.out.println((i + 1) + ". " + tmpDatas.get(i));
}
buy(tmpDatas);
}
}
// ๋ฅ๋ ฅ์น๋ณ ์ถ๋ ฅ
public static void printByTotalPower() {
if (!checkListEmpty()) {
ArrayList<FootballPlayer> tmpDatas = new ArrayList<FootballPlayer>(datas);
tmpDatas.sort(FootballPlayer.byTotalPower);
for (int i = 0; i < tmpDatas.size(); i++) {
System.out.println((i + 1) + ". " + tmpDatas.get(i));
}
buy(tmpDatas);
}
}
public static void printByMainPosition(ArrayList<FootballPlayer> players, String position) { // ํฌ์ง์
์
๋ ฅ // ๋ฐฐ์ด ๋ฃ๊ธฐ
// ๋ฐฐ์ด ํ๋ ๋ง๋ ๋ค tmpDatas
ArrayList<FootballPlayer> tmpDatas = new ArrayList<FootballPlayer>();
int i = 0;
for (FootballPlayer player : players) {
if (player.getPosition().equals(position)) { // ํฌ์ง์
์ ์ ํํ๋ค
tmpDatas.add(player); // ์ ํ๋ ํฌ์ง์
์ ๋ฐฐ์ด ์์ผ๋ก ๋ฃ๋๋ค
System.out.println((i + 1) + ". " + player); // ์ ํ๋ ํฌ์ง์
์ถ๋ ฅ
i++;
}
}
buy(tmpDatas);
}
public static void printByMainPositionPage() {
System.out.println("ํฌ์ง์
์ ์ ํํด์ฃผ์ธ์"); // ํฌ์ง์
๋ฒํธ๋ก ์ ํ
System.out.println("1. FW");
System.out.println("2. MF");
System.out.println("3. DF");
System.out.println("4. GK");
System.out.println("0. ์ข
๋ฃ");
}
// ํฌ์ง์
๋ณ ์ถ๋ ฅ
public static void printByPosition() { // ์ ์ ํฌ์ง์
๋ณ๋ก ์ถ๋ ฅํ๊ธฐ
while (true) {
printByMainPositionPage(); // ํฌ์ง์
์ ํ์ฐฝ
int action = inputNum("๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์", 0, 4); // ํฌ์ง์
๋ฒํธ๋ก ์ ํ
if (action == 0) {
System.out.println("ํฌ์ง์
์ ํ์ ๋๊ฐ๋๋ค."); // ํฌ์ง์
์ ํ ์ข
๋ฃ
break;
} else {
String selectedPosition = ""; // ์ ํ๋ ํฌ์ง์
์ ์ ์ฅํ ๋ณ์
// ์ ํ๋ ํฌ์ง์
์ค์
if (action == 1) {
selectedPosition = "FW"; // ๋ชจ๋ํ๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ ํํ FW ์ ํ
} else if (action == 2) {
selectedPosition = "MF"; // MF ์ ํ
} else if (action == 3) {
selectedPosition = "DF";
} else if (action == 4) {
selectedPosition = "GK";
}
System.out.println(selectedPosition + " ํฌ์ง์
์ ์ ๋ชฉ๋ก"); // ์ ํ๋ ํฌ์ง์
์ถ๋ ฅ
printByMainPosition(datas, selectedPosition); // ์ ์ ์ถ๋ ฅ
}
}
}
public static void searchByName() {
if (!checkListEmpty()) {
String name = inputString("์ ์ ์ด๋ฆ์ ์
๋ ฅํด์ฃผ์ธ์ >> ");
boolean found = false;
for (FootballPlayer data : datas) {
if (data.getName().contains(name)) { // "ํธ๋ ๋".contains("ํธ");
System.out.println(data);
found = true;
}
}
if (!found) {
System.out.println("ํด๋น ์ด๋ฆ์ ๊ฐ์ง ์ ์๊ฐ ์์ต๋๋ค.");
}
}
}
// ๋ฒํธ ์
๋ ฅ๋ฐ๊ธฐ ๋ฐ ๋ฒ์ ์ ํจ์ฑ ๊ฒ์ฌ (์์ , ํ์ง => ์ค๋ฒ๋ก๋ฉ ์ญ์ => ๊ฒฐํฉ๋ ↓, ์์ง๋ ↑ => ์ข์ ์ฝ๋)
public static int inputNum(String msg, int min, int max) {
System.out.print(msg); // min ์ต์๊ฐ, max์ต๋๊ฐ์ ์ฌ์ฉ์์๊ฒ ์ถ๋ ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋ ๋ณ์
String rangeStr;
if (min == max) {
rangeStr = "( " + min + " )";
} else {
rangeStr = "(" + min + " ~ " + max + ")";
}
System.out.print(rangeStr + " >> ");
while (true) {
try {
int chooseNum = sc.nextInt();
if (chooseNum >= min && chooseNum <= max) {
return chooseNum;
}
else if (chooseNum == MANAGERMODE) {
return chooseNum;
}
else {
System.out.print(rangeStr + " ์
๋ ฅ ๊ฐ๋ฅํฉ๋๋ค. >>");
}
} catch (Exception e) {
System.out.print("'์ ์'๋ง ์
๋ ฅ๊ฐ๋ฅํฉ๋๋ค. >>");
sc.nextLine();
}
}
}
/*
* Main Page
*/
public static void printMainPage() {
System.out.println("=====================");
System.out.println("โฝ Football ์ด์ ์์ฅ โฝ");
System.out.println("=====================");
System.out.println("1. ๊ฐ๊ฒฉ๋ณ ์ถ๋ ฅ");
System.out.println("2. ๋ฅ๋ ฅ์น๋ณ ์ถ๋ ฅ");
System.out.println("3. ํฌ์ง์
๋ณ ์ถ๋ ฅ");
System.out.println("4. ๊ฒ์ ๊ธฐ๋ฅ");
System.out.println("0. ํ๋ก๊ทธ๋จ ์ข
๋ฃ");
System.out.println("======================");
}
public static int controller() {
int select = inputNum("๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์ ", 0, 4);
if (select == 0) {
System.out.println("ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํฉ๋๋ค..");
} else if (select == 1) {
// ๊ฐ๊ฒฉ๋ณ ์ถ๋ ฅ
printByPrice();
} else if (select == 2) {
// ๋ฅ๋ ฅ์น๋ณ ์ถ๋ ฅ
printByTotalPower();
} else if (select == 3) {
// ํฌ์ง์
๋ณ ์ถ๋ ฅ
printByPosition();
} else if (select == 4) {
// ๊ฒ์ ๊ธฐ๋ฅ
searchByName();
} else if (select == MANAGERMODE) { //231121
// ๊ด๋ฆฌ์ ๋ชจ๋
execManagerMode();
} else if (select < 0 || select > 4) {
// validation ์ฒ๋ฆฌ
System.out.println("์ ํจํ์ง ์์ ์
๋ ฅ์
๋๋ค\n๋ค์ ์
๋ ฅํด์ฃผ์ธ์\n");
}
return select;
}
public static void run() {
while (true) {
printMainPage();
int select = controller();
if (select == 0) {
break;
}
}
}
public static void main(String[] args) {
datas.add(new FootballPlayer(PK++, "ํธ๋ ๋", "FW", 89, 8700, 5));
datas.add(new FootballPlayer(PK++, "๋ฉ์", "FW", 91, 8600, 4));
datas.add(new FootballPlayer(PK++, "์ํฅ๋ฏผ", "FW", 83, 8300, 7));
datas.add(new FootballPlayer(PK++, "๊น๋๋ฐฐ", "MF", 85, 8500, 2));
datas.add(new FootballPlayer(PK++, "๋ฐ์ง์ฑ", "MF", 81, 8100, 3));
datas.add(new FootballPlayer(PK++, "์ด๊ฐ์ธ", "MF", 77, 7700, 7));
datas.add(new FootballPlayer(PK++, "์๋ธ๋ผ", "DF", 83, 8300, 6));
datas.add(new FootballPlayer(PK++, "๊น๋ฏผ์ฌ", "DF", 79, 7900, 4));
datas.add(new FootballPlayer(PK++, "๋ง๋๋", "DF", 84, 8400, 3));
datas.add(new FootballPlayer(PK++, "์๋ฒ ์ค", "DF", 83, 8300, 3));
datas.add(new FootballPlayer(PK++, "์ด์ด์ฌ", "GK", 83, 8300, 3));
run();
}
}
โก ํ๊ธฐ
์ฒ์์ผ๋ก ๊ฐ์ ์ญํ ์ ๋ถ๋ดํด์ ์งํํ๋ค. ๋๋ ๊ด๋ฆฌ์๋ชจ๋๋ฅผ ๋ด๋นํ๋๋ฐ ์๊ฐ๋ณด๋ค ์์ฑํ ์ฝ๋๊ฐ ๋ง์์ ๋นํฉํ์ง๋ง
์์ด ๋ง์ ๋งํผ ์ค๋ ฅ์ด ํฅ์๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๊ณ ์ํ๋ค.
๋ ๊ฐ์ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ๋ฉด์ ํผ๋๋ฐฑ์ ํ๋ ๊ณ ์ณ์ผ ํ ์ ์ ๋ฐ๋ก๋ฐ๋ก ๋๋ ์ ์์ด์ ์ข์๋ค.
'Team Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Spring] Spring Security๋ฅผ ํ์ฉํ ์์ ๋ก๊ทธ์ธ (2/3) (0) | 2024.04.01 |
|---|---|
| [Spring] Spring Security๋ฅผ ํ์ฉํ ์์ ๋ก๊ทธ์ธ (1/3) (0) | 2024.03.29 |
| [Spring] SMS ์ธ์ฆ ๊ธฐ๋ฅ Controller ์ด๊ด์์ (0) | 2024.03.11 |
| [JSP] ์ปค์คํ ํ๊ทธ๋ฅผ ์ด์ฉํ์ฌ nav ๊ตฌ์ฑ (0) | 2024.01.29 |
| [Java] ์ฐ์์ธ ์์ ํ๋ก๊ทธ๋จ (1) | 2023.12.11 |
๋๊ธ