diff --git a/README.md b/README.md
index 597ae6f36..71a7d7935 100644
--- a/README.md
+++ b/README.md
@@ -467,3 +467,53 @@ public class StationRepository {
## 📝 License
This project is [MIT](https://github.com/woowacourse/java-subway-map-precourse/blob/master/LICENSE.md) licensed.
+
+
+
+## 구현할 기능 목록
+- 메인 화면 출력 기능
+- 메뉴 선택전 출력 기능
+- 메뉴 선택 기능
+
+- 역 관리 화면 출력 기능
+- 역 메뉴 선택 기능
+
+- 역 등록전 출력 기능
+- 역 입력 기능
+- 역 이름 중복 확인 기능
+- 역 이름 길이 확인 기능
+- 역 등록 결과 출력 기능
+
+- 역 목록 조회 기능
+
+- 역 삭제 기능
+- 역 이름 존재 확인 기능
+- 역 노선 등록 확인 기능
+- 역 삭제 결과 출력 기능
+
+- 돌아가기 기능
+- 종료하기 기능
+
+- 노선 관리 화면 출력 기능
+- 노선 입력 기능
+
+- 노선 등록전 출력 기능
+- 노선 입력 기능
+- 노선 이름 중복 확인 기능
+- 노선 이름 길이 확인 기능
+- 노선 상행 종점 입력전 출력 기능
+- 노선 상행 종점 입력 기능
+- 노선 하행 종점 입력전 출력 기능
+- 노선 하행 종점 입력 기능
+- 노선 등록 결과 출력 기능
+
+- 노선 목록 조회 기능
+
+- 노선 삭제 기능
+- 노선 존재 확인 기능
+- 노선 삭제 결과 출력 기능
+
+- 구간 등록 기능
+- 구간 삭제 기능
+
+- 지하철 노선도 출력 기능
\ No newline at end of file
diff --git a/src/main/java/subway/Application.java b/src/main/java/subway/Application.java
index 0bcf786cc..7457a8c74 100644
--- a/src/main/java/subway/Application.java
+++ b/src/main/java/subway/Application.java
@@ -1,10 +1,49 @@
package subway;
+import subway.controller.*;
+import subway.init.InitData;
+import subway.ui.*;
+
import java.util.Scanner;
public class Application {
+ private static final String MAIN_MENU_QUIT_VALUE = "Q";
+ private static final String MAIN_MENU_SELECT_STATION = "1";
+ private static final String MAIN_MENU_SELECT_LINE = "2";
+ private static final String MAIN_MENU_SELECT_SECTION = "3";
+ private static final String MAIN_MENU_SELECT_MAP = "4";
+
public static void main(String[] args) {
final Scanner scanner = new Scanner(System.in);
// TODO: 프로그램 구현
+ InitData.startInitWork();
+ while(true) {
+ MainUI.printScreen();
+ String select = MainController.selectMenu(scanner);
+ if(select.equals(MAIN_MENU_QUIT_VALUE)) {
+ MainUI.printQuit();
+ break;
+ }
+ executeMenu(select, scanner);
+ }
+ }
+
+ private static void executeMenu(String select, Scanner scanner) {
+ if(select.equals(MAIN_MENU_SELECT_STATION)) {
+ StationUI.printScreen();
+ StationController.selectMenu(scanner);
+ }
+ if(select.equals(MAIN_MENU_SELECT_LINE)) {
+ LineUI.printScreen();
+ LineController.selectMenu(scanner);
+ }
+ if(select.equals(MAIN_MENU_SELECT_SECTION)) {
+ SectionUI.printScreen();
+ SectionController.selectMenu(scanner);
+ }
+ if(select.equals(MAIN_MENU_SELECT_MAP)) {
+ MapUI.printScreen();
+ MapController.selectMenu(scanner);
+ }
}
}
diff --git a/src/main/java/subway/controller/LineController.java b/src/main/java/subway/controller/LineController.java
new file mode 100644
index 000000000..eacf1dd6c
--- /dev/null
+++ b/src/main/java/subway/controller/LineController.java
@@ -0,0 +1,8 @@
+package subway.controller;
+
+import java.util.Scanner;
+
+public class LineController {
+ public static void selectMenu(Scanner 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..81cb61e4a
--- /dev/null
+++ b/src/main/java/subway/controller/MainController.java
@@ -0,0 +1,41 @@
+package subway.controller;
+
+import java.util.Scanner;
+
+public class MainController {
+ private static final int INPUT_LENGTH = 1;
+ private static final int MIN_MAIN_MENU_VALUE = 1;
+ private static final int MAX_MAIN_MENU_VALUE = 4;
+ private static final String QUIT_VALUE = "Q";
+ private static final String INFO = "[INFO] ";
+ private static final String ERROR = "[ERROR] ";
+ private static final String INPUT_VALUE_ERROR_MESSAGE = "입력값이 잘못되었습니다.";
+
+ public static String selectMenu(Scanner scanner) {
+ String input = scanner.next();
+ validateInput(input);
+ return input;
+ }
+
+ private static void validateInput(String input) {
+ if(input.equals(QUIT_VALUE)) {
+ return;
+ }
+ if(input.length() == INPUT_LENGTH && Character.isDigit(input.charAt(0))) {
+ int select = Integer.parseInt(input);
+ if(select >= MIN_MAIN_MENU_VALUE && select <= MAX_MAIN_MENU_VALUE) {
+ return;
+ }
+ }
+ printError(INPUT_VALUE_ERROR_MESSAGE);
+ }
+
+ private static void printError(String message) {
+ System.out.println(ERROR + message);
+ throw new IllegalStateException();
+ }
+
+ private static void printInfo(String message) {
+ System.out.println(INFO + message);
+ }
+}
diff --git a/src/main/java/subway/controller/MapController.java b/src/main/java/subway/controller/MapController.java
new file mode 100644
index 000000000..5b6e54b2e
--- /dev/null
+++ b/src/main/java/subway/controller/MapController.java
@@ -0,0 +1,8 @@
+package subway.controller;
+
+import java.util.Scanner;
+
+public class MapController {
+ public static void selectMenu(Scanner scanner) {
+ }
+}
diff --git a/src/main/java/subway/controller/SectionController.java b/src/main/java/subway/controller/SectionController.java
new file mode 100644
index 000000000..560e8d9f7
--- /dev/null
+++ b/src/main/java/subway/controller/SectionController.java
@@ -0,0 +1,9 @@
+package subway.controller;
+
+import java.util.Scanner;
+
+public class SectionController {
+ public static void selectMenu(Scanner scanner) {
+
+ }
+}
diff --git a/src/main/java/subway/controller/StationController.java b/src/main/java/subway/controller/StationController.java
new file mode 100644
index 000000000..08247629d
--- /dev/null
+++ b/src/main/java/subway/controller/StationController.java
@@ -0,0 +1,8 @@
+package subway.controller;
+
+import java.util.Scanner;
+
+public class StationController {
+ public static void selectMenu(Scanner scanner) {
+ }
+}
diff --git a/src/main/java/subway/domain/Line.java b/src/main/java/subway/domain/Line.java
index f4d738d5a..5b37bb88e 100644
--- a/src/main/java/subway/domain/Line.java
+++ b/src/main/java/subway/domain/Line.java
@@ -1,5 +1,8 @@
package subway.domain;
+import java.util.ArrayList;
+import java.util.List;
+
public class Line {
private String name;
@@ -12,4 +15,13 @@ public String getName() {
}
// 추가 기능 구현
+ private List stationList = new ArrayList<>();
+
+ public void add(Station station) {
+ stationList.add(station);
+ }
+
+ public int size() {
+ return stationList.size();
+ }
}
diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/LineRepository.java
index 49132ddb6..eebea45de 100644
--- a/src/main/java/subway/domain/LineRepository.java
+++ b/src/main/java/subway/domain/LineRepository.java
@@ -1,9 +1,6 @@
package subway.domain;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
public class LineRepository {
private static final List lines = new ArrayList<>();
@@ -19,4 +16,24 @@ public static void addLine(Line line) {
public static boolean deleteLineByName(String name) {
return lines.removeIf(line -> Objects.equals(line.getName(), name));
}
+
+ public static boolean contains(String name) {
+ for(int i=0; i findByName(String name) {
+ for(int i=0; i stations = new ArrayList<>();
@@ -19,4 +16,24 @@ public static void addStation(Station station) {
public static boolean deleteStation(String name) {
return stations.removeIf(station -> Objects.equals(station.getName(), name));
}
+
+ public static boolean contains(String name) {
+ for(int i=0; i findByName(String name) {
+ for(int i=0; i