From 0433d411e94ec21cd584e68194c1db5faa241476 Mon Sep 17 00:00:00 2001 From: 100-yeeun <100yeeun@gmail.com> Date: Mon, 14 Dec 2020 17:19:04 +0900 Subject: [PATCH 1/7] =?UTF-8?q?docs:=20README=EC=97=90=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md => docs/README.md | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) rename README.md => docs/README.md (90%) diff --git a/README.md b/docs/README.md similarity index 90% rename from README.md rename to docs/README.md index 00410ae50..563b952b6 100644 --- a/README.md +++ b/docs/README.md @@ -3,6 +3,37 @@
+## ๐Ÿ‘พ ๊ธฐ๋Šฅ ๋ชฉ๋ก `new` + +- ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ + - ์ดˆ๊ธฐ ์ •๋ณด ๋“ฑ๋ก +- ์ง€ํ•˜์ฒ  ์—ญ ๊ด€๋ จ ๊ธฐ๋Šฅ + - ์—ญ ์ด๋ฆ„์ด 2์ž ์ด์ƒ, 5์ž ์ดํ•˜์ธ์ง€ ๊ฒ€์ฆ + - ์ค‘๋ณต๋œ ์—ญ ์ด๋ฆ„์ด ์—†๋Š”์ง€ ๊ฒ€์ฆ + - ์—ญ ๋“ฑ๋ก + - ์—ญ ์‚ญ์ œ + - `static` ์—ญ ๋ชฉ๋ก ์กฐํšŒ +- ์ง€ํ•˜์ฒ  ๋…ธ์„  ๊ด€๋ จ ๊ธฐ๋Šฅ + - ๋…ธ์„  ์ด๋ฆ„์ด 2์ž ์ด์ƒ, 5์ž ์ดํ•˜์ธ์ง€ ๊ฒ€์ฆ + - ์ค‘๋ณต๋œ ๋…ธ์„  ์ด๋ฆ„์ด ์—†๋Š”์ง€ ๊ฒ€์ฆ + - ๋…ธ์„  ๋“ฑ๋ก + - ์ƒํ–‰, ํ•˜ํ–‰ ์ข…์ ์—ญ ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ + - ๋…ธ์„  ์‚ญ์ œ + - `static` ๋…ธ์„  ๋ชฉ๋ก ์กฐํšŒ +- ์ง€ํ•˜์ฒ  ๊ตฌ๊ฐ„ ๊ด€๋ จ ๊ธฐ๋Šฅ + - ๊ตฌ๊ฐ„ ๋“ฑ๋ก + - ๋…ธ์„  ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ + - ์—ญ ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ + - ๋…ธ์„ ๋‚ด ์—ญ ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ + - ์ƒํ–‰, ํ•˜ํ–‰ ์ข…์ ์ผ ๊ฒฝ์šฐ ๊ฐ€๋Šฅ + - ์ƒํ•˜ํ–‰ ์—ฌ๋ถ€ ํ™•์ธ ๋ฐ ๋ณ€๊ฒฝ + - ๊ตฌ๊ฐ„ ์‚ญ์ œ + - ๋…ธ์„  ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ + - ์—ญ ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ + - ๋…ธ์„  ๋‚ด ์—ญ 2๊ฐœ ์ดˆ๊ณผ์ธ์ง€ ๊ฒ€์ฆ + - ์ƒํ•˜ํ–‰ ์—ฌ๋ถ€ ํ™•์ธ ๋ฐ ๋ณ€๊ฒฝ +- ๋…ธ์„ ๋„ ์กฐํšŒ + ## ๐Ÿš€ ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ ### ์ดˆ๊ธฐ ์„ค์ • @@ -19,7 +50,7 @@ - ์‹ ๋ถ„๋‹น์„ : ๊ฐ•๋‚จ์—ญ - ์–‘์žฌ์—ญ - ์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ ``` - + ### ์ง€ํ•˜์ฒ  ์—ญ ๊ด€๋ จ ๊ธฐ๋Šฅ - ์ง€ํ•˜์ฒ  ์—ญ์„ ๋“ฑ๋กํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค. (๋‹จ, ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์€ ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค) @@ -41,14 +72,14 @@ - ์—ญ๊ณผ ์—ญ ์‚ฌ์ด์— ์ƒˆ๋กœ์šด ์—ญ์ด ์ถ”๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. - ๋…ธ์„ ์—์„œ ๊ฐˆ๋ž˜๊ธธ์€ ์ƒ๊ธธ ์ˆ˜ ์—†๋‹ค. - + ### ์ง€ํ•˜์ฒ  ๊ตฌ๊ฐ„ ์‚ญ์ œ ๊ธฐ๋Šฅ - ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค. - ์ข…์ ์„ ์ œ๊ฑฐํ•  ๊ฒฝ์šฐ ๋‹ค์Œ ์—ญ์ด ์ข…์ ์ด ๋œ๋‹ค. - ๋…ธ์„ ์— ํฌํ•จ๋œ ์—ญ์ด ๋‘๊ฐœ ์ดํ•˜์ผ ๋•Œ๋Š” ์—ญ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†๋‹ค. - + ### ์ง€ํ•˜์ฒ  ๋…ธ์„ ์— ๋“ฑ๋ก๋œ ์—ญ ์กฐํšŒ ๊ธฐ๋Šฅ - ๋…ธ์„ ์˜ ์ƒํ–‰ ์ข…์ ๋ถ€ํ„ฐ ํ•˜ํ–‰ ์ข…์ ๊นŒ์ง€ ์—ฐ๊ฒฐ๋œ ์ˆœ์„œ๋Œ€๋กœ ์—ญ ๋ชฉ๋ก์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. From 39bb85521f6bea81429ee3c5c0d13d505898e38b Mon Sep 17 00:00:00 2001 From: 100-yeeun <100yeeun@gmail.com> Date: Tue, 15 Dec 2020 14:09:20 +0900 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20=EC=8B=9C=EC=9E=91=20=EC=9E=85?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20view=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ํ•„์š” script์ •๋ฆฌํ•œ ScriptUtils ์ƒ์„ฑ main, station, line, section ๋‹ด์€ Category Enum ์ƒ์„ฑ MainController๋ฅผ ์ด์šฉํ•ด View ํ˜ธ์ถœ --- docs/README.md | 2 + src/main/java/subway/Application.java | 4 +- .../subway/controller/MainController.java | 15 ++++++ .../{ => repository}/LineRepository.java | 3 +- .../{ => repository}/StationRepository.java | 3 +- src/main/java/subway/view/BaseView.java | 48 +++++++++++++++++++ src/main/java/utils/Category.java | 5 ++ src/main/java/utils/ScriptUtils.java | 13 +++++ 8 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 src/main/java/subway/controller/MainController.java rename src/main/java/subway/domain/{ => repository}/LineRepository.java (89%) rename src/main/java/subway/domain/{ => repository}/StationRepository.java (89%) create mode 100644 src/main/java/subway/view/BaseView.java create mode 100644 src/main/java/utils/Category.java create mode 100644 src/main/java/utils/ScriptUtils.java diff --git a/docs/README.md b/docs/README.md index 563b952b6..770ab3765 100644 --- a/docs/README.md +++ b/docs/README.md @@ -7,6 +7,8 @@ - ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ - ์ดˆ๊ธฐ ์ •๋ณด ๋“ฑ๋ก + - ๋ชฉ๋ก UI + - ๋ชฉ๋ก ๋‚ด ๋ฒˆํ˜ธ์ธ์ง€ ๊ฒ€์ฆ - ์ง€ํ•˜์ฒ  ์—ญ ๊ด€๋ จ ๊ธฐ๋Šฅ - ์—ญ ์ด๋ฆ„์ด 2์ž ์ด์ƒ, 5์ž ์ดํ•˜์ธ์ง€ ๊ฒ€์ฆ - ์ค‘๋ณต๋œ ์—ญ ์ด๋ฆ„์ด ์—†๋Š”์ง€ ๊ฒ€์ฆ diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index 0bcf786cc..b338bf31c 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,10 +1,12 @@ package subway; import java.util.Scanner; +import subway.controller.MainController; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); - // TODO: ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ + + MainController.startProgram(scanner); } } diff --git a/src/main/java/subway/controller/MainController.java b/src/main/java/subway/controller/MainController.java new file mode 100644 index 000000000..82a214dde --- /dev/null +++ b/src/main/java/subway/controller/MainController.java @@ -0,0 +1,15 @@ +package subway.controller; + +import java.util.Scanner; +import subway.view.BaseView; +import utils.ScriptUtils; + +public class MainController { + private MainController() {} + + public static void startProgram(Scanner scanner) { + BaseView mainView = new BaseView(); + mainView.printMenu(ScriptUtils.MAIN_MENU); + mainView.selectMenu(scanner); + } +} diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/repository/LineRepository.java similarity index 89% rename from src/main/java/subway/domain/LineRepository.java rename to src/main/java/subway/domain/repository/LineRepository.java index 49132ddb6..83815e82b 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/repository/LineRepository.java @@ -1,9 +1,10 @@ -package subway.domain; +package subway.domain.repository; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; +import subway.domain.Line; public class LineRepository { private static final List lines = new ArrayList<>(); diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/repository/StationRepository.java similarity index 89% rename from src/main/java/subway/domain/StationRepository.java rename to src/main/java/subway/domain/repository/StationRepository.java index b7245c0f3..53292d471 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/repository/StationRepository.java @@ -1,9 +1,10 @@ -package subway.domain; +package subway.domain.repository; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; +import subway.domain.Station; public class StationRepository { private static final List stations = new ArrayList<>(); diff --git a/src/main/java/subway/view/BaseView.java b/src/main/java/subway/view/BaseView.java new file mode 100644 index 000000000..c429c1ec3 --- /dev/null +++ b/src/main/java/subway/view/BaseView.java @@ -0,0 +1,48 @@ +package subway.view; + +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; +import utils.Category; +import utils.ScriptUtils; + +public class BaseView { + public static final int EXIT = 0; + public static final int ERROR = -1; + public static final int START = 1; + public static final int[] LENGTH_OF_MENU = {4, 3, 3, 2}; + List gameExitValue = Arrays.asList("Q", "q"); + + public BaseView() { + } + + public void printMenu(String script) { + System.out.println(script); + } + + public int selectMenu(Scanner scanner) { + System.out.println(ScriptUtils.ASK_SELECTION); + String input = scanner.nextLine(); + + if (gameExitValue.contains(input)) { + return EXIT; + } + + return validateSelection(input); + } + + public int validateSelection(String input) { + int number; + + try { + number = Integer.parseInt(input); + if (number < START || number > LENGTH_OF_MENU[Category.MAIN.ordinal()]) { + throw new IllegalArgumentException(); + } + } catch (IllegalArgumentException e) { + System.out.println(ScriptUtils.ERROR_OUT_OF_VALUE); + return ERROR; + } + return number; + } +} diff --git a/src/main/java/utils/Category.java b/src/main/java/utils/Category.java new file mode 100644 index 000000000..d466a1e19 --- /dev/null +++ b/src/main/java/utils/Category.java @@ -0,0 +1,5 @@ +package utils; + +public enum Category { + MAIN, STATION, LINE, SECTION +} diff --git a/src/main/java/utils/ScriptUtils.java b/src/main/java/utils/ScriptUtils.java new file mode 100644 index 000000000..4058b7ba1 --- /dev/null +++ b/src/main/java/utils/ScriptUtils.java @@ -0,0 +1,13 @@ +package utils; + +public class ScriptUtils { + + public static final String MAIN_MENU = "## ๋ฉ”์ธ ํ™”๋ฉด\n" + + "1. ์—ญ ๊ด€๋ฆฌ\n" + + "2. ๋…ธ์„  ๊ด€๋ฆฌ\n" + + "3. ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ\n" + + "4. ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ์ถœ๋ ฅ\n" + + "Q. ์ข…๋ฃŒ\n"; + public static final String ASK_SELECTION = "## ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜์„ธ์š”."; + public static final String ERROR_OUT_OF_VALUE = "[ERROR] ์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค."; +} From 79b31d036dc91c21a1c9ef209054e5ccb8c49949 Mon Sep 17 00:00:00 2001 From: 100-yeeun <100yeeun@gmail.com> Date: Tue, 15 Dec 2020 16:52:15 +0900 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20=EB=A9=94=EB=89=B4=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=EC=8B=9C=20=ED=95=B4=EB=8B=B9=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=EB=A9=94=EB=89=B4=EB=A1=9C=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 4 +- .../subway/controller/MainController.java | 15 ------ .../subway/controller/MenuController.java | 46 +++++++++++++++++++ .../subway/controller/StationController.java | 15 ++++++ src/main/java/subway/view/DetailView.java | 13 ++++++ .../view/{BaseView.java => MenuView.java} | 28 +++++++---- src/main/java/utils/ScriptUtils.java | 14 +++--- 7 files changed, 101 insertions(+), 34 deletions(-) delete mode 100644 src/main/java/subway/controller/MainController.java create mode 100644 src/main/java/subway/controller/MenuController.java create mode 100644 src/main/java/subway/controller/StationController.java create mode 100644 src/main/java/subway/view/DetailView.java rename src/main/java/subway/view/{BaseView.java => MenuView.java} (58%) diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index b338bf31c..ebc1cb281 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -1,12 +1,12 @@ package subway; import java.util.Scanner; -import subway.controller.MainController; +import subway.controller.MenuController; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); - MainController.startProgram(scanner); + MenuController.runProgram(scanner); } } diff --git a/src/main/java/subway/controller/MainController.java b/src/main/java/subway/controller/MainController.java deleted file mode 100644 index 82a214dde..000000000 --- a/src/main/java/subway/controller/MainController.java +++ /dev/null @@ -1,15 +0,0 @@ -package subway.controller; - -import java.util.Scanner; -import subway.view.BaseView; -import utils.ScriptUtils; - -public class MainController { - private MainController() {} - - public static void startProgram(Scanner scanner) { - BaseView mainView = new BaseView(); - mainView.printMenu(ScriptUtils.MAIN_MENU); - mainView.selectMenu(scanner); - } -} diff --git a/src/main/java/subway/controller/MenuController.java b/src/main/java/subway/controller/MenuController.java new file mode 100644 index 000000000..e3cfc4c76 --- /dev/null +++ b/src/main/java/subway/controller/MenuController.java @@ -0,0 +1,46 @@ +package subway.controller; + +import java.util.Scanner; +import subway.view.DetailView; +import subway.view.MenuView; +import utils.Category; + +public class MenuController { + private MenuController() {} + + public static void runProgram(Scanner scanner) { + MenuView mainView = new MenuView(); + int stopOption = MenuView.RETRY; + while (stopOption < MenuView.EXIT) { + mainView.printMenu(); + int selection = mainView.selectMenu(scanner); + if (selection <= MenuView.EXIT) { + stopOption = selection; + continue; + } + showSelectedView(selection, scanner); + } + } + + private static void showSelectedView(int categoryNumber, Scanner scanner) { + Category category = Category.values()[categoryNumber]; + MenuView selectedView = new MenuView(category); + int stopOption = MenuView.RETRY; + while (stopOption != MenuView.EXIT) { + selectedView.printMenu(); + int selection = selectedView.selectMenu(scanner); + if (selection <= MenuView.EXIT) { + stopOption = selection; + continue; + } + executeSelection(category, selection, scanner); + } + } + + public static void executeSelection(Category category, int selection, Scanner scanner) { + if (category == Category.STATION) { + StationController.startStationManagement(scanner, selection); + } + + } +} diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java new file mode 100644 index 000000000..203d1194c --- /dev/null +++ b/src/main/java/subway/controller/StationController.java @@ -0,0 +1,15 @@ +package subway.controller; + +import java.util.Scanner; +import subway.view.DetailView; +import utils.Category; + +public class StationController { + + private static final Category category = Category.STATION; + private StationController() {} + + public static void startStationManagement(Scanner scanner, int selection) { + DetailView stationView = new DetailView(category); + } +} diff --git a/src/main/java/subway/view/DetailView.java b/src/main/java/subway/view/DetailView.java new file mode 100644 index 000000000..b54abeb0d --- /dev/null +++ b/src/main/java/subway/view/DetailView.java @@ -0,0 +1,13 @@ +package subway.view; + +import java.util.Scanner; +import utils.Category; + +public class DetailView { + private Category category; + + public DetailView(Category category) { + this.category = category; + } + +} diff --git a/src/main/java/subway/view/BaseView.java b/src/main/java/subway/view/MenuView.java similarity index 58% rename from src/main/java/subway/view/BaseView.java rename to src/main/java/subway/view/MenuView.java index c429c1ec3..52c381758 100644 --- a/src/main/java/subway/view/BaseView.java +++ b/src/main/java/subway/view/MenuView.java @@ -6,28 +6,36 @@ import utils.Category; import utils.ScriptUtils; -public class BaseView { +public class MenuView { public static final int EXIT = 0; - public static final int ERROR = -1; + public static final int RETRY = -1; public static final int START = 1; public static final int[] LENGTH_OF_MENU = {4, 3, 3, 2}; - List gameExitValue = Arrays.asList("Q", "q"); - public BaseView() { + private Category category; + List exitValue; + + public MenuView() { + this.category = Category.MAIN; + this.exitValue = Arrays.asList("Q", "q"); + } + + public MenuView(Category category) { + this.category = category; + this.exitValue = Arrays.asList("B", "b"); } - public void printMenu(String script) { - System.out.println(script); + public void printMenu() { + System.out.println(ScriptUtils.MENUS[category.ordinal()]); } public int selectMenu(Scanner scanner) { System.out.println(ScriptUtils.ASK_SELECTION); String input = scanner.nextLine(); - if (gameExitValue.contains(input)) { + if (exitValue.contains(input)) { return EXIT; } - return validateSelection(input); } @@ -36,12 +44,12 @@ public int validateSelection(String input) { try { number = Integer.parseInt(input); - if (number < START || number > LENGTH_OF_MENU[Category.MAIN.ordinal()]) { + if (number < START || number > LENGTH_OF_MENU[category.ordinal()]) { throw new IllegalArgumentException(); } } catch (IllegalArgumentException e) { System.out.println(ScriptUtils.ERROR_OUT_OF_VALUE); - return ERROR; + return RETRY; } return number; } diff --git a/src/main/java/utils/ScriptUtils.java b/src/main/java/utils/ScriptUtils.java index 4058b7ba1..6450f9367 100644 --- a/src/main/java/utils/ScriptUtils.java +++ b/src/main/java/utils/ScriptUtils.java @@ -2,12 +2,12 @@ public class ScriptUtils { - public static final String MAIN_MENU = "## ๋ฉ”์ธ ํ™”๋ฉด\n" - + "1. ์—ญ ๊ด€๋ฆฌ\n" - + "2. ๋…ธ์„  ๊ด€๋ฆฌ\n" - + "3. ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ\n" - + "4. ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ์ถœ๋ ฅ\n" - + "Q. ์ข…๋ฃŒ\n"; + public static final String[] MENUS = { + "## ๋ฉ”์ธ ํ™”๋ฉด\n1. ์—ญ ๊ด€๋ฆฌ\n2. ๋…ธ์„  ๊ด€๋ฆฌ\n3. ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ\n4. ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ์ถœ๋ ฅ\nQ. ์ข…๋ฃŒ\n", + "\n## ์—ญ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ์—ญ ๋“ฑ๋ก\n2. ์—ญ ์‚ญ์ œ\n3. ์—ญ ์กฐํšŒ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n", + "\n## ๋…ธ์„  ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๋…ธ์„  ๋“ฑ๋ก\n2. ๋…ธ์„  ์‚ญ์ œ\n3. ๋…ธ์„  ์กฐํšŒ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n", + "\n## ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๊ตฌ๊ฐ„ ๋“ฑ๋ก\n2. ๊ตฌ๊ฐ„ ์‚ญ์ œ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" + }; public static final String ASK_SELECTION = "## ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜์„ธ์š”."; - public static final String ERROR_OUT_OF_VALUE = "[ERROR] ์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค."; + public static final String ERROR_OUT_OF_VALUE = "\n[ERROR] ์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.\n"; } From fb88f1feb60b7ff8f8c2757de390fa421e7657f8 Mon Sep 17 00:00:00 2001 From: 100-yeeun <100yeeun@gmail.com> Date: Tue, 15 Dec 2020 18:42:39 +0900 Subject: [PATCH 4/7] =?UTF-8?q?feat:=20station=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 +-- .../subway/controller/MenuController.java | 3 +- .../subway/controller/StationController.java | 23 ++++++++++-- .../domain/repository/StationRepository.java | 4 +++ .../subway/domain/service/StationService.java | 25 +++++++++++++ src/main/java/subway/view/DetailView.java | 35 +++++++++++++++++++ src/main/java/utils/Category.java | 8 ++++- src/main/java/utils/ScriptUtils.java | 16 +++++++++ 8 files changed, 111 insertions(+), 7 deletions(-) create mode 100644 src/main/java/subway/domain/service/StationService.java diff --git a/docs/README.md b/docs/README.md index 770ab3765..4d709d7db 100644 --- a/docs/README.md +++ b/docs/README.md @@ -10,13 +10,13 @@ - ๋ชฉ๋ก UI - ๋ชฉ๋ก ๋‚ด ๋ฒˆํ˜ธ์ธ์ง€ ๊ฒ€์ฆ - ์ง€ํ•˜์ฒ  ์—ญ ๊ด€๋ จ ๊ธฐ๋Šฅ - - ์—ญ ์ด๋ฆ„์ด 2์ž ์ด์ƒ, 5์ž ์ดํ•˜์ธ์ง€ ๊ฒ€์ฆ + - ์—ญ ์ด๋ฆ„์ด 2์ž ์ด์ƒ์ธ์ง€ ๊ฒ€์ฆ - ์ค‘๋ณต๋œ ์—ญ ์ด๋ฆ„์ด ์—†๋Š”์ง€ ๊ฒ€์ฆ - ์—ญ ๋“ฑ๋ก - ์—ญ ์‚ญ์ œ - `static` ์—ญ ๋ชฉ๋ก ์กฐํšŒ - ์ง€ํ•˜์ฒ  ๋…ธ์„  ๊ด€๋ จ ๊ธฐ๋Šฅ - - ๋…ธ์„  ์ด๋ฆ„์ด 2์ž ์ด์ƒ, 5์ž ์ดํ•˜์ธ์ง€ ๊ฒ€์ฆ + - ๋…ธ์„  ์ด๋ฆ„์ด 2์ž ์ด์ƒ์ธ์ง€ ๊ฒ€์ฆ - ์ค‘๋ณต๋œ ๋…ธ์„  ์ด๋ฆ„์ด ์—†๋Š”์ง€ ๊ฒ€์ฆ - ๋…ธ์„  ๋“ฑ๋ก - ์ƒํ–‰, ํ•˜ํ–‰ ์ข…์ ์—ญ ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ diff --git a/src/main/java/subway/controller/MenuController.java b/src/main/java/subway/controller/MenuController.java index e3cfc4c76..62bb2b5db 100644 --- a/src/main/java/subway/controller/MenuController.java +++ b/src/main/java/subway/controller/MenuController.java @@ -1,7 +1,6 @@ package subway.controller; import java.util.Scanner; -import subway.view.DetailView; import subway.view.MenuView; import utils.Category; @@ -39,7 +38,7 @@ private static void showSelectedView(int categoryNumber, Scanner scanner) { public static void executeSelection(Category category, int selection, Scanner scanner) { if (category == Category.STATION) { - StationController.startStationManagement(scanner, selection); + StationController.manageStation(scanner, selection); } } diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 203d1194c..068921c9f 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -1,15 +1,34 @@ package subway.controller; import java.util.Scanner; +import subway.domain.service.StationService; import subway.view.DetailView; import utils.Category; public class StationController { + public static final int ADD = 1; + public static final int DELETE = 2; + public static final int GET_LIST = 3; private static final Category category = Category.STATION; + public static DetailView stationView = new DetailView(category); + private StationController() {} - public static void startStationManagement(Scanner scanner, int selection) { - DetailView stationView = new DetailView(category); + public static void manageStation(Scanner scanner, int selection) { + if (selection == GET_LIST) { + StationService.readStationList(); + return; + } + stationView.ask(selection); + String answer = stationView.inputName(scanner, selection); + if (answer == null) { + return; + } + if (selection == ADD) { + StationService.createStation(answer); + return; + } + StationService.deleteStation(answer); } } diff --git a/src/main/java/subway/domain/repository/StationRepository.java b/src/main/java/subway/domain/repository/StationRepository.java index 53292d471..e66ce99dc 100644 --- a/src/main/java/subway/domain/repository/StationRepository.java +++ b/src/main/java/subway/domain/repository/StationRepository.java @@ -20,4 +20,8 @@ public static void addStation(Station station) { public static boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } + + public static boolean findNoStation(String name) { + return stations.stream().noneMatch(station -> Objects.equals(station.getName(), name)); + } } diff --git a/src/main/java/subway/domain/service/StationService.java b/src/main/java/subway/domain/service/StationService.java new file mode 100644 index 000000000..42728d1cd --- /dev/null +++ b/src/main/java/subway/domain/service/StationService.java @@ -0,0 +1,25 @@ +package subway.domain.service; + +import subway.domain.Station; +import subway.domain.repository.StationRepository; +import utils.ScriptUtils; + +public class StationService { + private StationService() {} + + public static void createStation(String name) { + Station station = new Station(name); + StationRepository.addStation(station); + } + + public static void readStationList() { + System.out.println(ScriptUtils.STATION_LIST); + for (Station station : StationRepository.stations()) { + System.out.println(ScriptUtils.INFO + station.getName()); + } + } + + public static void deleteStation(String name) { + StationRepository.deleteStation(name); + } +} diff --git a/src/main/java/subway/view/DetailView.java b/src/main/java/subway/view/DetailView.java index b54abeb0d..04ac96397 100644 --- a/src/main/java/subway/view/DetailView.java +++ b/src/main/java/subway/view/DetailView.java @@ -1,13 +1,48 @@ package subway.view; import java.util.Scanner; +import subway.domain.repository.StationRepository; import utils.Category; +import utils.ScriptUtils; public class DetailView { private Category category; + private int ADD = 1; + private int DELETE = 2; public DetailView(Category category) { this.category = category; } + public void ask(int selection) { + System.out.println(ScriptUtils.ASK_ANSWER_FOR[category.ordinal()][selection-1]); + } + + public String inputName(Scanner scanner, int selection) { + String input = scanner.nextLine(); + try { + validateName(input); + return duplicateName(input, selection); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + } + return null; + } + + private String duplicateName(String input, int selection) { + boolean notDuplicate = StationRepository.findNoStation(input); + if (!notDuplicate && selection == ADD) { + throw new IllegalArgumentException(ScriptUtils.ERROR_DUPLICATE(category)); + } + if (notDuplicate && selection == DELETE) { + throw new IllegalArgumentException(ScriptUtils.ERROR_NO(category)); + } + return input; + } + + private void validateName(String input) { + if (input.length() < 2) { + throw new IllegalArgumentException(ScriptUtils.ERROR_TOO_SHORT(category)); + } + } } diff --git a/src/main/java/utils/Category.java b/src/main/java/utils/Category.java index d466a1e19..53e952abe 100644 --- a/src/main/java/utils/Category.java +++ b/src/main/java/utils/Category.java @@ -1,5 +1,11 @@ package utils; public enum Category { - MAIN, STATION, LINE, SECTION + MAIN("๋ฉ”์ธ"), STATION("์—ญ"), LINE("๋…ธ์„ "), SECTION("๊ตฌ๊ฐ„"); + + Category(String name) {} + + public String getName() { + return name(); + } } diff --git a/src/main/java/utils/ScriptUtils.java b/src/main/java/utils/ScriptUtils.java index 6450f9367..d57daa630 100644 --- a/src/main/java/utils/ScriptUtils.java +++ b/src/main/java/utils/ScriptUtils.java @@ -10,4 +10,20 @@ public class ScriptUtils { }; public static final String ASK_SELECTION = "## ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜์„ธ์š”."; public static final String ERROR_OUT_OF_VALUE = "\n[ERROR] ์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.\n"; + public static final String[][] ASK_ANSWER_FOR = {{}, + {"\n## ๋“ฑ๋กํ•  ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.", "\n## ์‚ญ์ œํ•  ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."},}; + public static final String STATION_LIST = "## ์—ญ ๋ชฉ๋ก"; + public static final String INFO = "[INFO] "; + + public static String ERROR_TOO_SHORT(Category category) { + return "\n[ERROR] " + category.getName() + " ์ด๋ฆ„์€ 2์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.\n"; + } + + public static String ERROR_DUPLICATE(Category category) { + return "\n[ERROR] ์ด๋ฏธ ๋“ฑ๋ก๋œ " + category.getName() + " ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.\n"; + } + + public static String ERROR_NO(Category category) { + return "\n[ERROR] ์กด์žฌํ•˜์ง€ ์•Š๋Š” " + category.getName() + " ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.\n"; + } } From ff0abf8bac885ea1d1c400593b90cc211cf0ef41 Mon Sep 17 00:00:00 2001 From: 100-yeeun <100yeeun@gmail.com> Date: Tue, 15 Dec 2020 20:36:58 +0900 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/controller/LineController.java | 56 +++++++++++++++++++ .../subway/controller/MenuController.java | 3 + .../subway/controller/StationController.java | 13 ++--- src/main/java/subway/domain/Line.java | 8 ++- .../domain/repository/LineRepository.java | 4 ++ .../domain/repository/StationRepository.java | 7 +++ .../subway/domain/service/LineService.java | 43 ++++++++++++++ .../subway/domain/service/StationService.java | 31 ++++++++++ src/main/java/subway/view/DetailView.java | 36 ++++++------ src/main/java/utils/Category.java | 10 +++- src/main/java/utils/ScriptUtils.java | 26 ++++++--- 11 files changed, 202 insertions(+), 35 deletions(-) create mode 100644 src/main/java/subway/controller/LineController.java create mode 100644 src/main/java/subway/domain/service/LineService.java diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java new file mode 100644 index 000000000..3b298d20b --- /dev/null +++ b/src/main/java/subway/controller/LineController.java @@ -0,0 +1,56 @@ +package subway.controller; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; +import subway.domain.Line; +import subway.domain.Station; +import subway.domain.service.LineService; +import subway.domain.service.StationService; +import subway.view.DetailView; +import utils.Category; +import utils.ScriptUtils; + +public class LineController { + public static final int ADD = 1; + public static final int DELETE = 2; + public static final int GET_LIST = 3; + + public static DetailView lineView = new DetailView(Category.LINE); + + private LineController() {} + + public static void manageLine(Scanner scanner, int selection) { + if (selection == GET_LIST) { + LineService.readLineList(); + return; + } + String name = lineView.ask(scanner, selection); + if (name == null) { + return; + } + if (selection == ADD) { + addLine(scanner, name); + return; + } + LineService.deleteLine(name); + } + + private static void addLine(Scanner scanner, String name) { + List terminals = new ArrayList<>(); + for (int i = 0; i < ScriptUtils.ASK_ADD_LINE.length; i++) { + String terminalName = lineView.additionalAsk(scanner, ScriptUtils.ASK_ADD_LINE[i]); + try { + if (!StationService.duplicateName(terminalName)) { + throw new IllegalArgumentException(ScriptUtils.ERROR_NO(Category.STATION)); + } + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return; + } + terminals.add(StationService.readStation(terminalName)); + } + LineService.createLine(name, terminals); + } + +} diff --git a/src/main/java/subway/controller/MenuController.java b/src/main/java/subway/controller/MenuController.java index 62bb2b5db..6ae3070d9 100644 --- a/src/main/java/subway/controller/MenuController.java +++ b/src/main/java/subway/controller/MenuController.java @@ -41,5 +41,8 @@ public static void executeSelection(Category category, int selection, Scanner sc StationController.manageStation(scanner, selection); } + if (category == Category.LINE) { + LineController.manageLine(scanner, selection); + } } } diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java index 068921c9f..a7f4a13c4 100644 --- a/src/main/java/subway/controller/StationController.java +++ b/src/main/java/subway/controller/StationController.java @@ -10,8 +10,7 @@ public class StationController { public static final int DELETE = 2; public static final int GET_LIST = 3; - private static final Category category = Category.STATION; - public static DetailView stationView = new DetailView(category); + public static DetailView stationView = new DetailView(Category.STATION); private StationController() {} @@ -20,15 +19,15 @@ public static void manageStation(Scanner scanner, int selection) { StationService.readStationList(); return; } - stationView.ask(selection); - String answer = stationView.inputName(scanner, selection); - if (answer == null) { + + String name = stationView.ask(scanner, selection); + if (name == null) { return; } if (selection == ADD) { - StationService.createStation(answer); + StationService.createStation(name); return; } - StationService.deleteStation(answer); + StationService.deleteStation(name); } } diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index f4d738d5a..2f6022a18 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -1,10 +1,16 @@ package subway.domain; +import java.util.List; + public class Line { private String name; + private Station upTerminal; + private Station downTerminal; - public Line(String name) { + public Line(String name, List terminals) { this.name = name; + this.upTerminal = terminals.get(0); + this.downTerminal = terminals.get(1); } public String getName() { diff --git a/src/main/java/subway/domain/repository/LineRepository.java b/src/main/java/subway/domain/repository/LineRepository.java index 83815e82b..6deefe783 100644 --- a/src/main/java/subway/domain/repository/LineRepository.java +++ b/src/main/java/subway/domain/repository/LineRepository.java @@ -20,4 +20,8 @@ public static void addLine(Line line) { public static boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } + + public static boolean findNoLine(String name) { + return lines.stream().noneMatch(line -> Objects.equals(line.getName(), name)); + } } diff --git a/src/main/java/subway/domain/repository/StationRepository.java b/src/main/java/subway/domain/repository/StationRepository.java index e66ce99dc..29f572c9a 100644 --- a/src/main/java/subway/domain/repository/StationRepository.java +++ b/src/main/java/subway/domain/repository/StationRepository.java @@ -4,9 +4,11 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; import subway.domain.Station; public class StationRepository { + private static final List stations = new ArrayList<>(); public static List stations() { @@ -24,4 +26,9 @@ public static boolean deleteStation(String name) { public static boolean findNoStation(String name) { return stations.stream().noneMatch(station -> Objects.equals(station.getName(), name)); } + + public static List readStation(String name) { + return StationRepository.stations().stream().filter(station -> + station.getName() == name).collect(Collectors.toList()); + } } diff --git a/src/main/java/subway/domain/service/LineService.java b/src/main/java/subway/domain/service/LineService.java new file mode 100644 index 000000000..00e95cc2c --- /dev/null +++ b/src/main/java/subway/domain/service/LineService.java @@ -0,0 +1,43 @@ +package subway.domain.service; + +import java.util.List; +import subway.domain.Line; +import subway.domain.Station; +import subway.domain.repository.LineRepository; + +import utils.Category; +import utils.ScriptUtils; + +public class LineService { + + public static void readLineList() { + System.out.println(ScriptUtils.LINE_LIST); + for (Line line : LineRepository.lines()) { + System.out.println(ScriptUtils.INFO + line.getName()); + } + } + + public static void createLine(String name, List terminalNames) { + try { + if (duplicateName(name)) { + throw new IllegalArgumentException(ScriptUtils.ERROR_DUPLICATE(Category.LINE)); + } + } catch (IllegalArgumentException e) { + System.out.println(); + return; + } + Line line = new Line(name, terminalNames); + LineRepository.addLine(line); + } + + public static void deleteLine(String name) { + } + + private static boolean duplicateName(String input) { + boolean notDuplicate = LineRepository.findNoLine(input); + if (notDuplicate) { + return false; + } + return true; + } +} diff --git a/src/main/java/subway/domain/service/StationService.java b/src/main/java/subway/domain/service/StationService.java index 42728d1cd..a81a724b1 100644 --- a/src/main/java/subway/domain/service/StationService.java +++ b/src/main/java/subway/domain/service/StationService.java @@ -1,13 +1,24 @@ package subway.domain.service; +import java.util.List; +import java.util.stream.Collectors; import subway.domain.Station; import subway.domain.repository.StationRepository; +import utils.Category; import utils.ScriptUtils; public class StationService { private StationService() {} public static void createStation(String name) { + try { + if (duplicateName(name)) { + throw new IllegalArgumentException(); + } + } catch (IllegalArgumentException e) { + System.out.println(ScriptUtils.ERROR_DUPLICATE(Category.STATION)); + return; + } Station station = new Station(name); StationRepository.addStation(station); } @@ -20,6 +31,26 @@ public static void readStationList() { } public static void deleteStation(String name) { + try { + if (!duplicateName(name)) { + throw new IllegalArgumentException(); + } + } catch (IllegalArgumentException e) { + System.out.println(ScriptUtils.ERROR_NO(Category.STATION)); + return; + } StationRepository.deleteStation(name); } + + public static boolean duplicateName(String input) { + boolean notDuplicate = StationRepository.findNoStation(input); + if (notDuplicate) { + return false; + } + return true; + } + + public static Station readStation(String name) { + return StationRepository.readStation(name).get(0); + } } diff --git a/src/main/java/subway/view/DetailView.java b/src/main/java/subway/view/DetailView.java index 04ac96397..0937497aa 100644 --- a/src/main/java/subway/view/DetailView.java +++ b/src/main/java/subway/view/DetailView.java @@ -1,5 +1,8 @@ package subway.view; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.Scanner; import subway.domain.repository.StationRepository; import utils.Category; @@ -14,35 +17,34 @@ public DetailView(Category category) { this.category = category; } - public void ask(int selection) { - System.out.println(ScriptUtils.ASK_ANSWER_FOR[category.ordinal()][selection-1]); + public String ask(Scanner scanner, int selection) { + System.out.println(ScriptUtils.ASK_ANSWER_FOR(category, selection)); + return inputName(scanner); } - public String inputName(Scanner scanner, int selection) { + public String additionalAsk(Scanner scanner, String ask) { + if (category == Category.LINE) { + System.out.println(ask); + String answer = inputName(scanner); + return answer; + } + return null; + } + + public String inputName(Scanner scanner) { String input = scanner.nextLine(); try { - validateName(input); - return duplicateName(input, selection); + return validateName(input); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); } return null; } - private String duplicateName(String input, int selection) { - boolean notDuplicate = StationRepository.findNoStation(input); - if (!notDuplicate && selection == ADD) { - throw new IllegalArgumentException(ScriptUtils.ERROR_DUPLICATE(category)); - } - if (notDuplicate && selection == DELETE) { - throw new IllegalArgumentException(ScriptUtils.ERROR_NO(category)); - } - return input; - } - - private void validateName(String input) { + private String validateName(String input) { if (input.length() < 2) { throw new IllegalArgumentException(ScriptUtils.ERROR_TOO_SHORT(category)); } + return input; } } diff --git a/src/main/java/utils/Category.java b/src/main/java/utils/Category.java index 53e952abe..f3a94e5f2 100644 --- a/src/main/java/utils/Category.java +++ b/src/main/java/utils/Category.java @@ -3,9 +3,13 @@ public enum Category { MAIN("๋ฉ”์ธ"), STATION("์—ญ"), LINE("๋…ธ์„ "), SECTION("๊ตฌ๊ฐ„"); - Category(String name) {} + private String korean; - public String getName() { - return name(); + Category(String name) { + this.korean = name; + } + + public String getKorean() { + return korean; } } diff --git a/src/main/java/utils/ScriptUtils.java b/src/main/java/utils/ScriptUtils.java index d57daa630..f05f162cb 100644 --- a/src/main/java/utils/ScriptUtils.java +++ b/src/main/java/utils/ScriptUtils.java @@ -8,22 +8,34 @@ public class ScriptUtils { "\n## ๋…ธ์„  ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๋…ธ์„  ๋“ฑ๋ก\n2. ๋…ธ์„  ์‚ญ์ œ\n3. ๋…ธ์„  ์กฐํšŒ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n", "\n## ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๊ตฌ๊ฐ„ ๋“ฑ๋ก\n2. ๊ตฌ๊ฐ„ ์‚ญ์ œ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" }; - public static final String ASK_SELECTION = "## ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜์„ธ์š”."; - public static final String ERROR_OUT_OF_VALUE = "\n[ERROR] ์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.\n"; - public static final String[][] ASK_ANSWER_FOR = {{}, - {"\n## ๋“ฑ๋กํ•  ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.", "\n## ์‚ญ์ œํ•  ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."},}; public static final String STATION_LIST = "## ์—ญ ๋ชฉ๋ก"; + public static final String LINE_LIST = "## ๋…ธ์„  ๋ชฉ๋ก"; public static final String INFO = "[INFO] "; + public static final String ASK_SELECTION = "## ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜์„ธ์š”."; + + public static final String ASK_ANSWER_FOR(Category category, int selection) { + if (selection == 1) { + return "\n## ๋“ฑ๋กํ•  " + category.getKorean() + " ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + } + return "\n## ์‚ญ์ œํ•  " + category.getKorean()+ " ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”."; + } + + public static final String[] ASK_ADD_LINE = { + "## ๋“ฑ๋กํ•  ๋…ธ์„ ์˜ ์ƒํ–‰ ์ข…์ ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.", + "## ๋“ฑ๋กํ•  ๋…ธ์„ ์˜ ํ•˜ํ–‰ ์ข…์ ์—ญ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”." + }; + + public static final String ERROR_OUT_OF_VALUE = "\n[ERROR] ์„ ํƒํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.\n"; public static String ERROR_TOO_SHORT(Category category) { - return "\n[ERROR] " + category.getName() + " ์ด๋ฆ„์€ 2์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.\n"; + return "\n[ERROR] " + category.getKorean() + " ์ด๋ฆ„์€ 2์ž ์ด์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.\n"; } public static String ERROR_DUPLICATE(Category category) { - return "\n[ERROR] ์ด๋ฏธ ๋“ฑ๋ก๋œ " + category.getName() + " ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.\n"; + return "\n[ERROR] ์ด๋ฏธ ๋“ฑ๋ก๋œ " + category.getKorean() + " ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.\n"; } public static String ERROR_NO(Category category) { - return "\n[ERROR] ์กด์žฌํ•˜์ง€ ์•Š๋Š” " + category.getName() + " ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.\n"; + return "\n[ERROR] ์กด์žฌํ•˜์ง€ ์•Š๋Š” " + category.getKorean() + " ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.\n"; } } From 770d05053462f22667a97f0b1eacd26382f14937 Mon Sep 17 00:00:00 2001 From: 100-yeeun <100yeeun@gmail.com> Date: Tue, 15 Dec 2020 21:45:30 +0900 Subject: [PATCH 6/7] =?UTF-8?q?feat:=20=EB=85=B8=EC=84=A0=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C,=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/Application.java | 5 ++- .../subway/controller/LineController.java | 23 ++++++++------ .../subway/controller/MenuController.java | 5 +++ .../domain/repository/StationRepository.java | 2 +- .../subway/domain/service/LineService.java | 31 ++++++++++++++++++- .../subway/domain/service/StationService.java | 7 +++++ src/main/java/utils/InitUtils.java | 15 +++++++++ 7 files changed, 76 insertions(+), 12 deletions(-) create mode 100644 src/main/java/utils/InitUtils.java diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java index ebc1cb281..8597dc81f 100644 --- a/src/main/java/subway/Application.java +++ b/src/main/java/subway/Application.java @@ -2,11 +2,14 @@ import java.util.Scanner; import subway.controller.MenuController; +import subway.domain.service.LineService; +import subway.domain.service.StationService; public class Application { public static void main(String[] args) { final Scanner scanner = new Scanner(System.in); - + StationService.init(); + LineService.init(); MenuController.runProgram(scanner); } } diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java index 3b298d20b..c915f0e74 100644 --- a/src/main/java/subway/controller/LineController.java +++ b/src/main/java/subway/controller/LineController.java @@ -3,7 +3,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Scanner; -import subway.domain.Line; import subway.domain.Station; import subway.domain.service.LineService; import subway.domain.service.StationService; @@ -21,22 +20,29 @@ public class LineController { private LineController() {} public static void manageLine(Scanner scanner, int selection) { - if (selection == GET_LIST) { - LineService.readLineList(); - return; - } String name = lineView.ask(scanner, selection); if (name == null) { return; } - if (selection == ADD) { - addLine(scanner, name); + if (selection == DELETE) { + LineService.deleteLine(name); return; } - LineService.deleteLine(name); + addLine(scanner, name); } private static void addLine(Scanner scanner, String name) { + try { + if (LineService.duplicateName(name)) { + throw new IllegalArgumentException(ScriptUtils.ERROR_DUPLICATE(Category.LINE)); + } + addTerminals(scanner, name); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + } + } + + private static void addTerminals(Scanner scanner, String name) { List terminals = new ArrayList<>(); for (int i = 0; i < ScriptUtils.ASK_ADD_LINE.length; i++) { String terminalName = lineView.additionalAsk(scanner, ScriptUtils.ASK_ADD_LINE[i]); @@ -52,5 +58,4 @@ private static void addLine(Scanner scanner, String name) { } LineService.createLine(name, terminals); } - } diff --git a/src/main/java/subway/controller/MenuController.java b/src/main/java/subway/controller/MenuController.java index 6ae3070d9..254f4c2db 100644 --- a/src/main/java/subway/controller/MenuController.java +++ b/src/main/java/subway/controller/MenuController.java @@ -1,6 +1,7 @@ package subway.controller; import java.util.Scanner; +import subway.domain.service.LineService; import subway.view.MenuView; import utils.Category; @@ -42,6 +43,10 @@ public static void executeSelection(Category category, int selection, Scanner sc } if (category == Category.LINE) { + if (selection == LineController.GET_LIST) { + LineService.readLineList(); + return; + } LineController.manageLine(scanner, selection); } } diff --git a/src/main/java/subway/domain/repository/StationRepository.java b/src/main/java/subway/domain/repository/StationRepository.java index 29f572c9a..b0e68242a 100644 --- a/src/main/java/subway/domain/repository/StationRepository.java +++ b/src/main/java/subway/domain/repository/StationRepository.java @@ -29,6 +29,6 @@ public static boolean findNoStation(String name) { public static List readStation(String name) { return StationRepository.stations().stream().filter(station -> - station.getName() == name).collect(Collectors.toList()); + Objects.equals(station.getName(), name)).collect(Collectors.toList()); } } diff --git a/src/main/java/subway/domain/service/LineService.java b/src/main/java/subway/domain/service/LineService.java index 00e95cc2c..314cdb42d 100644 --- a/src/main/java/subway/domain/service/LineService.java +++ b/src/main/java/subway/domain/service/LineService.java @@ -1,15 +1,34 @@ package subway.domain.service; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import jdk.nashorn.internal.ir.Terminal; import subway.domain.Line; import subway.domain.Station; import subway.domain.repository.LineRepository; import utils.Category; +import utils.InitUtils; import utils.ScriptUtils; public class LineService { + private LineService() { + } + + public static void init() { + for (int i = 0; i < InitUtils.INIT_LINES.length; i++) { + List terminals; + String[] terminalNames = InitUtils.INIT_TERMINALS[i]; + terminals = Arrays.asList( + StationService.readStation(terminalNames[0]), + StationService.readStation(terminalNames[1]) + ); + createLine(InitUtils.INIT_LINES[i], terminals); + } + } + public static void readLineList() { System.out.println(ScriptUtils.LINE_LIST); for (Line line : LineRepository.lines()) { @@ -31,13 +50,23 @@ public static void createLine(String name, List terminalNames) { } public static void deleteLine(String name) { + try { + if (!duplicateName(name)) { + throw new IllegalArgumentException(ScriptUtils.ERROR_NO(Category.LINE)); + } + } catch (IllegalArgumentException e) { + System.out.println(); + return; + } + LineRepository.deleteLineByName(name); } - private static boolean duplicateName(String input) { + public static boolean duplicateName(String input) { boolean notDuplicate = LineRepository.findNoLine(input); if (notDuplicate) { return false; } return true; } + } diff --git a/src/main/java/subway/domain/service/StationService.java b/src/main/java/subway/domain/service/StationService.java index a81a724b1..04b5540be 100644 --- a/src/main/java/subway/domain/service/StationService.java +++ b/src/main/java/subway/domain/service/StationService.java @@ -5,11 +5,18 @@ import subway.domain.Station; import subway.domain.repository.StationRepository; import utils.Category; +import utils.InitUtils; import utils.ScriptUtils; public class StationService { private StationService() {} + public static void init() { + for (String station : InitUtils.INIT_STATIONS) { + createStation(station); + } + } + public static void createStation(String name) { try { if (duplicateName(name)) { diff --git a/src/main/java/utils/InitUtils.java b/src/main/java/utils/InitUtils.java new file mode 100644 index 000000000..81bd04d9a --- /dev/null +++ b/src/main/java/utils/InitUtils.java @@ -0,0 +1,15 @@ +package utils; + +public class InitUtils { + public static final String[] INIT_STATIONS = { + "๊ต๋Œ€์—ญ", "๊ฐ•๋‚จ์—ญ", "์—ญ์‚ผ์—ญ", "๋‚จ๋ถ€ํ„ฐ๋ฏธ๋„์—ญ", "์–‘์žฌ์—ญ", "์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ", "๋งค๋ด‰์—ญ" + }; + + public static final String[] INIT_LINES = { + "2ํ˜ธ์„ ", "3ํ˜ธ์„ ", "์‹ ๋ถ„๋‹น์„ " + }; + + public static final String[][] INIT_TERMINALS = { + {"๊ต๋Œ€์—ญ", "์—ญ์‚ผ์—ญ"}, {"๊ต๋Œ€์—ญ", "๋งค๋ด‰์—ญ"}, {"๊ฐ•๋‚จ์—ญ", "์–‘์žฌ์‹œ๋ฏผ์˜์ˆฒ์—ญ"} + }; +} From c174aeba13360d23bbb31c6231aa587ad83aff4d Mon Sep 17 00:00:00 2001 From: 100-yeeun <100yeeun@gmail.com> Date: Tue, 15 Dec 2020 23:51:34 +0900 Subject: [PATCH 7/7] =?UTF-8?q?feat:=20=EA=B5=AC=EA=B0=84=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D,=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subway/controller/MenuController.java | 18 ++-- .../subway/controller/SectionController.java | 84 +++++++++++++++++++ src/main/java/subway/domain/Line.java | 20 +++-- .../domain/repository/LineRepository.java | 6 ++ .../subway/domain/service/LineService.java | 6 +- .../subway/domain/service/SectionService.java | 44 ++++++++++ src/main/java/subway/view/DetailView.java | 20 +++++ src/main/java/utils/ScriptUtils.java | 10 ++- 8 files changed, 190 insertions(+), 18 deletions(-) create mode 100644 src/main/java/subway/controller/SectionController.java create mode 100644 src/main/java/subway/domain/service/SectionService.java diff --git a/src/main/java/subway/controller/MenuController.java b/src/main/java/subway/controller/MenuController.java index 254f4c2db..b398e4656 100644 --- a/src/main/java/subway/controller/MenuController.java +++ b/src/main/java/subway/controller/MenuController.java @@ -25,23 +25,18 @@ public static void runProgram(Scanner scanner) { private static void showSelectedView(int categoryNumber, Scanner scanner) { Category category = Category.values()[categoryNumber]; MenuView selectedView = new MenuView(category); - int stopOption = MenuView.RETRY; - while (stopOption != MenuView.EXIT) { - selectedView.printMenu(); - int selection = selectedView.selectMenu(scanner); - if (selection <= MenuView.EXIT) { - stopOption = selection; - continue; - } - executeSelection(category, selection, scanner); + selectedView.printMenu(); + int selection = selectedView.selectMenu(scanner); + if (selection <= MenuView.EXIT) { + return; } + executeSelection(category, selection, scanner); } public static void executeSelection(Category category, int selection, Scanner scanner) { if (category == Category.STATION) { StationController.manageStation(scanner, selection); } - if (category == Category.LINE) { if (selection == LineController.GET_LIST) { LineService.readLineList(); @@ -49,5 +44,8 @@ public static void executeSelection(Category category, int selection, Scanner sc } LineController.manageLine(scanner, selection); } + if(category == Category.SECTION) { + SectionController.manageSection(scanner, selection); + } } } diff --git a/src/main/java/subway/controller/SectionController.java b/src/main/java/subway/controller/SectionController.java new file mode 100644 index 000000000..243ec812c --- /dev/null +++ b/src/main/java/subway/controller/SectionController.java @@ -0,0 +1,84 @@ +package subway.controller; + +import java.util.Scanner; +import subway.domain.Line; +import subway.domain.Station; +import subway.domain.service.LineService; +import subway.domain.service.SectionService; +import subway.domain.service.StationService; +import subway.view.DetailView; +import utils.Category; +import utils.ScriptUtils; + +public class SectionController { + private static DetailView sectionView = new DetailView(Category.SECTION); + private static int askCount = 2; + private static int ADD = 1; + + private SectionController() { } + + public static void manageSection(Scanner scanner, int selection) { + if (selection == ADD) { + addSection(scanner, selection); + return; + } + + deleteSection(scanner, selection); + } + + private static void deleteSection(Scanner scanner, int selection) { + Line line = askLine(scanner, selection); + Station station = askStation(scanner, selection); + if (line != null && station != null) { + SectionService.deleteSection(line, station); + } + } + + private static void addSection(Scanner scanner, int selection) { + Line line = askLine(scanner, selection); + Station station = askStation(scanner, selection); + int idx = askIdx(scanner, selection, line); + + if (line != null && station != null && idx >= 0) { + SectionService.createSection(line, station, idx); + } + } + + private static int askIdx(Scanner scanner, int selection, Line line) { + int idx = sectionView.askSectionNumber(scanner, ScriptUtils.ASK_ANSWER_FOR_SECTION[selection-1][2]); + if (idx < 0) { + return idx; + } + try { + if (idx > line.getLength()) { + throw new IllegalArgumentException(ScriptUtils.ERROR_OUT_OF_BOUNDARY); + } + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return -1; + } + return idx; + } + + private static Station askStation(Scanner scanner, int selection) { + try { + String stationName = sectionView.askSection(scanner, ScriptUtils.ASK_ANSWER_FOR_SECTION[selection-1][1]); + SectionService.checkDuplicate(1, stationName); + return StationService.readStation(stationName); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return null; + } + } + + private static Line askLine(Scanner scanner, int selection) { + try { + String lineName = sectionView.askSection(scanner, ScriptUtils.ASK_ANSWER_FOR_SECTION[selection-1][0]); + SectionService.checkDuplicate(0, lineName); + return LineService.readLine(lineName); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return null; + } + } +} diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java index 2f6022a18..335e4f5b4 100644 --- a/src/main/java/subway/domain/Line.java +++ b/src/main/java/subway/domain/Line.java @@ -4,18 +4,28 @@ public class Line { private String name; - private Station upTerminal; - private Station downTerminal; + private List stations; public Line(String name, List terminals) { this.name = name; - this.upTerminal = terminals.get(0); - this.downTerminal = terminals.get(1); + this.stations = terminals; } public String getName() { return name; } - // ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ + public int getLength() { return stations.size(); } + + public boolean validateStation(Station station) { + return stations.contains(station); + } + + public void addStation(Station station, int idx) { + stations.add(idx-1, station); + } + + public void deleteStation(Station station) { + stations.remove(station); + } } diff --git a/src/main/java/subway/domain/repository/LineRepository.java b/src/main/java/subway/domain/repository/LineRepository.java index 6deefe783..5170865aa 100644 --- a/src/main/java/subway/domain/repository/LineRepository.java +++ b/src/main/java/subway/domain/repository/LineRepository.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; import subway.domain.Line; public class LineRepository { @@ -24,4 +25,9 @@ public static boolean deleteLineByName(String name) { public static boolean findNoLine(String name) { return lines.stream().noneMatch(line -> Objects.equals(line.getName(), name)); } + + public static Line findLine(String name) { + return lines.stream().filter(line -> + Objects.equals(line.getName(), name)).collect(Collectors.toList()).get(0); + } } diff --git a/src/main/java/subway/domain/service/LineService.java b/src/main/java/subway/domain/service/LineService.java index 314cdb42d..e408ee6f6 100644 --- a/src/main/java/subway/domain/service/LineService.java +++ b/src/main/java/subway/domain/service/LineService.java @@ -1,9 +1,7 @@ package subway.domain.service; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import jdk.nashorn.internal.ir.Terminal; import subway.domain.Line; import subway.domain.Station; import subway.domain.repository.LineRepository; @@ -29,6 +27,10 @@ public static void init() { } } + public static Line readLine(String name) { + return LineRepository.findLine(name); + } + public static void readLineList() { System.out.println(ScriptUtils.LINE_LIST); for (Line line : LineRepository.lines()) { diff --git a/src/main/java/subway/domain/service/SectionService.java b/src/main/java/subway/domain/service/SectionService.java new file mode 100644 index 000000000..956622624 --- /dev/null +++ b/src/main/java/subway/domain/service/SectionService.java @@ -0,0 +1,44 @@ +package subway.domain.service; + +import subway.domain.Line; +import subway.domain.Station; +import utils.Category; +import utils.ScriptUtils; + +public class SectionService { + public static final int ASK_LINE = 0; + public static final int ASK_STATION = 1; + + public static void checkDuplicate(int askIdx, String answer) { + if (askIdx == ASK_LINE) { + if (!LineService.duplicateName(answer)) { + throw new IllegalArgumentException(ScriptUtils.ERROR_NO(Category.LINE)); + } + } + if (askIdx == ASK_STATION) { + if (!StationService.duplicateName(answer)) { + throw new IllegalArgumentException(ScriptUtils.ERROR_NO(Category.STATION)); + } + } + } + + public static void createSection(Line line, Station station, int idx) { + try { + if (line.validateStation(station)) { + throw new IllegalArgumentException(ScriptUtils.ERROR_DUPLICATE(Category.STATION)); + } + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + return; + } + line.addStation(station, idx); + } + + public static void deleteSection(Line line, Station station) { + if (line.getLength() <= 2) { + System.out.println(ScriptUtils.ERROR_TOO_SMALL); + return; + } + line.deleteStation(station); + } +} diff --git a/src/main/java/subway/view/DetailView.java b/src/main/java/subway/view/DetailView.java index 0937497aa..871b592ee 100644 --- a/src/main/java/subway/view/DetailView.java +++ b/src/main/java/subway/view/DetailView.java @@ -22,6 +22,26 @@ public String ask(Scanner scanner, int selection) { return inputName(scanner); } + public String askSection(Scanner scanner, String script) { + System.out.println(script); + return inputName(scanner); + } + + public int askSectionNumber(Scanner scanner, String script) { + System.out.println(script); + return inputInt(scanner); + } + + private int inputInt(Scanner scanner) { + String input = scanner.nextLine(); + try { + return Integer.parseInt(input); + } catch (IllegalArgumentException e) { + System.out.println(ScriptUtils.ERROR_INVALIDATE_VALUE); + } + return -1; + } + public String additionalAsk(Scanner scanner, String ask) { if (category == Category.LINE) { System.out.println(ask); diff --git a/src/main/java/utils/ScriptUtils.java b/src/main/java/utils/ScriptUtils.java index f05f162cb..daecf5e78 100644 --- a/src/main/java/utils/ScriptUtils.java +++ b/src/main/java/utils/ScriptUtils.java @@ -3,7 +3,7 @@ public class ScriptUtils { public static final String[] MENUS = { - "## ๋ฉ”์ธ ํ™”๋ฉด\n1. ์—ญ ๊ด€๋ฆฌ\n2. ๋…ธ์„  ๊ด€๋ฆฌ\n3. ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ\n4. ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ์ถœ๋ ฅ\nQ. ์ข…๋ฃŒ\n", + "\n## ๋ฉ”์ธ ํ™”๋ฉด\n1. ์—ญ ๊ด€๋ฆฌ\n2. ๋…ธ์„  ๊ด€๋ฆฌ\n3. ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ\n4. ์ง€ํ•˜์ฒ  ๋…ธ์„ ๋„ ์ถœ๋ ฅ\nQ. ์ข…๋ฃŒ\n", "\n## ์—ญ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ์—ญ ๋“ฑ๋ก\n2. ์—ญ ์‚ญ์ œ\n3. ์—ญ ์กฐํšŒ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n", "\n## ๋…ธ์„  ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๋…ธ์„  ๋“ฑ๋ก\n2. ๋…ธ์„  ์‚ญ์ œ\n3. ๋…ธ์„  ์กฐํšŒ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n", "\n## ๊ตฌ๊ฐ„ ๊ด€๋ฆฌ ํ™”๋ฉด\n1. ๊ตฌ๊ฐ„ ๋“ฑ๋ก\n2. ๊ตฌ๊ฐ„ ์‚ญ์ œ\nB. ๋Œ์•„๊ฐ€๊ธฐ\n" @@ -12,6 +12,9 @@ public class ScriptUtils { public static final String LINE_LIST = "## ๋…ธ์„  ๋ชฉ๋ก"; public static final String INFO = "[INFO] "; public static final String ASK_SELECTION = "## ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์„ ํƒํ•˜์„ธ์š”."; + public static final String ERROR_INVALIDATE_VALUE = "\n[ERROR] ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."; + public static final String ERROR_OUT_OF_BOUNDARY = "\n[ERROR] ๋…ธ์„  ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„ญ๋‹ˆ๋‹ค."; + public static final String ERROR_TOO_SMALL = "\n[ERROR] ๋…ธ์„ ์— ์—ญ์ด 2๊ฐœ ๋ฐ–์— ์—†์–ด ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค."; public static final String ASK_ANSWER_FOR(Category category, int selection) { if (selection == 1) { @@ -38,4 +41,9 @@ public static String ERROR_DUPLICATE(Category category) { public static String ERROR_NO(Category category) { return "\n[ERROR] ์กด์žฌํ•˜์ง€ ์•Š๋Š” " + category.getKorean() + " ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.\n"; } + + public static String[][] ASK_ANSWER_FOR_SECTION = { + {"\n## ๋…ธ์„ ์„ ์ž…๋ ฅํ•˜์„ธ์š”.", "\n## ์—ญ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.", "\n## ์ˆœ์„œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”."}, + {} + }; }