diff --git a/README.md b/README.md
index 450e7753a..12f51f866 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,58 @@
+## π κΈ°λ₯ μ μ
+
+- λ©μΈ νλ©΄μ μΆλ ₯νλ€
+- μνλ κΈ°λ₯μ μ
λ ₯λ°μ μ€ννλ€.
+- [ERROR] λͺ©λ‘μ μλ κΈ°λ₯μ΄λΌλ©΄ μλ¬ μ¬νμ μΆλ ₯νλ€.
+- 1. μ κ΄λ¦¬
+ - μ λ±λ‘ : μ¬μ©μμκ² μ
λ ₯λ°μ μμ λ±λ‘νλ€.
+ - μ μμ : μ¬μ©μμκ² μ
λ ₯λ°μ μμ μμ νλ€.
+ - μ μ‘°ν : νμ¬ λ±λ‘λ μμ μ 체 λͺ©λ‘μ μΆλ ₯νλ€.
+ - [ERROR] μ λ±λ‘ μ μ μ΄λ¦μ΄ 2κΈμ μ΄νμ΄λ©΄ μλ¬ μ¬νμ μΆλ ₯νλ€.
+ - [ERROR] μ λ±λ‘ μ μ€λ³΅λ μ μ΄λ¦μ΄λΌλ©΄ μλ¬ μ¬νμ μΆλ ₯νλ€.
+ - [ERROR] μ μμ μ μμ ν΄μΌ νλ μμ΄ μ‘΄μ¬νμ§ μλλ€λ©΄ μλ¬ μ¬νμ μΆλ ₯νλ€.
+- 2. λ
Έμ κ΄λ¦¬
+ - λ
Έμ λ±λ‘ : λ
Έμ μ μ΄λ¦, μν μ’
μ μ, νν μ’
μ μμ μ
λ ₯λ°μ λ
Έμ μ λ±λ‘νλ€.
+ - λ
Έμ μμ : νμ¬ λ±λ‘λ λ
Έμ μ μ 체 λͺ©λ‘μ μΆλ ₯νλ€.
+ - λ
Έμ μ‘°ν : μ¬μ©μμκ² μ
λ ₯λ°μ λ
Έμ μ μμ νλ€.
+ - [ERROR] λ
Έμ λ±λ‘ μ λ
Έμ μ΄λ¦μ΄ 2κΈμ μ΄νμ΄λ©΄ μλ¬ μ¬νμ μΆλ ₯νλ€.
+ - [ERROR] λ
Έμ λ±λ‘ μ μ€λ³΅λ λ
Έμ μ΄λ¦μ΄λΌλ©΄ μλ¬ μ¬νμ μΆλ ₯νλ€.
+ - [ERROR] λ
Έμ λ±λ‘ μ μν μ’
μ μ, νν μ’
μ μμΌλ‘ μ
λ ₯λ μμ΄ λ±λ‘λμ§ μμ μμΈ κ²½μ° μλ¬ μ¬νμ μΆλ ₯νλ€.
+ - [ERROR] λ
Έμ μμ μ μμ ν΄μΌ νλ λ
Έμ μ΄ μ‘΄μ¬νμ§ μλλ€λ©΄ μλ¬ μ¬νμ μΆλ ₯νλ€.
+- 3. κ΅¬κ° κ΄λ¦¬
+ - κ΅¬κ° λ±λ‘ : λ
Έμ κ³Ό μ μ΄λ¦μ μ
λ ₯λ°μ ꡬκ°μ λ±λ‘νλ€.
+ - κ΅¬κ° μμ : λ
Έμ κ³Ό μ μ΄λ¦μ μ
λ ₯λ°μ ꡬκ°μ μμ νλ€.
+ - [ERROR] κ΅¬κ° λ±λ‘ μ μ€λ³΅λ λ
Έμ κ³Ό μ μ΄λ¦μ΄λΌλ©΄ μλ¬ μ¬νμ μΆλ ₯νλ€.
+ - [ERROR] κ΅¬κ° λ±λ‘ μ νμ¬ λ
Έμ μ λ²μ λ°μ΄λΌλ©΄ μλ¬ μ¬νμ μΆλ ₯νλ€.
+ - [ERROR] κ΅¬κ° μμ μ μμ ν΄μΌ νλ λ
Έμ κ³Ό μ μ΄λ¦μ΄ μ‘΄μ¬νμ§ μλλ€λ©΄ μλ¬ μ¬νμ μΆλ ₯νλ€.
+ - [ERROR] κ΅¬κ° μμ μ μμ ν΄ν νλ μμ΄ ν¬ν¨λ λ
Έμ μ μμ΄ 2κ° μ΄νλ‘ μλ€λ©΄ μλ¬ μ¬νμ μΆλ ₯νλ€.
+- 4. μ§νμ² λ
Έμ λ μΆλ ₯
+ - μ 체 λ
Έμ λ λͺ©λ‘μ μΆλ ₯νλ€.
+- Q. μ’
λ£
+
+
+
+## βοΈ ν΄λμ€ μ μ
+
+- *domain*
+ - Input : μ¬μ©μμκ² κΈ°λ₯μ μ νλ°λ λ©μΈ νλ©΄μ μΆλ ₯νλ ν΄λμ€
+ - Station : μ μ΄λ¦μ κ°μ§λ κ°μ²΄ ν΄λμ€
+ - Line : λ
Έμ μ΄λ¦κ³Ό λ
Έμ μ ν¬ν¨λ μ μ 보λ₯Ό κ°μ§κ³ κ΄λ¦¬νλ ν΄λμ€
+ - Constant : νλ‘κ·Έλ¨ λ΄μμ μ¬μ©λλ μμλ₯Ό κ°μ§κ³ μλ ν΄λμ€
+- *repository*
+ - StationRepository : μ λ±λ‘, μμ λ₯Ό μννλ ν¨μλ₯Ό κ°μ§λ ν΄λμ€
+ - LineRepository : λ
Έμ λ±λ‘, μμ λ₯Ό μννλ ν¨μλ₯Ό κ°μ§λ ν΄λμ€
+ - SectionRepository : κ΅¬κ° λ±λ‘, μμ λ₯Ό μννλ ν¨μλ₯Ό κ°μ§λ ν΄λμ€
+- *controller*
+ - StationController : μ λ±λ‘, μμ μ λν κ²°κ³Όλ₯Ό μΆλ ₯νκ³ , μ 체 μ μ‘°νλ₯Ό μννλ ν΄λμ€
+ - LineController : λ
Έμ λ±λ‘, μμ μ λν κ²°κ³Όλ₯Ό μΆλ ₯νκ³ , μ 체 λ
Έμ μ‘°νλ₯Ό μννλ ν΄λμ€
+ - SectionController : κ΅¬κ° λ±λ‘, μμ μ λν κ²°κ³Όλ₯Ό μΆλ ₯νκ³ , μ 체 μ§νμ² λ
Έμ κ³Ό ν¬ν¨λ μ μ‘°νλ₯Ό μννλ ν΄λμ€
+- *Application* : Input ν΄λμ€μ λ©μλλ₯Ό νΈμΆν΄ νλ‘κ·Έλ¨μ μμνκ³ flagλ‘ νλ‘κ·Έλ¨ μ’
λ£λ₯Ό κ΄λ¦¬νλ ν΄λμ€
+
+
+
## π κΈ°λ₯ μꡬμ¬ν
### μ΄κΈ° μ€μ
@@ -17,10 +69,10 @@
- 2νΈμ : κ΅λμ - κ°λ¨μ - μμΌμ
- 3νΈμ : κ΅λμ - λ¨λΆν°λ―Έλμ - μμ¬μ - 맀λ΄μ
- μ λΆλΉμ : κ°λ¨μ - μμ¬μ - μμ¬μλ―Όμμ²μ
- ```
+```
-
+
### μ§νμ² μ κ΄λ ¨ κΈ°λ₯
- μ§νμ² μμ λ±λ‘νκ³ μμ ν μ μλ€. (λ¨, λ
Έμ μ λ±λ‘λ μμ μμ ν μ μλ€)
- μ€λ³΅λ μ§νμ² μ μ΄λ¦μ΄ λ±λ‘λ μ μλ€.
@@ -410,7 +462,7 @@ public class Application {
- μ 곡νλ κ° ν΄λμ€μ κΈ°λ³Έ μμ±μλ₯Ό μΆκ°ν μ μλ€.
- νλ(μΈμ€ν΄μ€ λ³μ)μΈ nameμ μ κ·Ό μ μ΄μ privateμ λ³κ²½ν μ μλ€.
- κ°λ₯νλ©΄ setter λ©μλ(ex. setXXX)λ₯Ό μΆκ°νμ§ μκ³ κ΅¬ννλ€.
-
+
```java
public class Station {
private String name;
@@ -434,7 +486,7 @@ public class Station {
- μΆκ°λ‘ μμ±λλ κ°μ²΄μ λν΄μ XXXRepository λ€μ΄λ°μΌλ‘ μ μ₯ ν΄λμ€λ₯Ό μΆκ°ν μ μλ€.
- κ°μ²΄λ€μ μνλ₯Ό κ΄λ¦¬νκΈ° μν΄μ XXXRepository ν΄λμ€λ₯Ό νμ©ν΄ μ μ₯ λ‘μ§μ ꡬνν΄μΌ νλ€.
- νμμ λ°λΌ μμ λ‘κ² μμ μ΄ κ°λ₯νλ€.
-
+
```java
public class StationRepository {
private static final List stations = new ArrayList<>();
diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java
index 0bcf786cc..7f6d251f6 100644
--- a/src/main/java/subway/Application.java
+++ b/src/main/java/subway/Application.java
@@ -1,10 +1,37 @@
package subway;
+import subway.domain.*;
+import subway.repository.LineRepository;
+import subway.repository.StationRepository;
+
+import java.util.Arrays;
import java.util.Scanner;
public class Application {
public static void main(String[] args) {
final Scanner scanner = new Scanner(System.in);
- // TODO: νλ‘κ·Έλ¨ κ΅¬ν
+ initialSetting();
+ Input input = new Input(scanner);
+ while (!input.quit) {
+ input.mainInput();
+ }
+ }
+
+ static void initialSetting() {
+ StationRepository stationRepository = new StationRepository();
+ LineRepository lineRepository = new LineRepository();
+ Station station1 = new Station("κ΅λμ");
+ Station station2 = new Station("κ°λ¨μ");
+ Station station3 = new Station("μμΌμ");
+ Station station4 = new Station("λ¨λΆν°λ―Έλμ");
+ Station station5 = new Station("μμ¬μ");
+ Station station6 = new Station("μμ¬μλ―Όμμ²μ");
+ Station station7 = new Station("맀λ΄μ");
+ stationRepository.addStations(Arrays.asList(station1, station2, station3, station4, station5, station6, station7));
+ Line line1 = new Line("2νΈμ ", station1, station2, station3);
+ Line line2 = new Line("3νΈμ ", station1, station4, station5, station7);
+ Line line3 = new Line("μ λΆλΉμ ", station2, station5, station6);
+ lineRepository.addLines(Arrays.asList(line1, line2, line3));
+
}
}
diff --git a/src/main/java/subway/domain/Constant.java b/src/main/java/subway/domain/Constant.java
new file mode 100644
index 000000000..33ec3c740
--- /dev/null
+++ b/src/main/java/subway/domain/Constant.java
@@ -0,0 +1,30 @@
+package subway.domain;
+
+public class Constant {
+ public static final int MIN_LENGTH = 2;
+ public static final String FIRST_COMMAND = "1";
+ public static final String SECOND_COMMAND = "2";
+ public static final String THIRD_COMMAND = "3";
+ public static final String FORTH_COMMAND = "4";
+ public static final String QUIT_COMMAND = "Q";
+ public static final String BACK_COMMAND = "B";
+
+ public static final String ERROR_PREFIX = "[ERROR]";
+ public static final String INFO_PREFIX = "[INFO]";
+
+ public static final String MAIN_ANNOUNCEMENT = "\n## λ©μΈ νλ©΄\n1. μ κ΄λ¦¬\n2. λ
Έμ κ΄λ¦¬\n3. κ΅¬κ° κ΄λ¦¬\n4. μ§νμ² λ
Έμ λ μΆλ ₯\nQ. μ’
λ£\n";
+ public static final String STATION_ANNOUNCEMENT = "\n## μ κ΄λ¦¬ νλ©΄\n1. μ λ±λ‘\n2. μ μμ \n3. μ μ‘°ν\nB. λμκ°κΈ°";
+ public static final String LINE_ANNOUNCEMENT = "\n## λ
Έμ κ΄λ¦¬ νλ©΄\n1. λ
Έμ λ±λ‘\n2. λ
Έμ μμ \n3. λ
Έμ μ‘°ν\nB. λμκ°κΈ°";
+ public static final String SECTION_ANNOUNCEMENT = "\n## κ΅¬κ° κ΄λ¦¬ νλ©΄\n1. κ΅¬κ° λ±λ‘\n2. κ΅¬κ° μμ \nB. λμκ°κΈ°\n";
+ public static final String INPUT_ANNOUNCEMENT = "## μνλ κΈ°λ₯μ μ ννμΈμ.\n";
+ public static final String INPUT_ERROR_ANNOUNCEMENT = "μ νν μ μλ κΈ°λ₯μ
λλ€.";
+ public static final String NO_EXIST_INFO = "λ±λ‘λμ§ μμ μ λλ λ
Έμ μ
λλ€.\n";
+ public static final String LINE_STATION_POSTFIX = "μ’
μ μ μ΄λ¦μ μ
λ ₯νμΈμ.";
+ public static final String DUPLICATE_STATION_NAME = "μ΄λ―Έ λ±λ‘λ μμ
λλ€.\n";
+
+ public static final String ADD_PREFIX = "\n## λ±λ‘ν ";
+ public static final String DELETE_PREFIX = "\n## μμ ν ";
+ public static final String NAME_POSTFIX = "μ΄λ¦μ μ
λ ₯ν΄μ£ΌμΈμ.";
+ public static final String FAIL = "μ€ν¨νμ΅λλ€.";
+ public static final String NAME_LENGTH_SHORT = "μ΄λ¦μ 2κΈμ μ΄μμ΄μ΄μΌ ν©λλ€.";
+}
diff --git a/src/main/java/subway/domain/Input.java b/src/main/java/subway/domain/Input.java
new file mode 100644
index 000000000..0ed1043c0
--- /dev/null
+++ b/src/main/java/subway/domain/Input.java
@@ -0,0 +1,48 @@
+package subway.domain;
+
+import subway.view.LineController;
+import subway.view.SectionController;
+import subway.view.StationController;
+
+import java.util.Scanner;
+
+public class Input {
+ Scanner scanner;
+ private StationController stationController;
+ private LineController lineController;
+ private SectionController sectionController;
+ public static Boolean quit = false;
+
+ public Input(Scanner scanner) {
+ this.scanner = scanner;
+ stationController = new StationController(scanner);
+ lineController = new LineController(scanner);
+ sectionController = new SectionController(scanner);
+ }
+
+ public void mainInput() {
+ System.out.print(String.join("\n", Constant.MAIN_ANNOUNCEMENT, Constant.INPUT_ANNOUNCEMENT));
+ String flag = scanner.next();
+ if (flag.equals(Constant.FIRST_COMMAND)) {
+ stationController.printSelection();
+ return;
+ }
+ if (flag.equals(Constant.SECOND_COMMAND)) {
+ lineController.printSelection();
+ return;
+ }
+ if (flag.equals(Constant.THIRD_COMMAND)) {
+ sectionController.printSelection();
+ return;
+ }
+ if (flag.equals(Constant.FORTH_COMMAND)) {
+ sectionController.readSections();
+ return;
+ }
+ if (flag.equals(Constant.QUIT_COMMAND)) {
+ quit = true;
+ return;
+ }
+ System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.INPUT_ERROR_ANNOUNCEMENT));
+ }
+}
diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java
index f4d738d5a..11b47477f 100644
--- a/src/main/java/subway/domain/Line.java
+++ b/src/main/java/subway/domain/Line.java
@@ -1,15 +1,36 @@
package subway.domain;
+import java.util.ArrayList;
+import java.util.List;
+
public class Line {
private String name;
+ public List stations = new ArrayList();
public Line(String name) {
this.name = name;
}
+ public Line(String name, Station... stations) {
+ this.name = name;
+ for(int i=0; i< stations.length; i++){
+ this.stations.add(stations[i]);
+ }
+ }
+
public String getName() {
return name;
}
- // μΆκ° κΈ°λ₯ ꡬν
+ public boolean existStation(String stationName) {
+ return stations.stream().anyMatch(s -> s.getName().equals(stationName));
+ }
+
+ public void addStation(String stationName, int order) {
+ stations.add(order-1, new Station(stationName));
+ }
+
+ public boolean checkStationSize() {
+ return stations.size() <= Constant.MIN_LENGTH;
+ }
}
diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java
deleted file mode 100644
index 49132ddb6..000000000
--- a/src/main/java/subway/domain/LineRepository.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package subway.domain;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-
-public class LineRepository {
- private static final List lines = new ArrayList<>();
-
- public static List lines() {
- return Collections.unmodifiableList(lines);
- }
-
- public static void addLine(Line line) {
- lines.add(line);
- }
-
- public static boolean deleteLineByName(String name) {
- return lines.removeIf(line -> Objects.equals(line.getName(), name));
- }
-}
diff --git a/src/main/java/subway/domain/Station.java b/src/main/java/subway/domain/Station.java
index bdb142590..16ec4c0e1 100644
--- a/src/main/java/subway/domain/Station.java
+++ b/src/main/java/subway/domain/Station.java
@@ -11,5 +11,4 @@ public String getName() {
return name;
}
- // μΆκ° κΈ°λ₯ ꡬν
}
diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/StationRepository.java
deleted file mode 100644
index b7245c0f3..000000000
--- a/src/main/java/subway/domain/StationRepository.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package subway.domain;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-
-public class StationRepository {
- private static final List stations = new ArrayList<>();
-
- public static List stations() {
- return Collections.unmodifiableList(stations);
- }
-
- public static void addStation(Station station) {
- stations.add(station);
- }
-
- public static boolean deleteStation(String name) {
- return stations.removeIf(station -> Objects.equals(station.getName(), name));
- }
-}
diff --git a/src/main/java/subway/repository/LineRepository.java b/src/main/java/subway/repository/LineRepository.java
new file mode 100644
index 000000000..328e56660
--- /dev/null
+++ b/src/main/java/subway/repository/LineRepository.java
@@ -0,0 +1,46 @@
+package subway.repository;
+
+import subway.domain.Line;
+import subway.domain.Station;
+import subway.repository.StationRepository;
+
+import java.util.*;
+
+public class LineRepository {
+ public static final List lines = new ArrayList<>();
+ private static StationRepository stationRepository = new StationRepository();
+
+ public static List lines() {
+ return Collections.unmodifiableList(lines);
+ }
+
+ public static void addLines(List lineList){
+ lineList.forEach(line -> lines.add(line));
+ }
+
+ public static void addLine(String lineName, String upwardName, String downwardName) {
+ if (stationRepository.checkNameLength(lineName)) {
+ throw new IllegalStateException();
+ }
+ if (checkExistLine(lineName) || !stationRepository.checkExistStation(upwardName)
+ || !stationRepository.checkExistStation(downwardName) || upwardName.equals(downwardName)) {
+ throw new IllegalArgumentException();
+ }
+ Line line = new Line(lineName);
+ line.stations.add(new Station(upwardName));
+ line.stations.add(new Station(downwardName));
+ lines.add(line);
+ }
+
+ public static boolean deleteLineByName(String lineName) {
+ if (!checkExistLine(lineName)) {
+ throw new IllegalArgumentException();
+ }
+ return lines.removeIf(line -> Objects.equals(line.getName(), lineName));
+ }
+
+ public static boolean checkExistLine(String lineName) {
+ return lines.stream().anyMatch(o -> o.getName().equals(lineName));
+ }
+
+}
diff --git a/src/main/java/subway/repository/SectionRepository.java b/src/main/java/subway/repository/SectionRepository.java
new file mode 100644
index 000000000..7b4227752
--- /dev/null
+++ b/src/main/java/subway/repository/SectionRepository.java
@@ -0,0 +1,44 @@
+package subway.repository;
+
+import subway.domain.Line;
+
+import java.util.*;
+
+public class SectionRepository {
+ private static LineRepository lineRepository = new LineRepository();
+ private static StationRepository stationRepository = new StationRepository();
+
+ public static void addSection(String lineName, String stationName, int order) {
+ if (!validate(lineName, stationName)) {
+ throw new IllegalArgumentException();
+ }
+ try {
+ Line targetLine = lineRepository.lines.stream().filter(l -> lineName.equals(l.getName())).findFirst().get();
+ if (targetLine.existStation(stationName)) {
+ throw new IllegalStateException();
+ }
+ targetLine.addStation(stationName, order);
+ } catch (IndexOutOfBoundsException e) {
+ throw new IndexOutOfBoundsException();
+ }
+ }
+
+ public static boolean deleteSection(String lineName, String stationName) {
+ if (!validate(lineName, stationName)) {
+ throw new IllegalArgumentException();
+ }
+ Line line = lineRepository.lines.stream().filter(l -> lineName.equals(l.getName())).findFirst().get();
+ if (line.checkStationSize()) {
+ throw new IllegalStateException();
+ }
+ return line.stations.removeIf(s -> Objects.equals(s.getName(), stationName));
+ }
+
+ static boolean validate(String lineName, String stationName) {
+ if (!lineRepository.checkExistLine(lineName) || !stationRepository.checkExistStation(stationName)) {
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/src/main/java/subway/repository/StationRepository.java b/src/main/java/subway/repository/StationRepository.java
new file mode 100644
index 000000000..a93783d55
--- /dev/null
+++ b/src/main/java/subway/repository/StationRepository.java
@@ -0,0 +1,43 @@
+package subway.repository;
+
+import subway.domain.Constant;
+import subway.domain.Station;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+
+public class StationRepository {
+ public static final List stations = new ArrayList<>();
+
+ public static List stations() {
+ return Collections.unmodifiableList(stations);
+ }
+
+ public static void addStations(List stations){
+ stations.forEach(StationRepository::addStation);
+ }
+
+ public static void addStation(Station station) {
+ if (checkNameLength(station.getName())) {
+ throw new IllegalStateException();
+ }
+ if (checkExistStation(station.getName())) {
+ throw new IllegalArgumentException();
+ }
+ stations.add(station);
+ }
+
+ public static boolean deleteStation(String name) {
+ return stations.removeIf(station -> Objects.equals(station.getName(), name));
+ }
+
+ public static boolean checkExistStation(String stationName) {
+ return stations.stream().anyMatch(o -> o.getName().equals(stationName));
+ }
+
+ public static boolean checkNameLength(String name) {
+ return name.length() <= Constant.MIN_LENGTH;
+ }
+}
diff --git a/src/main/java/subway/view/LineController.java b/src/main/java/subway/view/LineController.java
new file mode 100644
index 000000000..612283ca3
--- /dev/null
+++ b/src/main/java/subway/view/LineController.java
@@ -0,0 +1,64 @@
+package subway.view;
+
+import subway.domain.Constant;
+import subway.repository.LineRepository;
+
+import java.util.Scanner;
+
+public class LineController {
+ private static final String ADD_LINE_SUCCESS = "μ§νμ² λ
Έμ μ΄ λ±λ‘λμμ΅λλ€.\n";
+ private static final String DELETE_LINE_SUCCESS = "μ§νμ² λ
Έμ μ΄ μμ λμμ΅λλ€.\n";
+ private Scanner scanner;
+ private LineRepository lineRepository = new LineRepository();
+
+ public LineController(Scanner scanner) {
+ this.scanner = scanner;
+ }
+
+ public void printSelection() {
+ System.out.println(Constant.LINE_ANNOUNCEMENT);
+ String command = scanner.next();
+ if (command.equals(Constant.FIRST_COMMAND)) {
+ addLine();
+ } else if (command.equals(Constant.SECOND_COMMAND)) {
+ deleteLine();
+ } else if (command.equals(Constant.THIRD_COMMAND)) {
+ readLines();
+ } else if (command.equals(Constant.BACK_COMMAND)) {
+ return;
+ }
+ }
+
+ void addLine() {
+ System.out.println(String.join(" λ
Έμ ", Constant.ADD_PREFIX, Constant.NAME_POSTFIX));
+ String lineName = scanner.next();
+ System.out.println(String.join(" λ
Έμ μ μν ", Constant.ADD_PREFIX, Constant.LINE_STATION_POSTFIX));
+ String upwardName = scanner.next();
+ System.out.println(String.join(" λ
Έμ μ νν ", Constant.ADD_PREFIX, Constant.LINE_STATION_POSTFIX));
+ String downwardName = scanner.next();
+ try {
+ lineRepository.addLine(lineName, upwardName, downwardName);
+ System.out.println(String.join(" ", Constant.INFO_PREFIX, ADD_LINE_SUCCESS));
+ } catch (IllegalArgumentException e) {
+ System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.FAIL));
+ } catch (IllegalStateException e) {
+ System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.NAME_LENGTH_SHORT));
+ }
+ }
+
+ void deleteLine() {
+ System.out.println(String.join(" λ
Έμ ", Constant.DELETE_PREFIX, Constant.NAME_POSTFIX));
+ String lineName = scanner.next();
+ if (lineRepository.deleteLineByName(lineName)) {
+ System.out.println(String.join(" ", Constant.INFO_PREFIX, DELETE_LINE_SUCCESS));
+ return;
+ }
+ System.out.println(String.join(" ", Constant.ERROR_PREFIX, Constant.FAIL));
+ }
+
+ void readLines() {
+ for (int i = 0; i < lineRepository.lines.size(); i++) {
+ System.out.println(String.join(" ", Constant.INFO_PREFIX, lineRepository.lines.get(i).getName()));
+ }
+ }
+}
diff --git a/src/main/java/subway/view/SectionController.java b/src/main/java/subway/view/SectionController.java
new file mode 100644
index 000000000..5926e3edb
--- /dev/null
+++ b/src/main/java/subway/view/SectionController.java
@@ -0,0 +1,97 @@
+package subway.view;
+
+import subway.domain.Constant;
+import subway.repository.LineRepository;
+import subway.repository.SectionRepository;
+
+import java.util.Scanner;
+
+public class SectionController {
+ private static final String GET_LINE_NAME = "\n## λ
Έμ μ μ
λ ₯νμΈμ.";
+ private static final String GET_STATION_NAME = "\n## μ μ΄λ¦μ μ
λ ₯νμΈμ.";
+ private static final String GET_ORDER_NAME = "\n## μμλ₯Ό μ
λ ₯νμΈμ.";
+ private static final String GET_DELETE_LINE_NAME = "\n## μμ ν ꡬκ°μ λ
Έμ μ μ
λ ₯νμΈμ.";
+ private static final String GET_DELETE_STATION_NAME = "\n## μμ ν ꡬκ°μ μμ μ
λ ₯νμΈμ.";
+ private static final String NO_SECTION_INFO = "λ±λ‘λ λ
Έμ μ΄ μμ΅λλ€.";
+ private static final String ADD_SECTION_SUCCESS = "ꡬκ°μ΄ λ±λ‘λμμ΅λλ€.\n";
+ private static final String DELETE_SECTION_SUCCESS = "ꡬκ°μ΄ μμ λμμ΅λλ€.\n";
+ private static final String NOT_ADD_POSSIBLE_SECTION = "μΆκ°ν μ μλ ꡬκ°μ
λλ€.";
+ private static final String NOT_DELETE_POSSIBLE_SECTION = "μμ ν μ μλ ꡬκ°μ
λλ€.";
+ private static final String NOT_NUMBER_FORMAT = "μμμλ μ«μλ§ μ
λ ₯ κ°λ₯ν©λλ€.";
+ private static final String BAR = "---";
+ private Scanner scanner;
+ private SectionRepository sectionRepository = new SectionRepository();
+ private LineRepository lineRepository = new LineRepository();
+
+ public SectionController(Scanner scanner) {
+ this.scanner = scanner;
+ }
+
+ public void printSelection() {
+ System.out.println(Constant.SECTION_ANNOUNCEMENT);
+ String command = scanner.next();
+ if (command.equals(Constant.FIRST_COMMAND)) {
+ addSection();
+ } else if (command.equals(Constant.SECOND_COMMAND)) {
+ deleteSection();
+ } else if (command.equals(Constant.BACK_COMMAND)) {
+ return;
+ }
+ }
+
+ void addSection() {
+ System.out.println(GET_LINE_NAME);
+ String lineName = scanner.next();
+ System.out.println(GET_STATION_NAME);
+ String stationName = scanner.next();
+ System.out.println(GET_ORDER_NAME);
+ String order = scanner.next();
+ try {
+ int orderNum = Integer.parseInt(order);
+ sectionRepository.addSection(lineName, stationName, orderNum);
+ System.out.println(String.join(" ", Constant.INFO_PREFIX, ADD_SECTION_SUCCESS));
+ } catch (NumberFormatException e) {
+ System.err.println(String.join(" ", Constant.ERROR_PREFIX, NOT_NUMBER_FORMAT));
+ } catch (IllegalArgumentException e) {
+ System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.NO_EXIST_INFO));
+ } catch (IndexOutOfBoundsException e) {
+ System.err.println(String.join(" ", Constant.ERROR_PREFIX, NOT_ADD_POSSIBLE_SECTION));
+ } catch (IllegalStateException e) {
+ System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.DUPLICATE_STATION_NAME));
+ }
+ }
+
+ void deleteSection() {
+ System.out.println(GET_DELETE_LINE_NAME);
+ String lineName = scanner.next();
+ System.out.println(GET_DELETE_STATION_NAME);
+ String stationName = scanner.next();
+ try {
+ boolean deleteFlag = sectionRepository.deleteSection(lineName, stationName);
+ if (deleteFlag) {
+ System.out.println(String.join(" ", Constant.INFO_PREFIX, DELETE_SECTION_SUCCESS));
+ return;
+ }
+ System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.FAIL));
+ } catch (IllegalArgumentException e) {
+ System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.NO_EXIST_INFO));
+ } catch (IllegalStateException e) {
+ System.err.println(String.join(" ", Constant.ERROR_PREFIX, NOT_DELETE_POSSIBLE_SECTION));
+ }
+
+ }
+
+ public void readSections() {
+ if (lineRepository.lines.size() == 0) {
+ System.err.println(String.join(" ", Constant.ERROR_PREFIX, NO_SECTION_INFO));
+ return;
+ }
+ for (int i = 0; i < lineRepository.lines.size(); i++) {
+ System.out.println("\n" + String.join(" ", Constant.INFO_PREFIX, lineRepository.lines.get(i).getName()));
+ System.out.println(String.join(" ", Constant.INFO_PREFIX, BAR));
+ for (int j = 0; j < lineRepository.lines.get(i).stations.size(); j++) {
+ System.out.println(String.join(" ", Constant.INFO_PREFIX, lineRepository.lines.get(i).stations.get(j).getName()));
+ }
+ }
+ }
+}
diff --git a/src/main/java/subway/view/StationController.java b/src/main/java/subway/view/StationController.java
new file mode 100644
index 000000000..6213efcb8
--- /dev/null
+++ b/src/main/java/subway/view/StationController.java
@@ -0,0 +1,62 @@
+package subway.view;
+
+import subway.domain.Constant;
+import subway.domain.Station;
+import subway.repository.StationRepository;
+
+import java.util.Scanner;
+
+public class StationController {
+ private static final String ADD_STATION_SUCCESS = "μ§νμ² μμ΄ λ±λ‘λμμ΅λλ€.\n";
+ private static final String DELETE_STATION_SUCCESS = "μ§νμ² μμ΄ μμ λμμ΅λλ€.\n";
+ private Scanner scanner;
+ private StationRepository stationRepository = new StationRepository();
+
+ public StationController(Scanner scanner) {
+ this.scanner = scanner;
+ }
+
+ public void printSelection() {
+ System.out.println(Constant.STATION_ANNOUNCEMENT);
+ String command = scanner.next();
+ if (command.equals(Constant.FIRST_COMMAND)) {
+ addStation();
+ } else if (command.equals(Constant.SECOND_COMMAND)) {
+ deleteStation();
+ } else if (command.equals(Constant.THIRD_COMMAND)) {
+ readStations();
+ } else if (command.equals(Constant.BACK_COMMAND)) {
+ return;
+ }
+ }
+
+ void addStation() {
+ System.out.println(String.join(" μ ", Constant.ADD_PREFIX, Constant.NAME_POSTFIX));
+ String stationName = scanner.next();
+ try {
+ stationRepository.addStation(new Station(stationName));
+ System.out.println(String.join(" ", Constant.INFO_PREFIX, ADD_STATION_SUCCESS));
+ } catch (IllegalArgumentException e) {
+ System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.FAIL));
+ } catch (IllegalStateException e) {
+ System.err.println(String.join(" ", Constant.ERROR_PREFIX, Constant.NAME_LENGTH_SHORT));
+ }
+ }
+
+ void deleteStation() {
+ System.out.println(String.join(" μ ", Constant.DELETE_PREFIX, Constant.NAME_POSTFIX));
+ String stationName = scanner.next();
+ boolean deleteFlag = stationRepository.deleteStation(stationName);
+ if (deleteFlag) {
+ System.out.println(String.join(" ", Constant.INFO_PREFIX, DELETE_STATION_SUCCESS));
+ return;
+ }
+ System.out.println(String.join(" ", Constant.ERROR_PREFIX, Constant.FAIL));
+ }
+
+ void readStations() {
+ for (int i = 0; i < stationRepository.stations.size(); i++) {
+ System.out.println(String.join(" ", Constant.INFO_PREFIX, stationRepository.stations.get(i).getName()));
+ }
+ }
+}