diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 000000000..70842ae7e
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,97 @@
+# ๐ ๊ตฌํํ ๊ธฐ๋ฅ ๋ชฉ๋ก
+
+## ์
๋ ฅ
+- ๋ฉ๋ด๋ ๊ธฐ๋ฅ ์ ํ์ ์
๋ ฅ๊ฐ์ด ๋ฒ์ ์์ ์
๋ ฅ์ธ์ง ๊ฒ์ฆํ๋ค.
+### ์
๋ ฅ ์์ธ ์ํฉ
+- ๋ฉ์ธ๊ณผ ๊ด๋ฆฌ ํ๋ฉด์์ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ด ์๋๊ฒฝ์ฐ
+- ๋ฑ๋กํ ์งํ์ฒ ์ญ ๊ด๋ จ
+ - ์ด๋ฆ์ ๊ธธ์ด๊ฐ 2์ ๋ฏธ๋ง์ธ ๊ฒฝ์ฐ
+ - ์ด๋ฆ์ด '์ญ'์ผ๋ก ๋๋์ง ์๋ ๊ฒฝ์ฐ
+ - ์ด๋ฆ์ ๊ณต๋ฐฑ์ด ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ
+ - ์ด๋ฆ์ด ์ซ์์ ํ๊ธ์ด ์๋ ๊ฒฝ์ฐ
+ - ์ค๋ณต๋ ์ด๋ฆ์ธ ๊ฒฝ์ฐ
+- ๋ฑ๋กํ ๋
ธ์ ๊ด๋ จ
+ - ์ด๋ฆ์ ๊ธธ์ด๊ฐ 2์ ๋ฏธ๋ง์ธ ๊ฒฝ์ฐ
+ - ์ด๋ฆ์ด '์ '์ผ๋ก ๋๋์ง ์๋ ๊ฒฝ์ฐ
+ - ์ด๋ฆ์ด ์ซ์์ ํ๊ธ์ด ์๋ ๊ฒฝ์ฐ
+ - ์ํ ์ข
์ ์ญ๊ณผ ํํ ์ข
์ ์ญ์ ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ
+- ๋ฑ๋กํ ๊ตฌ๊ฐ ๊ด๋ จ
+ - ์ ํํ ๋
ธ์ ์ด ๋ฑ๋ก๋์ง ์์ ๋
ธ์ ์ธ ๊ฒฝ์ฐ
+ - ์ญ์ด๋ฆ์ด ๋ฑ๋ก๋์ง ์์ ๊ฒฝ์ฐ
+
+
+
+## ์ถ๋ ฅ
+- ์ดํ๋ฆฌ์ผ์ด์
ํ๋ฉด ๋ ์ด์์ ๊ตฌ์ฑ
+ 1. ์ฃผ ๋ฉ๋ด ํ๋ฉด
+ 2. ๊ธฐ๋ฅ ์ ํ ํ๋ฉด
+ - ์ธ๋ถ ๊ธฐ๋ฅ ํฌํจ
+ 3. ์
๋ ฅ ์๋ด ํ๋ฉด
+ 4. ์
๋ ฅ ๊ฒฐ๊ณผ ์ถ๋ ฅ
+- ์
๋ ฅ ์ ๋ ๋ฉ์์ง ์ถ๋ ฅ
+- ์
๋ ฅ ๋ฐ์ ๋ฉ์์ง ์ถ๋ ฅ
+ - ๊ธฐ๋ ์ถ๋ ฅ ๊ฒฐ๊ณผ์ '[INFO] ...'
+ - ์๋ฌ์ '[ERROR] ...'
+
+
+
+## ์ฃผ์ ๋ก์ง
+### ๋ฉ์ธํ๋ฉด
+- ์ ํํ ๋ฉ๋ด๋ก ์ด๋ ๋๋ ๊ธฐ๋ฅ์ ์คํํ๋ค.
+ - ์ญ ๊ด๋ฆฌ, ๋
ธ์ ๊ด๋ฆฌ, ๊ตฌ๊ฐ ๊ด๋ฆฌ -> ์ธ๋ถ ๊ธฐ๋ฅ ์ ํ ์๋ด
+ - ์งํ์ฒ ๋
ธ์ ๋ ์ถ๋ ฅ -> ๊ธฐ๋ฅ ์คํ
+ - ์ข
๋ฃ -> ์ดํ๋ฆฌ์ผ์ด์
์ข
๋ฃ
+
+### ์ญ ๊ด๋ฆฌ ๊ด๋ จ
+- ์ญ ๋ฑ๋ก
+ - ์
๋ ฅ๋ฐ์ ์ญ์ ๊ฒ์ฆ
+ - ๊ฒ์ฆ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ ์ฅ์์ ์ญ ์ ์ฅ ํ [INFO]๋๋ [ERROR] ๋ฉ์์ง ์ถ๋ ฅ
+- ์ญ ์ญ์
+ - ์
๋ ฅ๋ฐ์ ์ญ์ ๊ฒ์ฆ
+ - ๊ฒ์ฆ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ ์ฅ์์์ ์ญ์ ํ [INFO]๋๋ [ERROR] ๋ฉ์์ง ์ถ๋ ฅ
+- ์ญ ์กฐํ
+ - ์ ์ฅ์ ๋ชจ๋ ์ญ์ ํธ์ถํ์ฌ ์ถ๋ ฅ
+- ๋์๊ฐ๊ธฐ
+ - ๋ฉ์ธ ํ๋ฉด ํธ์ถ
+
+### ๋
ธ์ ๊ด๋ฆฌ ๊ด๋ จ
+- ๋
ธ์ ๋ฑ๋ก
+ 1. ๋ฑ๋กํ ๋
ธ์ ์ด๋ฆ ์
๋ ฅ ๊ฒ์ฆ
+ 2. ๋
ธ์ ์ ์ํ ์ข
์ ์ญ ์ด๋ฆ ์
๋ ฅ ๊ฒ์ฆ
+ 3. ๋
ธ์ ์ ํํ ์ข
์ ์ญ ์ด๋ฆ ์
๋ ฅ ๊ฒ์ฆ
+ 4. ๊ฒ์ฆ ํ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ ์ฅ์์ ์ ์ฅ ํ [INFO]๋๋ [ERROR] ๋ฉ์์ง ์ถ๋ ฅ
+- ๋
ธ์ ์ญ์
+ - ์
๋ ฅ๋ฐ์ ๋
ธ์ ๊ฒ์ฆ
+ - ๊ฒ์ฆ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ ์ฅ์์์ ์ญ์ ํ [INFO]๋๋ [ERROR] ๋ฉ์์ง ์ถ๋ ฅ
+- ๋
ธ์ ์กฐํ
+ - ์ ์ฅ์ ๋ชจ๋ ๋
ธ์ ํธ์ถํ์ฌ ์ถ๋ ฅ
+- ๋์๊ฐ๊ธฐ
+ - ๋ฉ์ธ ํ๋ฉด ํธ์ถ
+
+### ๊ตฌ๊ฐ ๊ด๋ฆฌ ๊ด๋ จ
+- ๊ตฌ๊ฐ ๋ฑ๋ก(๋
ธ์ ์ ์ญ์ ์ถ๊ฐ)
+ - ๊ตฌ๊ฐ ๋ฑ๋กํ ๋
ธ์ ๊ฒ์ฆ
+ - ์ญ ์ด๋ฆ ๊ฒ์ฆ
+ - ์์ ๊ฒ์ฆ
+ - ๊ฒ์ฆ ํ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ ์ฅ์์ ์ ์ฅ ๋ฐ ์ญ ์ฌ๋ฐฐ์ด ํ [INFO]๋๋ [ERROR] ๋ฉ์์ง ์ถ๋ ฅ
+- ๊ตฌ๊ฐ ์ญ์
+ - ์ญ์ ํ ๊ตฌ๊ฐ ๋
ธ์ ๊ฒ์ฆ
+ - ์ญ ์ด๋ฆ ๊ฒ์ฆ
+ - ๊ฒ์ฆ ํ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ ์ฅ์์์ ์ญ์ ๋ฐ ์ญ ์ฌ๋ฐฐ์ด ํ [INFO]๋๋ [ERROR] ๋ฉ์์ง ์ถ๋ ฅ
+- ๋์๊ฐ๊ธฐ
+ - ๋ฉ์ธ ํ๋ฉด ํธ์ถ
+
+### ์งํ์ฒ ๋
ธ์ ๋ ์ถ๋ ฅ ๊ด๋ จ
+- ๋
ธ์ ๋๋ ์ด๋ฆ ์์ผ๋ก ์ถ๋ ฅํ๋ค
+- ๊ฐ ๋
ธ์ ๋๋ ๋
ธ์ ์ ์ด๋ฆ๊ณผ ๋ฑ๋ก๋ ์ญ์ ํฌํจํ๋ค
+- ๋ฑ๋ก๋ ์ญ์ ์์๋๋ก ์ถ๋ ฅํ๋ค
+
+
+
+## ์ด๊ธฐ ์ค์
+- ์ญ ๋ฑ๋ก
+ - ๊ต๋์ญ, ๊ฐ๋จ์ญ, ์ญ์ผ์ญ, ๋จ๋ถํฐ๋ฏธ๋์ญ, ์์ฌ์ญ, ์์ฌ์๋ฏผ์์ฒ์ญ, ๋งค๋ด์ญ
+- ๋
ธ์ ๋ฑ๋ก(์ผ์ชฝ ๋์ด ์ํ ์ข
์ )
+ - 2ํธ์ : ๊ต๋์ญ - ๊ฐ๋จ์ญ - ์ญ์ผ์ญ
+ - 3ํธ์ : ๊ต๋์ญ - ๋จ๋ถํฐ๋ฏธ๋์ญ - ์์ฌ์ญ - ๋งค๋ด์ญ
+ - ์ ๋ถ๋น์ : ๊ฐ๋จ์ญ - ์์ฌ์ญ - ์์ฌ์๋ฏผ์์ฒ์ญ
\ No newline at end of file
diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java
index 0bcf786cc..8ee3d2246 100644
--- a/src/main/java/subway/Application.java
+++ b/src/main/java/subway/Application.java
@@ -1,10 +1,15 @@
package subway;
+import subway.controller.SubwayMap;
+
import java.util.Scanner;
public class Application {
public static void main(String[] args) {
final Scanner scanner = new Scanner(System.in);
// TODO: ํ๋ก๊ทธ๋จ ๊ตฌํ
+ DummyDataSetting.run();
+ SubwayMap subwayMap = new SubwayMap();
+ subwayMap.Run(scanner);
}
}
diff --git a/src/main/java/subway/DummyDataSetting.java b/src/main/java/subway/DummyDataSetting.java
new file mode 100644
index 000000000..f434e51ce
--- /dev/null
+++ b/src/main/java/subway/DummyDataSetting.java
@@ -0,0 +1,46 @@
+package subway;
+
+import subway.domain.Line;
+import subway.domain.LineRepository;
+import subway.domain.Station;
+import subway.domain.StationRepository;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class DummyDataSetting {
+
+ public static void run() {
+ /*
+ * ์ญ: ๊ต๋์ญ, ๊ฐ๋จ์ญ, ์ญ์ผ์ญ, ๋จ๋ถํฐ๋ฏธ๋์ญ, ์์ฌ์ญ, ์์ฌ์๋ฏผ์์ฒ์ญ, ๋งค๋ด์ญ
+ * ๋
ธ์ : 2ํธ์ , 3ํธ์ , ์ ๋ถ๋น์
+ * ๋
ธ์ ์ ์ญ
+ * - 2ํธ์ : ๊ต๋์ญ - ๊ฐ๋จ์ญ - ์ญ์ผ์ญ
+ * - 3ํธ์ : ๊ต๋์ญ - ๋จ๋ถํฐ๋ฏธ๋์ญ - ์์ฌ์ญ - ๋งค๋ด์ญ
+ * - ์ ๋ถ๋น์ : ๊ฐ๋จ์ญ - ์์ฌ์ญ - ์์ฌ์๋ฏผ์์ฒ์ญ
+ */
+ List stationNames = Arrays.asList("๊ต๋์ญ", "๊ฐ๋จ์ญ", "์ญ์ผ์ญ", "๋จ๋ถํฐ๋ฏธ๋์ญ", "์์ฌ์ญ",
+ "์์ฌ์๋ฏผ์์ฒ์ญ", "๋งค๋ด์ญ");
+ for (String name : stationNames) {
+ StationRepository.addStation(new Station(name));
+ }
+
+ List lineNames = Arrays.asList("2ํธ์ ", "3ํธ์ ", "์ ๋ถ๋น์ ");
+ for (String name : lineNames) {
+ LineRepository.addLine(new Line(name));
+ }
+
+ LineRepository.getLine("2ํธ์ ").addSectionByStation(StationRepository.getStation("๊ต๋์ญ"));
+ LineRepository.getLine("2ํธ์ ").addSectionByStation(StationRepository.getStation("๊ฐ๋จ์ญ"));
+ LineRepository.getLine("2ํธ์ ").addSectionByStation(StationRepository.getStation("์ญ์ผ์ญ"));
+
+ LineRepository.getLine("3ํธ์ ").addSectionByStation(StationRepository.getStation("๊ต๋์ญ"));
+ LineRepository.getLine("3ํธ์ ").addSectionByStation(StationRepository.getStation("๋จ๋ถํฐ๋ฏธ๋์ญ"));
+ LineRepository.getLine("3ํธ์ ").addSectionByStation(StationRepository.getStation("์์ฌ์ญ"));
+ LineRepository.getLine("3ํธ์ ").addSectionByStation(StationRepository.getStation("๋งค๋ด์ญ"));
+
+ LineRepository.getLine("์ ๋ถ๋น์ ").addSectionByStation(StationRepository.getStation("๊ฐ๋จ์ญ"));
+ LineRepository.getLine("์ ๋ถ๋น์ ").addSectionByStation(StationRepository.getStation("์์ฌ์ญ"));
+ LineRepository.getLine("์ ๋ถ๋น์ ").addSectionByStation(StationRepository.getStation("์์ฌ์๋ฏผ์์ฒ์ญ"));
+ }
+}
diff --git a/src/main/java/subway/LineManagementSign.java b/src/main/java/subway/LineManagementSign.java
new file mode 100644
index 000000000..032f34dd9
--- /dev/null
+++ b/src/main/java/subway/LineManagementSign.java
@@ -0,0 +1,27 @@
+package subway;
+
+import java.util.Arrays;
+
+public enum LineManagementSign {
+ ADD_LINE("1"),
+ DELETE_LINE("2"),
+ SHOW_LINES("3"),
+ BACK_TO_MAIN("B");
+
+ private String sign;
+
+ LineManagementSign(String sign) {
+ this.sign = sign;
+ }
+
+ public String getSign() {
+ return sign;
+ }
+
+ public static LineManagementSign validateSign(String inputData) {
+ return Arrays.stream(LineManagementSign.values())
+ .filter(sign -> inputData.toUpperCase().equals(sign.getSign()))
+ .findFirst()
+ .orElseThrow(() -> new IllegalArgumentException("์๋ ๊ธฐ๋ฅ"));
+ }
+}
diff --git a/src/main/java/subway/MainSign.java b/src/main/java/subway/MainSign.java
new file mode 100644
index 000000000..1be879320
--- /dev/null
+++ b/src/main/java/subway/MainSign.java
@@ -0,0 +1,28 @@
+package subway;
+
+import java.util.Arrays;
+
+public enum MainSign {
+ STATION_MANAGEMENT("1"),
+ LINE_MANAGEMENT("2"),
+ SECTION_MANAGEMENT("3"),
+ PRINT_SUBWAY_ROUTE("4"),
+ CLOSE_MAIN("Q");
+
+ private String sign;
+
+ MainSign(String sign) {
+ this.sign = sign;
+ }
+
+ public String getSign() {
+ return sign;
+ }
+
+ public static MainSign validateSign(String inputData) {
+ return Arrays.stream(MainSign.values())
+ .filter(sign -> inputData.toUpperCase().equals(sign.getSign()))
+ .findFirst()
+ .orElseThrow(() -> new IllegalArgumentException("์๋ ๊ธฐ๋ฅ"));
+ }
+}
diff --git a/src/main/java/subway/SectionManagementSign.java b/src/main/java/subway/SectionManagementSign.java
new file mode 100644
index 000000000..af4811e42
--- /dev/null
+++ b/src/main/java/subway/SectionManagementSign.java
@@ -0,0 +1,26 @@
+package subway;
+
+import java.util.Arrays;
+
+public enum SectionManagementSign {
+ ADD_SECTION("1"),
+ DELETE_SECTION("2"),
+ BACK_TO_MAIN("B");
+
+ private String sign;
+
+ SectionManagementSign(String sign) {
+ this.sign = sign;
+ }
+
+ public String getSign() {
+ return sign;
+ }
+
+ public static SectionManagementSign validateSign(String inputData) {
+ return Arrays.stream(SectionManagementSign.values())
+ .filter(sign -> inputData.toUpperCase().equals(sign.getSign()))
+ .findFirst()
+ .orElseThrow(() -> new IllegalArgumentException("์๋ ๊ธฐ๋ฅ"));
+ }
+}
diff --git a/src/main/java/subway/StationManagementSign.java b/src/main/java/subway/StationManagementSign.java
new file mode 100644
index 000000000..bfe9154d2
--- /dev/null
+++ b/src/main/java/subway/StationManagementSign.java
@@ -0,0 +1,27 @@
+package subway;
+
+import java.util.Arrays;
+
+public enum StationManagementSign {
+ ADD_STATION("1"),
+ DELETE_STATION("2"),
+ SHOW_STATIONS("3"),
+ BACK_TO_MAIN("B");
+
+ private String sign;
+
+ StationManagementSign(String sign) {
+ this.sign = sign;
+ }
+
+ public String getSign() {
+ return sign;
+ }
+
+ public static StationManagementSign validateSign(String inputData) {
+ return Arrays.stream(StationManagementSign.values())
+ .filter(sign -> inputData.toUpperCase().equals(sign.getSign()))
+ .findFirst()
+ .orElseThrow(() -> new IllegalArgumentException("์๋ ๊ธฐ๋ฅ"));
+ }
+}
diff --git a/src/main/java/subway/controller/ErrorHandler.java b/src/main/java/subway/controller/ErrorHandler.java
new file mode 100644
index 000000000..b757e8793
--- /dev/null
+++ b/src/main/java/subway/controller/ErrorHandler.java
@@ -0,0 +1,78 @@
+package subway.controller;
+
+import subway.domain.Line;
+import subway.domain.LineRepository;
+import subway.domain.Station;
+import subway.domain.StationRepository;
+
+import java.util.Objects;
+import java.util.regex.Pattern;
+
+public class ErrorHandler {
+ private static final String STATION_NAME_END = "์ญ";
+ private static final String LINE_NAME_END = "์ ";
+ private static final int NAME_MIN_LENGTH = 2;
+ private static final int LENGTH_TO_INDEX = 1;
+
+ public static void validateStationNameFormat(String inputData) {
+ if (inputData.length() < NAME_MIN_LENGTH
+ || !Pattern.matches("^[0-9๊ฐ-ํฃ]*$", inputData)
+ || !inputData.substring(inputData.length() - LENGTH_TO_INDEX).equals(STATION_NAME_END)) {
+ throw new IllegalArgumentException("format error");
+ }
+ }
+
+ public static void validateStationDuplicate(String inputData) {
+ if (StationRepository.isDuplicate(inputData)) {
+ throw new IllegalArgumentException("duplicate error");
+ }
+ }
+
+ public static void validateStationRegistered(String inputData) {
+ if (!StationRepository.isDuplicate(inputData)) {
+ throw new IllegalArgumentException("not registered error");
+ }
+ }
+
+ public static void validateLineNameFormat(String inputData) {
+ if (inputData.length() < NAME_MIN_LENGTH
+ || !Pattern.matches("^[0-9๊ฐ-ํฃ]*$", inputData)
+ || !inputData.substring(inputData.length() - LENGTH_TO_INDEX).equals(LINE_NAME_END)) {
+ throw new IllegalArgumentException("format error");
+ }
+ }
+
+ public static void validateLineDuplicate(String inputData) {
+ if (LineRepository.isDuplicate(inputData)) {
+ throw new IllegalArgumentException("duplicate error");
+ }
+ }
+
+ public static void validateLineRegistered(String inputData) {
+ if (!LineRepository.isDuplicate(inputData)) {
+ throw new IllegalArgumentException("not registered error");
+ }
+ }
+
+ public static void validateStationDuplicateInLine(Station targetStation, Line line) {
+ if (line.getSections().stream()
+ .anyMatch(station -> Objects.equals(station, targetStation))) {
+ throw new IllegalArgumentException("duplicate error");
+ }
+ }
+
+ public static void validateStationRegisteredInLine(Station targetStation, Line line) {
+ if (line.getSections().stream()
+ .noneMatch(station -> Objects.equals(station, targetStation))) {
+ throw new IllegalArgumentException("not registered error");
+ }
+ }
+
+ public static void validateOrder(String targetOrder, Line line) {
+ int order = Integer.parseInt(targetOrder);
+ if (order < 1 || order > line.getSections().size()) {
+ throw new IllegalArgumentException("inbound error");
+ }
+ }
+
+}
diff --git a/src/main/java/subway/controller/SubwayMap.java b/src/main/java/subway/controller/SubwayMap.java
new file mode 100644
index 000000000..4e555c36c
--- /dev/null
+++ b/src/main/java/subway/controller/SubwayMap.java
@@ -0,0 +1,345 @@
+package subway.controller;
+
+import subway.LineManagementSign;
+import subway.MainSign;
+import subway.SectionManagementSign;
+import subway.StationManagementSign;
+import subway.domain.*;
+import subway.view.InputView;
+import subway.view.OutputView;
+
+import java.util.Scanner;
+import java.util.function.Consumer;
+
+public class SubwayMap {
+ private boolean isRun = true;
+ private OutputView outputView;
+ private InputView inputView;
+ private Scanner scanner;
+
+ public void Run(Scanner scanner) {
+ this.scanner = scanner;
+ while (isRun) {
+ outputView = new OutputView();
+ inputView = new InputView();
+ startMain();
+ }
+ }
+
+ private void startMain() {
+ outputView.printMainScreen();
+ inputView.scanData(scanner);
+ validateSign(inputView.getInputData(),
+ t -> MainSign.validateSign(t),
+ () -> startMain());
+ chooseFunctionInMain(inputView.getInputData());
+ }
+
+ private void chooseFunctionInMain(String inputData) {
+ if (inputData.equals(MainSign.STATION_MANAGEMENT.getSign())) {
+ startStationManagement();
+ }
+ if (inputData.equals(MainSign.LINE_MANAGEMENT.getSign())) {
+ startLineManagement();
+ }
+ if (inputData.equals(MainSign.SECTION_MANAGEMENT.getSign())) {
+ startSectionManagement();
+ }
+ if (inputData.equals(MainSign.PRINT_SUBWAY_ROUTE.getSign())) {
+ outputView.printSubwaySections();
+ }
+ if (inputData.equalsIgnoreCase(MainSign.CLOSE_MAIN.getSign())) {
+ isRun = false;
+ }
+ }
+
+
+ private void startStationManagement() {
+ outputView.printStationManagementScreen();
+ inputView.scanData(scanner);
+ validateSign(inputView.getInputData(),
+ t -> StationManagementSign.validateSign(t),
+ () -> startStationManagement());
+ chooseFunctionInStationManagement(inputView.getInputData());
+
+ }
+
+ private void chooseFunctionInStationManagement(String inputData) {
+ if (inputData.equals(StationManagementSign.ADD_STATION.getSign())) {
+ addStation();
+ System.out.println("addStation ๋");
+ outputView.infoAddStation();
+ }
+ if (inputData.equals(StationManagementSign.DELETE_STATION.getSign())) {
+ deleteStation();
+ outputView.infoDeleteStation();
+ }
+ if (inputData.equals(StationManagementSign.SHOW_STATIONS.getSign())) {
+ outputView.printAllStations();
+ }
+ if (inputData.equalsIgnoreCase(StationManagementSign.BACK_TO_MAIN.getSign())) {
+ startMain();
+ }
+ }
+
+ private void addStation() {
+ outputView.guideAddStation();
+ inputView.scanData(scanner);
+ String name = inputView.getInputData();
+ validateStationName(name, () -> addStation());
+ validateStationDuplicate(name, () -> addStation());
+ StationRepository.addStation(new Station(name));
+ }
+
+ private void validateSign(String inputData, Consumer tryExpression, Runnable catchExpression) {
+ try {
+ tryExpression.accept(inputData);
+ } catch (IllegalArgumentException E) {
+ outputView.errorChooseFunction();
+ catchExpression.run();
+ }
+ }
+
+ private void validateStationName(String inputData, Runnable catchExpression) {
+ try {
+ ErrorHandler.validateStationNameFormat(inputData);
+ } catch (IllegalArgumentException E) {
+ outputView.errorStationFormat();
+ catchExpression.run();
+ }
+ }
+
+ private void validateStationDuplicate(String inputData, Runnable catchExpression) {
+ try {
+ ErrorHandler.validateStationDuplicate(inputData);
+ } catch (IllegalArgumentException E) {
+ outputView.errorStationDuplicate();
+ catchExpression.run();
+ }
+ }
+
+ private void validateStationRegistered(String inputData, Runnable catchExpression) {
+ try {
+ ErrorHandler.validateStationRegistered(inputData);
+ } catch (IllegalArgumentException E) {
+ outputView.errorDeleteStationNotRegistered();
+ catchExpression.run();
+ }
+ }
+
+ private void deleteStation() {
+ outputView.guideDeleteStation();
+ inputView.scanData(scanner);
+ validateStationName(inputView.getInputData(), () -> deleteStation());
+ validateStationRegistered(inputView.getInputData(), () -> deleteStation());
+ StationRepository.deleteStation(inputView.getInputData());
+ LineRepository.deleteStationInLine(inputView.getInputData());
+
+ }
+
+ private void startLineManagement() {
+ outputView.printLineManagementScreen();
+ inputView.scanData(scanner);
+ validateSign(inputView.getInputData(),
+ t -> LineManagementSign.validateSign(t),
+ () -> startLineManagement());
+ chooseFunctionInLineManagement(inputView.getInputData());
+ }
+
+ private void chooseFunctionInLineManagement(String inputData) {
+ if (inputData.equals(LineManagementSign.ADD_LINE.getSign())) {
+ addLine();
+ addUpwardTerminal();
+ addDownwardTerminal();
+ outputView.infoAddLine();
+ }
+ if (inputData.equals(LineManagementSign.DELETE_LINE.getSign())) {
+ deleteLine();
+ outputView.infoDeleteLine();
+ }
+ if (inputData.equals(LineManagementSign.SHOW_LINES.getSign())) {
+ outputView.printAllLines();
+ }
+ if (inputData.equalsIgnoreCase(LineManagementSign.BACK_TO_MAIN.getSign())) {
+ startMain();
+ }
+ }
+
+ private void addLine() {
+ outputView.guideAddLineName();
+ inputView.scanData(scanner);
+ String name = inputView.getInputData();
+ validateLineName(name, () -> addLine());
+ validateLineDuplicate(name, () -> addLine());
+ LineRepository.addLine(new Line(name));
+ }
+
+ private void addUpwardTerminal() {
+ outputView.guideAddLineUpwardTerminal();
+ inputView.scanData(scanner);
+ String name = inputView.getInputData();
+ validateStationName(name, () -> addUpwardTerminal());
+ validateStationRegistered(name, () -> addUpwardTerminal());
+ LineRepository.getNewLine().addSectionByStation(StationRepository.getStation(name));
+ }
+
+ private void addDownwardTerminal() {
+ outputView.guideAddLineDownwardTerminal();
+ inputView.scanData(scanner);
+ String name = inputView.getInputData();
+ validateStationName(name, () -> addDownwardTerminal());
+ validateStationRegistered(name, () -> addDownwardTerminal());
+ LineRepository.getNewLine().addSectionByStation(StationRepository.getStation(name));
+ }
+
+ private void deleteLine() {
+ outputView.guideDeleteLine();
+ inputView.scanData(scanner);
+ String name = inputView.getInputData();
+ validateLineName(name, () -> deleteLine());
+ validateLineRegistered(name, () -> deleteLine());
+ LineRepository.deleteLineByName(inputView.getInputData());
+ }
+
+ private void validateLineName(String inputData, Runnable catchExpression) {
+ try {
+ ErrorHandler.validateLineNameFormat(inputData);
+ } catch (IllegalArgumentException E) {
+ outputView.errorLineFormat();
+ catchExpression.run();
+ }
+ }
+
+ private void validateLineDuplicate(String inputData, Runnable catchExpression) {
+ try {
+ ErrorHandler.validateLineDuplicate(inputData);
+ } catch (IllegalArgumentException E) {
+ outputView.errorLineDuplicate();
+ catchExpression.run();
+ }
+ }
+
+ private void validateLineRegistered(String inputData, Runnable catchExpression) {
+ try {
+ ErrorHandler.validateLineRegistered(inputData);
+ } catch (IllegalArgumentException E) {
+ outputView.errorDeleteLineNotRegistered();
+ catchExpression.run();
+ }
+ }
+
+ private void startSectionManagement() {
+ outputView.printSectionManagementScreen();
+ inputView.scanData(scanner);
+ validateSign(inputView.getInputData(),
+ t -> SectionManagementSign.validateSign(t),
+ () -> startSectionManagement());
+ chooseFunctionInSectionManagement(inputView.getInputData());
+ }
+
+ private void chooseFunctionInSectionManagement(String inputData) {
+ if (inputData.equals(SectionManagementSign.ADD_SECTION.getSign())) {
+ addSection();
+ outputView.infoAddSection();
+ }
+ if (inputData.equals(SectionManagementSign.DELETE_SECTION.getSign())) {
+ deleteSection();
+ outputView.infoDeleteSection();
+ }
+ if (inputData.equalsIgnoreCase(SectionManagementSign.BACK_TO_MAIN.getSign())) {
+ startMain();
+ }
+ }
+
+ private void addSection() {
+ Line line;
+ Station station;
+ int order;
+ line = addCheckLine();
+ station = addCheckStation(line);
+ order = addcheckOrder(line);
+ line.addSectionByOrderAndStation(order, station);
+ }
+
+ private Line addCheckLine() {
+ outputView.guideCheckLine();
+ inputView.scanData(scanner);
+ String name = inputView.getInputData();
+ validateLineName(name, () -> addSection());
+ validateLineRegistered(name, () -> addSection());
+ return LineRepository.getLine(name);
+ }
+
+ private Station addCheckStation(Line line) {
+ outputView.guideCheckSectionStation();
+ inputView.scanData(scanner);
+ String name = inputView.getInputData();
+ validateStationName(name, () -> addSection());
+ validateStationRegistered(name, () -> addSection());
+ validateStationDuplicateInLine(StationRepository.getStation(name), line, () -> addSection());
+ return StationRepository.getStation(name);
+ }
+
+ private int addcheckOrder(Line line) {
+ outputView.guideCheckSectionOrder();
+ inputView.scanData(scanner);
+ String order = inputView.getInputData();
+ validateOrder(order, line, () -> addSection());
+ return Integer.parseInt(order);
+ }
+
+ private void validateStationDuplicateInLine(Station station, Line line, Runnable expression) {
+ try {
+ ErrorHandler.validateStationDuplicateInLine(station, line);
+ } catch (IllegalArgumentException E) {
+ outputView.errorStationDuplicate();
+ expression.run();
+ }
+ }
+
+ private void validateOrder(String order, Line line, Runnable expression) {
+ try {
+ ErrorHandler.validateOrder(order, line);
+ } catch (NumberFormatException E) {
+ outputView.errorParseIntOrder();
+ expression.run();
+ } catch (IllegalArgumentException E) {
+ outputView.errorInBoundOrder();
+ expression.run();
+ }
+ }
+
+ private void deleteSection() {
+ Line line = deleteCheckLine();
+ Station station = deleteCheckStation(line);
+ line.deleteSectionByName(station.getName());
+ }
+
+ private Line deleteCheckLine() {
+ outputView.guideDeleteSectionLine();
+ inputView.scanData(scanner);
+ String name = inputView.getInputData();
+ validateLineName(name, () -> deleteSection());
+ validateLineRegistered(name, () -> deleteSection());
+ return LineRepository.getLine(name);
+ }
+
+ private Station deleteCheckStation(Line line) {
+ outputView.guideDeleteSectionStation();
+ inputView.scanData(scanner);
+ String name = inputView.getInputData();
+ validateStationName(name, () -> deleteSection());
+ validateStationRegistered(name, () -> deleteSection());
+ validateStationRegisteredInLine(StationRepository.getStation(name), line, () -> deleteSection());
+ return StationRepository.getStation(name);
+ }
+
+ private void validateStationRegisteredInLine(Station station, Line line, Runnable expression) {
+ try {
+ ErrorHandler.validateStationRegisteredInLine(station, line);
+ } catch (IllegalArgumentException E) {
+ outputView.errorStationDuplicate();
+ expression.run();
+ }
+ }
+}
diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java
index f4d738d5a..2f1cc75e9 100644
--- a/src/main/java/subway/domain/Line.java
+++ b/src/main/java/subway/domain/Line.java
@@ -1,5 +1,9 @@
package subway.domain;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Objects;
+
public class Line {
private String name;
@@ -12,4 +16,22 @@ public String getName() {
}
// ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ
+ private static final int FROM_ORDER_TO_INDEX = 1;
+ private List sections = new LinkedList<>();
+
+ public List getSections() {
+ return sections;
+ }
+
+ public void addSectionByStation(Station station) {
+ sections.add(station);
+ }
+
+ public void addSectionByOrderAndStation(int orderOfRoute, Station station) {
+ sections.add(orderOfRoute - FROM_ORDER_TO_INDEX, station);
+ }
+
+ public boolean deleteSectionByName(String name) {
+ return sections.removeIf(station -> Objects.equals(station.getName(), name));
+ }
}
diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java
index 49132ddb6..ba95b24ec 100644
--- a/src/main/java/subway/domain/LineRepository.java
+++ b/src/main/java/subway/domain/LineRepository.java
@@ -19,4 +19,32 @@ public static void addLine(Line line) {
public static boolean deleteLineByName(String name) {
return lines.removeIf(line -> Objects.equals(line.getName(), name));
}
+
+ private static final int FROM_ORDER_TO_INDEX = 1;
+
+ public static Line getLine(String name) {
+ return lines.stream()
+ .filter(station -> station.getName().equals(name))
+ .findAny()
+ .get();
+ }
+
+ public static Line getNewLine() {
+ return lines.get(lines.size() - FROM_ORDER_TO_INDEX);
+ }
+
+ public static void deleteStationInLine(String name) {
+ for (Line line : lines) {
+ line.getSections().removeIf(station -> Objects.equals(station.getName(), name));
+ }
+ }
+
+ public static boolean isDuplicate(String name) {
+ return lines.stream()
+ .anyMatch(station -> station.getName().equals(name));
+ }
+
+ public static List getLines() {
+ return lines;
+ }
}
diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java
index b7245c0f3..5a7dc09c2 100644
--- a/src/main/java/subway/domain/StationRepository.java
+++ b/src/main/java/subway/domain/StationRepository.java
@@ -19,4 +19,20 @@ public static void addStation(Station station) {
public static boolean deleteStation(String name) {
return stations.removeIf(station -> Objects.equals(station.getName(), name));
}
+
+ public static Station getStation(String name) {
+ return stations.stream()
+ .filter(station -> station.getName().equals(name))
+ .findAny()
+ .get();
+ }
+
+ public static boolean isDuplicate(String name) {
+ return stations.stream()
+ .anyMatch(station -> station.getName().equals(name));
+ }
+
+ public static List getStations() {
+ return stations;
+ }
}
diff --git a/src/main/java/subway/view/InputView.java b/src/main/java/subway/view/InputView.java
new file mode 100644
index 000000000..5bda58b72
--- /dev/null
+++ b/src/main/java/subway/view/InputView.java
@@ -0,0 +1,16 @@
+package subway.view;
+
+import java.util.Scanner;
+
+public class InputView {
+ private String inputData;
+
+ public String getInputData() {
+ return inputData;
+ }
+
+ public void scanData(Scanner scanner) {
+ inputData = scanner.nextLine();
+ System.out.println();
+ }
+}
diff --git a/src/main/java/subway/view/OutputView.java b/src/main/java/subway/view/OutputView.java
new file mode 100644
index 000000000..b393a7238
--- /dev/null
+++ b/src/main/java/subway/view/OutputView.java
@@ -0,0 +1,229 @@
+package subway.view;
+
+import subway.domain.Line;
+import subway.domain.LineRepository;
+import subway.domain.Station;
+import subway.domain.StationRepository;
+
+public class OutputView {
+ private static final String NEXT_LINE = "\n";
+ private static final String GUIDE_MESSAGE_START = "##";
+ private static final String GUIDE_MESSAGE_END_CHOOSE_FUNCTION = "์ํ๋ ๊ธฐ๋ฅ์ ์ ํํ์ธ์.";
+ private static final String GUIDE_MESSAGE_END_ADD_STATION = "๋ฑ๋กํ ์ญ ์ด๋ฆ์ ์
๋ ฅํ์ธ์.";
+ private static final String GUIDE_MESSAGE_END_DELETE_STATION = "์ญ์ ํ ์ญ ์ด๋ฆ์ ์
๋ ฅํ์ธ์.";
+ private static final String GUIDE_MESSAGE_END_ADD_LINE_NAME = "๋ฑ๋กํ ๋
ธ์ ์ด๋ฆ์ ์
๋ ฅํ์ธ์.";
+ private static final String GUIDE_MESSAGE_END_ADD_LINE_UPWARD_TERMINAL = "๋ฑ๋กํ ๋
ธ์ ์ ์ํ ์ข
์ ์ญ ์ด๋ฆ์ ์
๋ ฅํ์ธ์.";
+ private static final String GUIDE_MESSAGE_END_ADD_LINE_DOWNWARD_TERMINAL = "๋ฅ๋กํ ๋
ธ์ ์ ํํ ์ข
์ ์ญ ์ด๋ฆ์ ์
๋ ฅํ์ธ์.";
+ private static final String GUIDE_MESSAGE_END_DELETE_LINE = "์ญ์ ํ ๋
ธ์ ์ด๋ฆ์ ์
๋ ฅํ์ธ์.";
+ private static final String GUIDE_MESSAGE_END_CKECK_SECTION_LINE = "๋
ธ์ ์ ์
๋ ฅํ์ธ์.";
+ private static final String GUIDE_MESSAGE_END_CHECK_SECTION_STATION = "์ญ ์ด๋ฆ์ ์
๋ ฅํ์ธ์.";
+ private static final String GUIDE_MESSAGE_END_CHECK_SECTION_ORDER = "์์๋ฅผ ์
๋ ฅํ์ธ์.";
+ private static final String GUIDE_MESSAGE_END_DELETE_SECTION_LINE = "์ญ์ ํ ๊ตฌ๊ฐ์ ๋
ธ์ ์ ์
๋ ฅํ์ธ์.";
+ private static final String GUIDE_MESSAGE_END_DELETE_SECTION_STATION = "์ญ์ ํ ๊ตฌ๊ฐ์ ์ญ์ ์
๋ ฅํ์ธ์.";
+
+ private static final String INFO_MESSAGE_START = "[INFO]";
+ private static final String INFO_MESSAGE_END_ADD_STATION = "์งํ์ฒ ์ญ์ด ๋ฑ๋ก๋์์ต๋๋ค.";
+ private static final String INFO_MESSAGE_END_DELETE_STATION = "์งํ์ฒ ์ญ์ด ์ญ์ ๋์์ต๋๋ค.";
+ private static final String INFO_MESSAGE_END_ADD_LINE = "์งํ์ฒ ๋
ธ์ ์ด ๋ฑ๋ก๋์์ต๋๋ค.";
+ private static final String INFO_MESSAGE_END_DELETE_LINE = "์งํ์ฒ ๋
ธ์ ์ด ์ญ์ ๋์์ต๋๋ค.";
+ private static final String INFO_MESSAGE_END_ADD_SECTION = "๊ตฌ๊ฐ์ด ๋ฑ๋ก๋์์ต๋๋ค.";
+ private static final String INFO_MESSAGE_END_DELETE_SECTION = "๊ตฌ๊ฐ์ด ์ญ์ ๋์์ต๋๋ค.";
+
+ private static final String ERROR_MESSAGE_START = "[ERROR]";
+ private static final String ERROR_MESSAGE_END_CHOOSE_FUNCTION = "์ ํํ ์ ์๋ ๊ธฐ๋ฅ์
๋๋ค.";
+ private static final String ERROR_MESSAGE_END_ADD_STATION_FORMAT = "์ญ ์ด๋ฆ์ 2๊ธ์ ์ด์, ํ๊ธ๊ณผ ์ซ์ ์กฐํฉ์ด๋ฉฐ, '-์ญ'์ผ๋ก ๋๋์ผ ํฉ๋๋ค.";
+ private static final String ERROR_MESSAGE_END_ADD_STATION_DUPLICATE = "์ด๋ฏธ ๋ฑ๋ก๋ ์ญ ์ด๋ฆ์
๋๋ค.";
+ private static final String ERROR_MESSAGE_END_DELETE_STATION_NOT_REGISTERED = "๋ฑ๋ก๋์ง ์์ ์ญ์
๋๋ค.";
+ private static final String ERROR_MESSAGE_END_ADD_LINE_FORMAT = "๋
ธ์ ์ด๋ฆ์ 2๊ธ์ ์ด์, ํ๊ธ๊ณผ ์ซ์ ์กฐํฉ์ด๋ฉฐ, '-์ '์ผ๋ก ๋๋์ผ ํฉ๋๋ค.";
+ private static final String ERROR_MESSAGE_END_ADD_LINE_DUPLICATE = "์ด๋ฏธ ๋ฑ๋ก๋ ๋
ธ์ ์ด๋ฆ์
๋๋ค.";
+ private static final String ERROR_MESSAGE_END_DELETE_LINE_NOT_REGISTERED = "๋ฑ๋ก๋์ง ์์ ๋
ธ์ ์
๋๋ค.";
+ private static final String ERROR_MESSAGE_END_PARSEINT_ORDER = "๊ตฌ๊ฐ ์์๋ ์ซ์์ฌ์ผ ํฉ๋๋ค.";
+ private static final String ERROR_MESSAGE_END_INBOUND_ORDER = "๊ตฌ๊ฐ ์์๋ 1์ด์์ด๋ฉฐ ํด๋น ๋
ธ์ ๊ตฌ๊ฐ์ ๊ธธ์ด ์ดํ์
๋๋ค.";
+
+ public void guideChooseFunction() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_CHOOSE_FUNCTION));
+ }
+
+ public void guideAddStation() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_ADD_STATION));
+ }
+
+ public void guideDeleteStation() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_DELETE_STATION));
+ }
+
+ public void guideAddLineName() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_ADD_LINE_NAME));
+ }
+
+ public void guideAddLineUpwardTerminal() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_ADD_LINE_UPWARD_TERMINAL));
+ }
+
+ public void guideAddLineDownwardTerminal() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_ADD_LINE_DOWNWARD_TERMINAL));
+ }
+
+ public void guideDeleteLine() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_DELETE_LINE));
+ }
+
+ public void guideCheckLine() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_CKECK_SECTION_LINE));
+ }
+
+ public void guideCheckSectionStation() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_CHECK_SECTION_STATION));
+ }
+
+ public void guideCheckSectionOrder() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_CHECK_SECTION_ORDER));
+ }
+
+ public void guideDeleteSectionLine() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_DELETE_SECTION_LINE));
+ }
+
+ public void guideDeleteSectionStation() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, GUIDE_MESSAGE_END_DELETE_SECTION_STATION));
+ }
+
+ public void errorChooseFunction() {
+ System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_CHOOSE_FUNCTION));
+ System.out.println();
+ }
+
+ public void infoAddStation() {
+ System.out.println(String.join(" ", INFO_MESSAGE_START, INFO_MESSAGE_END_ADD_STATION));
+ System.out.println();
+ }
+
+ public void errorStationFormat() {
+ System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_ADD_STATION_FORMAT));
+ System.out.println();
+ }
+
+ public void errorStationDuplicate() {
+ System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_ADD_STATION_DUPLICATE));
+ System.out.println();
+ }
+
+ public void infoDeleteStation() {
+ System.out.println(String.join(" ", INFO_MESSAGE_START, INFO_MESSAGE_END_DELETE_STATION));
+ System.out.println();
+ }
+
+ public void errorDeleteStationNotRegistered() {
+ System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_DELETE_STATION_NOT_REGISTERED));
+ System.out.println();
+ }
+
+ public void infoAddLine() {
+ System.out.println(String.join(" ", INFO_MESSAGE_START, INFO_MESSAGE_END_ADD_LINE));
+ System.out.println();
+ }
+
+ public void errorLineFormat() {
+ System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_ADD_LINE_FORMAT));
+ System.out.println();
+ }
+
+ public void errorLineDuplicate() {
+ System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_ADD_LINE_DUPLICATE));
+ System.out.println();
+ }
+
+ public void infoDeleteLine() {
+ System.out.println(String.join(" ", INFO_MESSAGE_START, INFO_MESSAGE_END_DELETE_LINE));
+ System.out.println();
+ }
+
+ public void errorDeleteLineNotRegistered() {
+ System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_DELETE_LINE_NOT_REGISTERED));
+ System.out.println();
+ }
+
+ public void infoAddSection() {
+ System.out.println(String.join(" ", INFO_MESSAGE_START, INFO_MESSAGE_END_ADD_SECTION));
+ System.out.println();
+ }
+
+ public void errorParseIntOrder() {
+ System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_PARSEINT_ORDER));
+ System.out.println();
+ }
+
+ public void errorInBoundOrder() {
+ System.out.println(String.join(" ", ERROR_MESSAGE_START, ERROR_MESSAGE_END_INBOUND_ORDER));
+ System.out.println();
+ }
+
+ public void infoDeleteSection() {
+ System.out.println(String.join(" ", INFO_MESSAGE_START, INFO_MESSAGE_END_DELETE_SECTION));
+ System.out.println();
+ }
+
+ public void printMainScreen() {
+ System.out.println("## ๋ฉ์ธ ํ๋ฉด");
+ System.out.println("1. ์ญ ๊ด๋ฆฌ");
+ System.out.println("2. ๋
ธ์ ๊ด๋ฆฌ");
+ System.out.println("3. ๊ตฌ๊ฐ ๊ด๋ฆฌ");
+ System.out.println("4. ์งํ์ฒ ๋
ธ์ ๋ ์ถ๋ ฅ");
+ System.out.println("Q. ์ข
๋ฃ" + NEXT_LINE);
+ guideChooseFunction();
+ }
+
+ public void printStationManagementScreen() {
+ System.out.println("## ์ญ ๊ด๋ฆฌ ํ๋ฉด");
+ System.out.println("1. ์ญ ๋ฑ๋ก");
+ System.out.println("2. ์ญ ์ญ์ ");
+ System.out.println("3. ์ญ ์กฐํ");
+ System.out.println("B. ๋์๊ฐ๊ธฐ" + NEXT_LINE);
+ guideChooseFunction();
+ }
+
+ public void printLineManagementScreen() {
+ System.out.println("## ๋
ธ์ ๊ด๋ฆฌ ํ๋ฉด");
+ System.out.println("1. ๋
ธ์ ๋ฑ๋ก");
+ System.out.println("2. ๋
ธ์ ์ญ์ ");
+ System.out.println("3. ๋
ธ์ ์กฐํ");
+ System.out.println("B. ๋์๊ฐ๊ธฐ" + NEXT_LINE);
+ guideChooseFunction();
+ }
+
+ public void printSectionManagementScreen() {
+ System.out.println("## ๊ตฌ๊ฐ ๊ด๋ฆฌ ํ๋ฉด");
+ System.out.println("1. ๊ตฌ๊ฐ ๋ฑ๋ก");
+ System.out.println("2. ๊ตฌ๊ฐ ์ญ์ ");
+ System.out.println("B. ๋์๊ฐ๊ธฐ" + NEXT_LINE);
+ guideChooseFunction();
+ }
+
+ public void printAllStations() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, "์ญ ๋ชฉ๋ก"));
+ for (Station station : StationRepository.getStations()) {
+ System.out.println(String.join(" ", INFO_MESSAGE_START, station.getName()));
+ }
+ System.out.println();
+ }
+
+ public void printAllLines() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, "๋
ธ์ ๋ชฉ๋ก"));
+ for (Line line : LineRepository.getLines()) {
+ System.out.println(String.join(" ", INFO_MESSAGE_START, line.getName()));
+ }
+ System.out.println();
+ }
+
+ public void printSubwaySections() {
+ System.out.println(String.join(" ", GUIDE_MESSAGE_START, "์งํ์ฒ ๋
ธ์ ๋"));
+ for (Line line : LineRepository.getLines()) {
+ System.out.println(String.join(" ", INFO_MESSAGE_START, line.getName()));
+ System.out.println(String.join(" ", INFO_MESSAGE_START, "---"));
+ for (Station station : line.getSections()) {
+ System.out.println(String.join(" ", INFO_MESSAGE_START, station.getName()));
+ }
+ System.out.println();
+ }
+ }
+}