From 3cb1a0b5f2f4b53eceeed64decbe3570e6a4425f Mon Sep 17 00:00:00 2001 From: heondong9265 Date: Fri, 31 May 2024 21:09:43 +0900 Subject: [PATCH] =?UTF-8?q?=EC=A7=80=ED=95=98=EC=B2=A0=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20#06=20refactor=20:=20=EC=9D=98=EC=A1=B4=EC=84=B1=20?= =?UTF-8?q?=EC=A3=BC=EC=9E=85=20=EB=B0=8F=20=ED=8C=A8=ED=82=A4=EC=A7=80=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/subway/SubwayService.java | 43 ------------------- .../{ => config}/SubwayInitializer.java | 4 +- .../{ => repository}/LineRepository.java | 14 +++--- .../{ => repository}/StationRepository.java | 14 +++--- src/main/java/subway/service/LineService.java | 35 +++++++++++++++ .../java/subway/service/StationService.java | 30 +++++++++++++ .../java/subway/service/SubwayService.java | 37 ++++++++++++++++ .../java/subway/SubwayInitializerTest.java | 20 ++++++--- src/test/java/subway/SubwayServiceTest.java | 25 +++++++---- 9 files changed, 153 insertions(+), 69 deletions(-) delete mode 100644 src/main/java/subway/SubwayService.java rename src/main/java/subway/{ => config}/SubwayInitializer.java (94%) rename src/main/java/subway/domain/{ => repository}/LineRepository.java (56%) rename src/main/java/subway/domain/{ => repository}/StationRepository.java (72%) create mode 100644 src/main/java/subway/service/LineService.java create mode 100644 src/main/java/subway/service/StationService.java create mode 100644 src/main/java/subway/service/SubwayService.java diff --git a/src/main/java/subway/SubwayService.java b/src/main/java/subway/SubwayService.java deleted file mode 100644 index 6e1c2ad56..000000000 --- a/src/main/java/subway/SubwayService.java +++ /dev/null @@ -1,43 +0,0 @@ -package subway; - -import subway.domain.Line; -import subway.domain.LineRepository; -import subway.domain.Station; -import subway.domain.StationRepository; - -import java.util.List; - -public class SubwayService { - - public void addStation(String name) { - Station station = new Station(name); - StationRepository.addStation(station); - } - - public void addLine(String name, String[] stationNames) { - Line line = new Line(name); - for (String stationName : stationNames) { - Station station = StationRepository.stations().stream() - .filter(s -> s.getName().equals(stationName)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException("[ERROR] 존재하지 않는 역입니다.")); - line.addStation(station); - } - LineRepository.addLine(line); - } - - public void deleteStation(String name) { - if (LineRepository.lines().stream() - .flatMap(line -> line.getStations().stream()) - .anyMatch(station -> station.getName().equals(name))) { - throw new IllegalArgumentException("[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."); - } - if (!StationRepository.deleteStation(name)) { - throw new IllegalArgumentException("[ERROR] 존재하지 않는 역입니다."); - } - } - - public List getStations() { - return StationRepository.stations(); - } -} diff --git a/src/main/java/subway/SubwayInitializer.java b/src/main/java/subway/config/SubwayInitializer.java similarity index 94% rename from src/main/java/subway/SubwayInitializer.java rename to src/main/java/subway/config/SubwayInitializer.java index 70d03953b..dfd2cbefc 100644 --- a/src/main/java/subway/SubwayInitializer.java +++ b/src/main/java/subway/config/SubwayInitializer.java @@ -1,4 +1,6 @@ -package subway; +package subway.config; + +import subway.service.SubwayService; public class SubwayInitializer { private final SubwayService subwayService; diff --git a/src/main/java/subway/domain/LineRepository.java b/src/main/java/subway/domain/repository/LineRepository.java similarity index 56% rename from src/main/java/subway/domain/LineRepository.java rename to src/main/java/subway/domain/repository/LineRepository.java index 1891b368c..1502ee0da 100644 --- a/src/main/java/subway/domain/LineRepository.java +++ b/src/main/java/subway/domain/repository/LineRepository.java @@ -1,4 +1,6 @@ -package subway.domain; +package subway.domain.repository; + +import subway.domain.Line; import java.util.ArrayList; import java.util.Collections; @@ -6,21 +8,21 @@ import java.util.Objects; public class LineRepository { - private static final List lines = new ArrayList<>(); + private final List lines = new ArrayList<>(); - public static List lines() { + public List lines() { return Collections.unmodifiableList(lines); } - public static void addLine(Line line) { + public void addLine(Line line) { lines.add(line); } - public static boolean deleteLineByName(String name) { + public boolean deleteLineByName(String name) { return lines.removeIf(line -> Objects.equals(line.getName(), name)); } - public static void clear() { + public void clear() { lines.clear(); } } diff --git a/src/main/java/subway/domain/StationRepository.java b/src/main/java/subway/domain/repository/StationRepository.java similarity index 72% rename from src/main/java/subway/domain/StationRepository.java rename to src/main/java/subway/domain/repository/StationRepository.java index 71d344da5..003e55e0d 100644 --- a/src/main/java/subway/domain/StationRepository.java +++ b/src/main/java/subway/domain/repository/StationRepository.java @@ -1,4 +1,6 @@ -package subway.domain; +package subway.domain.repository; + +import subway.domain.Station; import java.util.ArrayList; import java.util.Collections; @@ -8,26 +10,26 @@ public class StationRepository { private static final List stations = new ArrayList<>(); - public static List stations() { + public List stations() { return Collections.unmodifiableList(stations); } - public static void addStation(Station station) { + public void addStation(Station station) { if(stations.stream().anyMatch(s -> s.getName().equals(station.getName()))){ throw new IllegalArgumentException("[ERROR] 중복된 역 이름입니다."); } stations.add(station); } - public static boolean deleteStation(String name) { + public boolean deleteStation(String name) { return stations.removeIf(station -> Objects.equals(station.getName(), name)); } - public static boolean isStationExist(String name) { + public boolean isStationExist(String name) { return stations.stream().anyMatch(station -> station.getName().equals(name)); } - public static void clear() { + public void clear() { stations.clear(); } } diff --git a/src/main/java/subway/service/LineService.java b/src/main/java/subway/service/LineService.java new file mode 100644 index 000000000..7043e4f3c --- /dev/null +++ b/src/main/java/subway/service/LineService.java @@ -0,0 +1,35 @@ +package subway.service; + +import subway.domain.Line; +import subway.domain.repository.LineRepository; +import subway.domain.Station; +import subway.domain.repository.StationRepository; + +import java.util.List; + +public class LineService { + + private final LineRepository lineRepository; + private final StationRepository stationRepository; + + public LineService(LineRepository lineRepository, StationRepository stationRepository) { + this.lineRepository = lineRepository; + this.stationRepository = stationRepository; + } + + public void addLine(String name, String[] stationNames) { + Line line = new Line(name); + for (String stationName : stationNames) { + Station station = stationRepository.stations().stream() + .filter(s -> s.getName().equals(stationName)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException("[ERROR] 존재하지 않는 역입니다.")); + line.addStation(station); + } + lineRepository.addLine(line); + } + + public List getLines() { + return lineRepository.lines(); + } +} diff --git a/src/main/java/subway/service/StationService.java b/src/main/java/subway/service/StationService.java new file mode 100644 index 000000000..1bda22a62 --- /dev/null +++ b/src/main/java/subway/service/StationService.java @@ -0,0 +1,30 @@ +package subway.service; + +import subway.domain.Station; +import subway.domain.repository.StationRepository; + +import java.util.List; + +public class StationService { + + private final StationRepository stationRepository; + + public StationService(StationRepository stationRepository) { + this.stationRepository = stationRepository; + } + + public void addStation(String name) { + Station station = new Station(name); + stationRepository.addStation(station); + } + + public void deleteStation(String name) { + if (!stationRepository.deleteStation(name)) { + throw new IllegalArgumentException("[ERROR] 존재하지 않는 역입니다."); + } + } + + public List getStations() { + return stationRepository.stations(); + } +} diff --git a/src/main/java/subway/service/SubwayService.java b/src/main/java/subway/service/SubwayService.java new file mode 100644 index 000000000..d49f5bdb7 --- /dev/null +++ b/src/main/java/subway/service/SubwayService.java @@ -0,0 +1,37 @@ +package subway.service; + +import subway.domain.Station; + +import java.util.List; + +public class SubwayService { + + private final StationService stationService; + private final LineService lineService; + + public SubwayService(StationService stationService, LineService lineService) { + this.stationService = stationService; + this.lineService = lineService; + } + + public void addStation(String name) { + stationService.addStation(name); + } + + public void addLine(String name, String[] stationNames) { + lineService.addLine(name, stationNames); + } + + public void deleteStation(String name) { + if (lineService.getLines().stream() + .flatMap(line -> line.getStations().stream()) + .anyMatch(station -> station.getName().equals(name))) { + throw new IllegalArgumentException("[ERROR] 노선에 등록된 역은 삭제할 수 없습니다."); + } + stationService.deleteStation(name); + } + + public List getStations() { + return stationService.getStations(); + } +} diff --git a/src/test/java/subway/SubwayInitializerTest.java b/src/test/java/subway/SubwayInitializerTest.java index 4c96a6508..1d1472934 100644 --- a/src/test/java/subway/SubwayInitializerTest.java +++ b/src/test/java/subway/SubwayInitializerTest.java @@ -4,10 +4,14 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import subway.config.SubwayInitializer; import subway.domain.Line; -import subway.domain.LineRepository; +import subway.domain.repository.LineRepository; import subway.domain.Station; -import subway.domain.StationRepository; +import subway.domain.repository.StationRepository; +import subway.service.LineService; +import subway.service.StationService; +import subway.service.SubwayService; import java.util.List; @@ -20,10 +24,16 @@ class SubwayInitializerTest { class SubwayService_Init { SubwayInitializer subwayInitializer; SubwayService subwayService; + StationRepository stationRepository; + LineRepository lineRepository; @BeforeEach void setUp() { - subwayService = new SubwayService(); + stationRepository = new StationRepository(); + lineRepository = new LineRepository(); + StationService stationService = new StationService(stationRepository); + LineService lineService = new LineService(lineRepository, stationRepository); + subwayService = new SubwayService(stationService, lineService); subwayInitializer = new SubwayInitializer(subwayService); } @@ -33,10 +43,10 @@ void initSubwayLine() { subwayInitializer.initialize(); // 지하철 역 초기화 - assertStationsInitialized(StationRepository.stations()); + assertStationsInitialized(stationRepository.stations()); // 지하철 노선 초기화 - assertLinesInitialized(LineRepository.lines()); + assertLinesInitialized(lineRepository.lines()); } private void assertStationsInitialized(List stations) { assertEquals(7, stations.size()); diff --git a/src/test/java/subway/SubwayServiceTest.java b/src/test/java/subway/SubwayServiceTest.java index d3c98929c..719a8dfb5 100644 --- a/src/test/java/subway/SubwayServiceTest.java +++ b/src/test/java/subway/SubwayServiceTest.java @@ -4,19 +4,28 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import subway.domain.LineRepository; -import subway.domain.StationRepository; +import subway.domain.repository.LineRepository; +import subway.domain.repository.StationRepository; +import subway.service.LineService; +import subway.service.StationService; +import subway.service.SubwayService; import static org.junit.jupiter.api.Assertions.*; public class SubwayServiceTest { SubwayService subwayService; + StationRepository stationRepository; + LineRepository lineRepository; @BeforeEach void setUp() { - subwayService = new SubwayService(); - StationRepository.clear(); - LineRepository.clear(); + stationRepository = new StationRepository(); + lineRepository = new LineRepository(); + StationService stationService = new StationService(stationRepository); + LineService lineService = new LineService(lineRepository, stationRepository); + subwayService = new SubwayService(stationService, lineService); + stationRepository.clear(); + lineRepository.clear(); } @Nested @@ -27,16 +36,16 @@ class AddStationTest { @DisplayName("지하철 역을 등록할 수 있다.") void addStation() { subwayService.addStation("잠실역"); - assertTrue(StationRepository.isStationExist("잠실역")); + assertTrue(stationRepository.isStationExist("잠실역")); } @Test @DisplayName("역을 삭제할 수 있다.") void deleteStation() { subwayService.addStation("잠실역"); - assertTrue(StationRepository.isStationExist("잠실역")); + assertTrue(stationRepository.isStationExist("잠실역")); subwayService.deleteStation("잠실역"); - assertFalse(StationRepository.isStationExist("잠실역")); + assertFalse(stationRepository.isStationExist("잠실역")); } @Test