Bibi's DevLog ๐ค๐
[Java] ํ๊ธ์๊ณ ๋ฐ๋ผ ๋ง๋ค๊ธฐ - ์ด์ฐจ์๋ฐฐ์ด, ํ์ฌ์๊ฐ ๊ตฌํ๊ธฐ, switch-case ์ฌ๋ฌ ์กฐ๊ฑด + ์์ ์ฝ๋ ๋ณธ๋ฌธ
๐ฅ BE ๋ฐฑ์๋/Java ์๋ฐ
[Java] ํ๊ธ์๊ณ ๋ฐ๋ผ ๋ง๋ค๊ธฐ - ์ด์ฐจ์๋ฐฐ์ด, ํ์ฌ์๊ฐ ๊ตฌํ๊ธฐ, switch-case ์ฌ๋ฌ ์กฐ๊ฑด + ์์ ์ฝ๋
๋น๋น bibi 2020. 11. 16. 17:46์์ ์ฌ์ดํธ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ํ๋ ํ๊ธ ์๊ณ๋ฅผ ๋ฐ๋ผ ๋ง๋๋ ์์ ์ ๋๋ค.
์๋ฐ ์ด์ฐจ์๋ฐฐ์ด์ ํ์ฉํด ํ๊ธ ์๊ณ๋ฅผ ๋ฐ๋ผ ๋ง๋๋ ์์ ์
๋๋ค.
์ ๋ ์ด์ฐจ์๋ฐฐ์ด์ ๋จผ์ ๊ณต๋ถํ ๋ค์ ๊ตฌํ - ๋ด์ฉ
์ ์ฒด ์ฝ๋๋ ๋งจ ์๋์ ์์ต๋๋ค.
ํด๋์ค : HangeulClock
-
main()
- HangeulClock๊ฐ์ฒด๋ฅผ ์์ฑ
- Timer, TimerTask ๊ฐ์ฒด ์์ฑ
- TimerTask task ๋ด์
run()
๋ฉ์๋์ ๋ฐ๋ณต ์คํํ ๊ตฌ๋ฌธ์ ์ ๋ ฅ. - showHourMinute ๋ฉ์๋์ ๋ฆฌํด๊ฐ(์ด์ฐจ์๋ฐฐ์ด clockResult)์ ๋ฐ์์ด
- printHangeulClock์ ํตํด ๋ฐ์์จ ๋ฆฌํด๊ฐ์ ์ถ๋ ฅ
- TimerTask task ๋ด์
scheduler.scheduleAtFixedRate(task, 1000, 60000);
๋ก ์ ์ํ task๋ฅผ 1์ด ๋ค์, 1๋ถ๋ง๋ค ๋ฐ๋ณต์คํ.- Timer, TimerTask, scheduleAtFixedRate() (์๋ฐ ์ค์ผ์ค๋ฌ, ๋ฐ๋ณต์คํ) ์ ๋ํด ๊ณต๋ถํ ๋ด์ฉ์ ์ฌ๊ธฐ์ ์ ๋ฆฌ.
-
(์ฃผ์์ฒ๋ฆฌ๋ clearScreen()) (= ๋ฏธ๋ จ..)
- ๋ฐ๋ณต ์คํ ๋ ๋๋ง๋ค ์ฝ์์ฐฝ์ ๋น์ฐ๊ณ ๋ณด์ฌ์ฃผ๊ณ ์ถ์๋๋ฐ, ๊ตฌ๊ธ๋ง์ผ๋ก ์์๋ธ ์ด๋ฐ ์ ๋ฐ ๋ฐฉ๋ฒ์ ๋ค ์๋ํ๋๋ฐ ์ ๋๋ค.ใ ใ
-
showBackground()
- ๋ง ๊ทธ๋๋ก ๋ฐฐ๊ฒฝ์ ์ฐ๋ ์ด์ฐจ์๋ฐฐ์ด์ด ์๋ ๋ฉ์๋
- ์ด ๋ฐฐ๊ฒฝ์ ๋๊ณ , ํ์ฌ ์๊ฐ์ ๋ง๋ ํ๊ธ ์๊ฐ์ ๊ฐ ์ ์ ๋์ ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.
-
takdHangeul()
- ํ๊ธ ์, ํ๊ธ ๋ถ์ด ๋ค์ด ์๋ ์ด์ฐจ์๋ฐฐ์ด์ด ์๋ ๋ฉ์๋
- ํ๊ธ์๊ณ ์ฌ์ดํธ์ ํํ ๊ทธ๋๋ก ๋ฐ๋ผํ๋ค.
-
printHangeulClock()
- ์ ๋ชฉ ์ถ๋ ฅ
- main๋ฉ์๋์์ ๋ฆฌํด๊ฐ์ ๋ฐ์ ํ๊ธ์๊ณ๋ฅผ ์ต์ข ์ถ๋ ฅํ๋ ๋ฉ์๋
- ์ข ๋ ์์ ์์ํ์ ์ํด (..) ์ด์ฐจ์๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ฐ์ธ ์ถ๋ ฅํ๋ค.
-
getCurrentTime()
- ํ์ฌ ์๊ฐ์ ๊ฐ์ ธ์ค๊ณ ์ํ๋ ํํ๋ก ๋ง๋๋ ๋ฉ์๋
- import java.time.LocalDateTime; ๊ณผ import java.time.format.DateTimeFormatter; ํ์
- ์๋ฐ ํ์ฌ์๊ฐ์ผ๋ก ๊ตฌ๊ธ๋งํด ๋์์ ๋ฐ์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- ๋ฆฌํด๊ฐ hourMinute์ ํํ๋ 00:00 .
-
showHourMinute()
- getCurrentTime()์์ 00:00 ํํ์ ์๊ฐ์, takeHangeul()์์ ํ๊ธ ์&๋ถ ๋ฐ์ดํฐ๋ฅผ, showBackground()์์ ์ถ๋ ฅํ ๋ฐฐ๊ฒฝ์ ๊ฐ์ ธ์จ๋ค.
- .split(":")์ ํตํด ํ์ฌ ์๊ฐ๊ณผ ํ์ฌ ๋ถ์ ๋ฐ๋ก ๊ตฌํ๋ค
- switch๋ฌธ
- ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์๋ putHangeulHours()์์ ํ๊ธ ์๊ฐ์, putHangeulMinutes()์์ ํ๊ธ ๋ถ์ ๋ฐ์์ค๋๋ก ํ๋ค.
- ๊ทธ๋ฌ๋ ํ๊ธ์๊ณ๋ฅผ ์์ธํ ๋ณด๋ฉด ๋งจ ์ผ์ชฝ ์ค์ '์', '์ ', '์ค' ๊ฐ ์๋ค. ์ง์์ปจ๋ 00:00์ผ ๋ '์์ '์ด ํ์๋๊ณ , 12:00์ผ ๋ "์ ์ค"๊ฐ ํ์๋๋ ๊ฒ ๊ฐ๋ค(00:00, 12:00์ ๋ค์ด๊ฐ ๋ณธ ์ ์ด ์์ด์ ํ์ธ์ ๋ชป ํ๋ค). ๋ฐ๋ผ์ ์ถ๋ ฅํํ๊ฐ ์์ธ์ ์ธ ์์ ๋ ๊ฒฝ์ฐ์๋ง case๋ฅผ ์ ์ฉํด ์ฃผ์๋ค.
-
putHangeulHours()
- ํ์ฌ ์๊ฐ์ ๋ง๋ ํ๊ธ ์๊ฐ ๊ฐ์ clockFormat(showBackground()์ ์ด์ฐจ์๋ฐฐ์ด)์ ๋ฃ์ด ์ค๋ค.
- ์๋ฅผ ๋ค์ด 01์ ๋๋ 13์์ด๋ฉด "ํ", "์" ๋ฅผ ๋ฃ์ด์ค๋ค.
- "์"๋ถ๋ถ์ ๊ณตํต์ด๋ผ ๋ฉ์๋๊ฐ ๋๋๊ธฐ ์ง์ ์ ํ๋ฒ๋ง ์ ์ด์ค๋ค.
- switch-case๋ฌธ์ ์กฐ๊ฑด์ด ์ฌ๋ฌ ๊ฐ์ผ ๋ ์ฌ์ฉ๋ฐฉ๋ฒ์ ๊ฒ์ํด์ ์ฐธ๊ณ ํ๋ค(์ฝ๋๊ฐ ๋๋ฌด ๊ธธ์ด์ ธ์). switch case ์กฐ๊ฑด ์ฌ๋ฌ๊ฐ๋ก ๊ตฌ๊ธ๋งํด ๋์์ ๋ฐ์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
-
putHangeulMinutes()
- ํ์ฌ ๋ถ์ ๋ง๋ ํ๊ธ ๋ถ ๊ฐ์ clockFormat(showBackground()์ ์ด์ฐจ์๋ฐฐ์ด)์ ๋ฃ์ด ์ค๋ค.
- ๋ถ์ ์ญ์ ์๋ฆฌ์ ์ผ์ ์๋ฆฌ๋ฅผ ๋ฐ๋ก ๋ฐ๋ก ํ๋จํด ๋ฃ๋๋ค - ๊ทธ๋์ switch๋ฌธ์ด ๋ ๊ฐ.
- ์๋ฅผ ๋ค์ด 45๋ถ์ด๋ฉด ์ญ์ ์๋ฆฌ์์ "์ฌ","์ญ", ์ผ์ ์๋ฆฌ์์ "์ค" ๋ฅผ ๋ฃ์ด์ค๋ค.
- "๋ถ"๋ถ๋ถ๋ ๊ณตํต์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ, ์๊ฐ์ด 06:00 ์ผ ๋ "์ฌ์ฏ ์ ๋ถ"์ผ๋ก ์ถ๋ ฅ๋๋ ์ค๋ฅ๊ฐ ์์๋ค.
- ๊ทธ๋์ ๋งจ ๋ง์ง๋ง์ if๋ฌธ์ผ๋ก ๋ถ์ ์๋ฆฌ๊ฐ ๋ชจ๋ 0์ผ ๊ฒฝ์ฐ์๋ ํจ์๋ฅผ ์ข ๋ฃ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ '๋ถ'์ ์ถ๋ ฅํ๋๋ก ํ๋ค.
๊ฐ์ ์ฌํญ
์์ANSI ์ฝ๋ : ์ฝ์์ฐฝ์์ ์ถ๋ ฅํ ๋ ๊ธ์จ ์์ ๋ฐ๊ฟ ์ ์๋ค.
๋์ค์ ํ์ฉํด๋ด์ผ๊ฒ ๋ค.
์ฐธ๊ณ : System.out.println์ ์ฌ์ฉํ์ฌ ์ฝ์์์ ์์์ ์ธ์ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ ์ฒด ์ฝ๋
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Timer;
import java.util.TimerTask;
public class HangeulClock {
public static void main(String[] args) {
HangeulClock hangeulClock = new HangeulClock();
Timer scheduler = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
// hangeulClock.clearScreen(); ๋์ํ์ง ์์..ใ
String[][] clockResult = hangeulClock.showHourMinute();
hangeulClock.printHangeulClock(clockResult);
}
};
scheduler.scheduleAtFixedRate(task, 1000, 60000); // 1์ด ๋ค 1๋ถ๋ง๋ค ๋ฐ๋ณต์คํ
}
// public void clearScreen() {
// for (int i = 0; i < 80; i++)
// System.out.println("");
// }
public static String[][] showBackground() {
String[][] background = new String[6][6];
// ๊ฐ ๋ฃ๊ธฐ
// boolean -> true ์ด๋ฉด ๊ฐ ๋ฃ๊ณ false์ด๋ฉด ๊ธฐํธ๋ก.
background[0] = new String[]{"โจ", "โจ", "โจ", "โจ", "โจ", "โจ"};
background[1] = new String[]{"โจ", "โจ", "โจ", "โจ", "โจ", "โจ"};
background[2] = new String[]{"โจ", "โจ", "โจ", "โจ", "โจ", "โจ"};
background[3] = new String[]{"โจ", "โจ", "โจ", "โจ", "โจ", "โจ"};
background[4] = new String[]{"โจ", "โจ", "โจ", "โจ", "โจ", "โจ"};
background[5] = new String[]{"โจ", "โจ", "โจ", "โจ", "โจ", "โจ"};
return background;
}
public static String[][] takeHangeul() {
String[][] HangeulTime = new String[6][6];
HangeulTime[0] = new String[]{"ํ", "๋", "์ธ", "๋ค", "๋ค", "์ฏ"};
HangeulTime[1] = new String[]{"์ฌ", "์ฏ", "์ผ", "๊ณฑ", "์ฌ", "๋"};
HangeulTime[2] = new String[]{"์", "ํ", "์ด", "ํ", "๋", "์"};
HangeulTime[3] = new String[]{"์", "์ด", "์ผ", "์ฌ", "์ค", "์ญ"};
HangeulTime[4] = new String[]{"์ ", "์ผ", "์ด", "์ผ", "์ฌ", "์ก"};
HangeulTime[5] = new String[]{"์ค", "์ค", "์น ", "ํ", "๊ตฌ", "๋ถ"};
return HangeulTime;
}
public void printHangeulClock(String[][] clockFormat) {
String[][] HangeulClock = clockFormat;
System.out.println("๐ซํ๊ธ์๊ณ ๋ฐ๋ผ ๋ง๋ค๊ธฐ๐ซ");
for (int i = 0; i < 6; i++) {
System.out.print(" " + HangeulClock[i][0] + " ");
System.out.print(" " + HangeulClock[i][1] + " ");
System.out.print(" " + HangeulClock[i][2] + " ");
System.out.print(" " + HangeulClock[i][3] + " ");
System.out.print(" " + HangeulClock[i][4] + " ");
System.out.println(" " + HangeulClock[i][5] + " ");
}
}
public String getCurrentTime() {
LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ISO_TIME;
String currentTime = dateTime.format(formatter);
// System.out.println(currentTime); ์๊ฐ์ถ๋ ฅ
String[] timeArr = currentTime.split(":");
String hourMinute = String.join(":", timeArr[0], timeArr[1]);
return hourMinute;
}
public String[][] showHourMinute() {
String hourMinute = getCurrentTime();
String[][] HangeulData = takeHangeul();
String[][] clockFormat = showBackground();
String hour = hourMinute.split(":")[0]; // ์
String minute = hourMinute.split(":")[1]; // ๋ถ
switch (hourMinute) {
case "00:00":
clockFormat[3][0] = HangeulData[3][0];//์
clockFormat[4][0] = HangeulData[4][0];//์
break;
case "12:00":
clockFormat[4][0] = HangeulData[4][0];//์
clockFormat[5][0] = HangeulData[5][0];//์ค
break;
default:
putHangeulHours(clockFormat, HangeulData, hour);
putHangeulMinutes(clockFormat, HangeulData, minute);
break;
}
return clockFormat;
}
public void putHangeulHours(String[][] clockFormat, String[][] HangeulData, String hour) {
///// ์
switch (hour) {
case "01":
case "13":
clockFormat[0][0] = HangeulData[0][0];//ํ
break;
case "02":
case "14":
clockFormat[0][1] = HangeulData[0][1];//๋
break;
case "03":
case "15":
clockFormat[0][2] = HangeulData[0][2];//์ธ
break;
case "04":
case "16":
clockFormat[0][3] = HangeulData[0][3];//๋ค
break;
case "05":
case "17":
clockFormat[0][4] = HangeulData[0][4];//๋ค
clockFormat[0][5] = HangeulData[0][5];//์ฏ
break;
case "06":
case "18":
clockFormat[1][0] = HangeulData[1][0];//์ฌ
clockFormat[1][1] = HangeulData[1][1];//์ฏ
break;
case "07":
case "19":
clockFormat[1][2] = HangeulData[1][2];//์ผ
clockFormat[1][3] = HangeulData[1][3];//๊ณฑ
break;
case "08":
case "20":
clockFormat[1][4] = HangeulData[1][4];//์ฌ
clockFormat[1][5] = HangeulData[1][5];//๋
break;
case "09":
case "21":
clockFormat[2][0] = HangeulData[2][0];//์
clockFormat[2][1] = HangeulData[2][1];//ํ
break;
case "10":
case "22":
clockFormat[2][2] = HangeulData[2][2];//์ด
break;
case "11":
case "23":
clockFormat[2][2] = HangeulData[2][2];//์ด
clockFormat[2][3] = HangeulData[2][3];//ํ
break;
case "12":
case "0":
clockFormat[2][2] = HangeulData[2][2];//์ด
clockFormat[2][4] = HangeulData[2][4];//๋
break;
}
clockFormat[2][5] = HangeulData[2][5];//์
}
public void putHangeulMinutes(String[][] clockFormat, String[][] HangeulData, String minute) {
/////// ๋ถ
String minuteTen = minute.split("")[0]; // ๋ถ์ ์ญ์ ์๋ฆฌ
String minuteOne = minute.split("")[1]; // ๋ถ์ ์ผ์ ์๋ฆฌ
// ๋ถ - ์ญ์ ์๋ฆฌ
switch (minuteTen) {
case "1":
clockFormat[3][5] = HangeulData[3][5];//์ญ
break;
case "2":
clockFormat[3][1] = HangeulData[3][1];//์ด
clockFormat[3][5] = HangeulData[3][5];//์ญ
break;
case "3":
clockFormat[3][2] = HangeulData[3][2];//์ผ
clockFormat[3][5] = HangeulData[3][5];//์ญ
break;
case "4":
clockFormat[3][3] = HangeulData[3][3];//์ฌ
clockFormat[3][5] = HangeulData[3][5];//์ญ
break;
case "5":
clockFormat[3][4] = HangeulData[3][4];//์ค
clockFormat[3][5] = HangeulData[3][5];//์ญ
break;
case "0":
break;
}
// ๋ถ - ์ผ์ ์๋ฆฌ
switch (minuteOne) {
case "1":
clockFormat[4][1] = HangeulData[4][1];//์ผ
break;
case "2":
clockFormat[4][2] = HangeulData[4][2];//์ด
break;
case "3":
clockFormat[4][3] = HangeulData[4][3];//์ผ
break;
case "4":
clockFormat[4][4] = HangeulData[4][4];//์ฌ
break;
case "5":
clockFormat[5][1] = HangeulData[5][1];//์ค
break;
case "6":
clockFormat[4][5] = HangeulData[4][5];//์ก
break;
case "7":
clockFormat[5][2] = HangeulData[5][2];//์น
break;
case "8":
clockFormat[5][3] = HangeulData[5][3];//ํ
break;
case "9":
clockFormat[5][4] = HangeulData[5][4];//๊ตฌ
break;
case "0":
break;
}
if (minuteTen.equals("0") && minuteOne.equals("0")) {
return;
} else {
clockFormat[5][5] = HangeulData[5][5];//๋ถ
}
}
}