From da7bf6f99f0e2104237c0d1240dd39eaea951e2d Mon Sep 17 00:00:00 2001 From: Kim Uijin <127496156+sansan20535@users.noreply.github.com> Date: Wed, 30 Oct 2024 21:06:02 +0900 Subject: [PATCH 01/13] =?UTF-8?q?[FEAT]=201=EB=8B=A8=EA=B3=84=20=EC=82=AC?= =?UTF-8?q?=EB=8B=A4=EB=A6=AC=20=EC=B6=9C=EB=A0=A5=20:=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/.gitkeep | 0 src/main/java/LadderApplication.java | 14 ++++++ .../java/controller/LadderController.java | 28 ++++++++++++ src/main/java/domain/Ladder.java | 15 +++++++ src/main/java/domain/LadderLine.java | 26 +++++++++++ .../java/domain/LadderLineConnection.java | 32 ++++++++++++++ src/main/java/service/LadderService.java | 7 +++ src/main/java/service/LadderServiceImpl.java | 44 +++++++++++++++++++ src/main/java/view/OutputView.java | 8 ++++ src/test/java/.gitkeep | 0 src/test/java/LadderLineConnectionTest.java | 25 +++++++++++ 11 files changed, 199 insertions(+) delete mode 100644 src/main/java/.gitkeep create mode 100644 src/main/java/LadderApplication.java create mode 100644 src/main/java/controller/LadderController.java create mode 100644 src/main/java/domain/Ladder.java create mode 100644 src/main/java/domain/LadderLine.java create mode 100644 src/main/java/domain/LadderLineConnection.java create mode 100644 src/main/java/service/LadderService.java create mode 100644 src/main/java/service/LadderServiceImpl.java create mode 100644 src/main/java/view/OutputView.java delete mode 100644 src/test/java/.gitkeep create mode 100644 src/test/java/LadderLineConnectionTest.java diff --git a/src/main/java/.gitkeep b/src/main/java/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/java/LadderApplication.java b/src/main/java/LadderApplication.java new file mode 100644 index 00000000..2a85f969 --- /dev/null +++ b/src/main/java/LadderApplication.java @@ -0,0 +1,14 @@ +import controller.LadderController; +import service.LadderServiceImpl; +import view.OutputView; + +public class LadderApplication { + public static void main(String[] args) { + LadderController ladderController = new LadderController( + new LadderServiceImpl(), + new OutputView() + ); + + ladderController.start(); + } +} diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java new file mode 100644 index 00000000..5d492847 --- /dev/null +++ b/src/main/java/controller/LadderController.java @@ -0,0 +1,28 @@ +package controller; + +import domain.Ladder; +import domain.LadderLine; +import service.LadderService; +import view.OutputView; + +public class LadderController { + + private final LadderService ladderService; + private final OutputView outputView; + + public LadderController(LadderService ladderService, OutputView outputView) { + this.ladderService = ladderService; + this.outputView = outputView; + } + + public void start() { + final Ladder ladder = ladderService.makeLadder(4, 4); + printLadder(ladder); + } + + private void printLadder(final Ladder ladder) { + for (LadderLine ladderLine : ladder.getLadderLines()) { + outputView.printLadderLine(ladderLine.getLine()); + } + } +} diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java new file mode 100644 index 00000000..e92ef18c --- /dev/null +++ b/src/main/java/domain/Ladder.java @@ -0,0 +1,15 @@ +package domain; + +import java.util.List; + +public class Ladder { + private final List ladderLines; + + public Ladder(final List ladderLines) { + this.ladderLines = ladderLines; + } + + public List getLadderLines() { + return ladderLines; + } +} diff --git a/src/main/java/domain/LadderLine.java b/src/main/java/domain/LadderLine.java new file mode 100644 index 00000000..674d3ebe --- /dev/null +++ b/src/main/java/domain/LadderLine.java @@ -0,0 +1,26 @@ +package domain; + +import java.util.List; + +public class LadderLine { + + private final List connections; + private final String line; + + public LadderLine(final List connections) { + this.connections = connections; + this.line = makeLine(); + } + + private String makeLine() { + final List line = connections.stream() + .map(connections -> LadderLineConnection.of(connections).getLadderConnectionFormat()) + .toList(); + + return String.join("", line) + "|"; + } + + public String getLine() { + return line; + } +} diff --git a/src/main/java/domain/LadderLineConnection.java b/src/main/java/domain/LadderLineConnection.java new file mode 100644 index 00000000..7196b0c8 --- /dev/null +++ b/src/main/java/domain/LadderLineConnection.java @@ -0,0 +1,32 @@ +package domain; + +import java.util.Arrays; + +public enum LadderLineConnection { + + CONNECT_LADDER("|-----", true), + NOT_CONNECT_LADDER("| ", false); + + LadderLineConnection(final String ladderConnectionFormat, final boolean isConnected) { + this.ladderConnectionFormat = ladderConnectionFormat; + this.isConnected = isConnected; + } + + private final String ladderConnectionFormat; + private final boolean isConnected; + + public String getLadderConnectionFormat() { + return ladderConnectionFormat; + } + + public boolean isConnected() { + return isConnected; + } + + public static LadderLineConnection of(final boolean isConnected) { + return Arrays.stream(values()) + .filter(ladderLineConnection -> ladderLineConnection.isConnected == isConnected) + .findAny() + .orElseThrow(); + } +} diff --git a/src/main/java/service/LadderService.java b/src/main/java/service/LadderService.java new file mode 100644 index 00000000..bb27aa08 --- /dev/null +++ b/src/main/java/service/LadderService.java @@ -0,0 +1,7 @@ +package service; + +import domain.Ladder; + +public interface LadderService { + Ladder makeLadder(final int height, final int width); +} diff --git a/src/main/java/service/LadderServiceImpl.java b/src/main/java/service/LadderServiceImpl.java new file mode 100644 index 00000000..38604869 --- /dev/null +++ b/src/main/java/service/LadderServiceImpl.java @@ -0,0 +1,44 @@ +package service; + +import domain.Ladder; +import domain.LadderLine; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.stream.IntStream; + +public class LadderServiceImpl implements LadderService { + + @Override + public Ladder makeLadder(final int height, final int width) { + return new Ladder(makeLadderLines(height, width)); + } + + private List makeLadderLines(final int height, final int width) { + return IntStream.range(0, height) + .mapToObj(i -> makeLadderLine(width)) + .toList(); + } + + private LadderLine makeLadderLine(final int width) { + return new LadderLine(makeConnections(width)); + } + + private List makeConnections(final int width) { + List connections = new ArrayList(); + Random random = new Random(); + + while (connections.size() < width - 1) { + addConnections(connections, random.nextBoolean()); + } + + return connections; + } + + private void addConnections(final List connections, final boolean isConnected) { + if (connections.isEmpty() || !isConnected || !connections.get(connections.size() - 1)) { + connections.add(isConnected); + } + } +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java new file mode 100644 index 00000000..63293498 --- /dev/null +++ b/src/main/java/view/OutputView.java @@ -0,0 +1,8 @@ +package view; + +public class OutputView { + + public void printLadderLine(final String ladderLine) { + System.out.println(ladderLine); + } +} diff --git a/src/test/java/.gitkeep b/src/test/java/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/test/java/LadderLineConnectionTest.java b/src/test/java/LadderLineConnectionTest.java new file mode 100644 index 00000000..c2399248 --- /dev/null +++ b/src/test/java/LadderLineConnectionTest.java @@ -0,0 +1,25 @@ +import domain.LadderLineConnection; +import org.junit.jupiter.api.*; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@DisplayName("사다리 연결 테스트") +@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) +public class LadderLineConnectionTest { + + @Test + @DisplayName("연결 유무에 따라 사다리의 모양이 바뀐다.") + public void 연결_유무에_따라_사다리의_모양이_바뀐다() { + //given + final String expected1 = "|-----"; + final String expected2 = "| "; + final boolean isConnected1 = true; + final boolean isConnected2 = false; + + //when, then + Assertions.assertAll( + () -> assertEquals(LadderLineConnection.of(isConnected1).getLadderConnectionFormat(), expected1), + () -> assertEquals(LadderLineConnection.of(isConnected2).getLadderConnectionFormat(), expected2) + ); + } +} From bf395810fd73d33c5a9a61767b5a9130fcf52c8f Mon Sep 17 00:00:00 2001 From: Kim Uijin <127496156+sansan20535@users.noreply.github.com> Date: Wed, 30 Oct 2024 21:12:53 +0900 Subject: [PATCH 02/13] =?UTF-8?q?[FEAT]=202=EB=8B=A8=EA=B3=84=20=EC=82=AC?= =?UTF-8?q?=EB=8B=A4=EB=A6=AC=20=EC=83=9D=EC=84=B1=20:=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/LadderApplication.java | 4 +++- src/main/java/controller/LadderController.java | 7 +++++-- src/main/java/service/LadderService.java | 2 +- src/main/java/service/LadderServiceImpl.java | 2 +- src/main/java/view/InputView.java | 18 ++++++++++++++++++ 5 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 src/main/java/view/InputView.java diff --git a/src/main/java/LadderApplication.java b/src/main/java/LadderApplication.java index 2a85f969..3ef397e8 100644 --- a/src/main/java/LadderApplication.java +++ b/src/main/java/LadderApplication.java @@ -1,12 +1,14 @@ import controller.LadderController; import service.LadderServiceImpl; +import view.InputView; import view.OutputView; public class LadderApplication { public static void main(String[] args) { LadderController ladderController = new LadderController( new LadderServiceImpl(), - new OutputView() + new OutputView(), + new InputView() ); ladderController.start(); diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index 5d492847..2409586b 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -3,20 +3,23 @@ import domain.Ladder; import domain.LadderLine; import service.LadderService; +import view.InputView; import view.OutputView; public class LadderController { private final LadderService ladderService; private final OutputView outputView; + private final InputView inputView; - public LadderController(LadderService ladderService, OutputView outputView) { + public LadderController(final LadderService ladderService, final OutputView outputView, final InputView inputView) { this.ladderService = ladderService; this.outputView = outputView; + this.inputView = inputView; } public void start() { - final Ladder ladder = ladderService.makeLadder(4, 4); + final Ladder ladder = ladderService.makeLadder(inputView.inputWidth(), inputView.inputHeight()); printLadder(ladder); } diff --git a/src/main/java/service/LadderService.java b/src/main/java/service/LadderService.java index bb27aa08..b3394a68 100644 --- a/src/main/java/service/LadderService.java +++ b/src/main/java/service/LadderService.java @@ -3,5 +3,5 @@ import domain.Ladder; public interface LadderService { - Ladder makeLadder(final int height, final int width); + Ladder makeLadder(final int width, final int height); } diff --git a/src/main/java/service/LadderServiceImpl.java b/src/main/java/service/LadderServiceImpl.java index 38604869..ffe05c80 100644 --- a/src/main/java/service/LadderServiceImpl.java +++ b/src/main/java/service/LadderServiceImpl.java @@ -11,7 +11,7 @@ public class LadderServiceImpl implements LadderService { @Override - public Ladder makeLadder(final int height, final int width) { + public Ladder makeLadder(final int width, final int height) { return new Ladder(makeLadderLines(height, width)); } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 00000000..f90908da --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,18 @@ +package view; + +import java.util.Scanner; + +public class InputView { + + private final Scanner scanner = new Scanner(System.in); + + public int inputWidth() { + System.out.println("사다리의 넓이는 몇 개인가요?"); + return scanner.nextInt(); + } + + public int inputHeight() { + System.out.println("사다리의 높이는 몇 개인가요?"); + return scanner.nextInt(); + } +} From 9f02c12408ba873e8b58acd79bd1cee482e12c24 Mon Sep 17 00:00:00 2001 From: Kim Uijin <127496156+sansan20535@users.noreply.github.com> Date: Thu, 31 Oct 2024 00:25:28 +0900 Subject: [PATCH 03/13] =?UTF-8?q?[FEAT]=203=EB=8B=A8=EA=B3=84=20=EC=82=AC?= =?UTF-8?q?=EB=8B=A4=EB=A6=AC=20=ED=83=80=EA=B8=B0=20:=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/LadderApplication.java | 2 + .../java/controller/LadderController.java | 23 +++++++- src/main/java/domain/Ladder.java | 8 ++- src/main/java/domain/LadderInfo.java | 20 +++++++ src/main/java/domain/LadderLine.java | 4 ++ src/main/java/domain/User.java | 59 +++++++++++++++++++ src/main/java/domain/Users.java | 16 +++++ src/main/java/service/LadderServiceImpl.java | 7 +-- src/main/java/service/UserService.java | 10 ++++ src/main/java/service/UserServiceImpl.java | 28 +++++++++ src/main/java/view/OutputView.java | 4 ++ 11 files changed, 174 insertions(+), 7 deletions(-) create mode 100644 src/main/java/domain/LadderInfo.java create mode 100644 src/main/java/domain/User.java create mode 100644 src/main/java/domain/Users.java create mode 100644 src/main/java/service/UserService.java create mode 100644 src/main/java/service/UserServiceImpl.java diff --git a/src/main/java/LadderApplication.java b/src/main/java/LadderApplication.java index 3ef397e8..86a487a3 100644 --- a/src/main/java/LadderApplication.java +++ b/src/main/java/LadderApplication.java @@ -1,5 +1,6 @@ import controller.LadderController; import service.LadderServiceImpl; +import service.UserServiceImpl; import view.InputView; import view.OutputView; @@ -7,6 +8,7 @@ public class LadderApplication { public static void main(String[] args) { LadderController ladderController = new LadderController( new LadderServiceImpl(), + new UserServiceImpl(), new OutputView(), new InputView() ); diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index 2409586b..e8d67f1e 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -2,25 +2,38 @@ import domain.Ladder; import domain.LadderLine; +import domain.User; +import domain.Users; import service.LadderService; +import service.UserService; import view.InputView; import view.OutputView; public class LadderController { private final LadderService ladderService; + private final UserService userService; private final OutputView outputView; private final InputView inputView; - public LadderController(final LadderService ladderService, final OutputView outputView, final InputView inputView) { + public LadderController(final LadderService ladderService, final UserService userService, final OutputView outputView, final InputView inputView) { this.ladderService = ladderService; + this.userService = userService; this.outputView = outputView; this.inputView = inputView; } public void start() { - final Ladder ladder = ladderService.makeLadder(inputView.inputWidth(), inputView.inputHeight()); + final int width = inputView.inputWidth(); + final int height = inputView.inputHeight(); + + final Ladder ladder = ladderService.makeLadder(width, height); + final Users users = userService.makeUsers(width); + + userService.updatePosition(ladder, users); + printLadder(ladder); + printLadderResult(users); } private void printLadder(final Ladder ladder) { @@ -28,4 +41,10 @@ private void printLadder(final Ladder ladder) { outputView.printLadderLine(ladderLine.getLine()); } } + + private void printLadderResult(final Users users) { + for (User user : users.getUsers()) { + outputView.printLadderResult(user.getName(), user.getPosition()); + } + } } diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java index e92ef18c..a4e5cea3 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/Ladder.java @@ -4,9 +4,15 @@ public class Ladder { private final List ladderLines; + private final LadderInfo ladderInfo; - public Ladder(final List ladderLines) { + public Ladder(final List ladderLines, final LadderInfo ladderInfo) { this.ladderLines = ladderLines; + this.ladderInfo = ladderInfo; + } + + public LadderInfo getLadderInfo() { + return ladderInfo; } public List getLadderLines() { diff --git a/src/main/java/domain/LadderInfo.java b/src/main/java/domain/LadderInfo.java new file mode 100644 index 00000000..24f732b7 --- /dev/null +++ b/src/main/java/domain/LadderInfo.java @@ -0,0 +1,20 @@ +package domain; + +public class LadderInfo { + + private final int width; + private final int height; + + public LadderInfo(int width, int height) { + this.width = width; + this.height = height; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } +} diff --git a/src/main/java/domain/LadderLine.java b/src/main/java/domain/LadderLine.java index 674d3ebe..0a5f8083 100644 --- a/src/main/java/domain/LadderLine.java +++ b/src/main/java/domain/LadderLine.java @@ -20,6 +20,10 @@ private String makeLine() { return String.join("", line) + "|"; } + public List getConnections() { + return connections; + } + public String getLine() { return line; } diff --git a/src/main/java/domain/User.java b/src/main/java/domain/User.java new file mode 100644 index 00000000..75921c79 --- /dev/null +++ b/src/main/java/domain/User.java @@ -0,0 +1,59 @@ +package domain; + +import java.util.List; + +public class User { + + private int name; + private int position; + + public User(final int name, final int position) { + this.name = name; + this.position = position; + } + + public int getName() { + return name; + } + + public int getPosition() { + return position; + } + + public void updatePosition(final List ladderLines, final LadderInfo ladderInfo) { + for (LadderLine ladderLine : ladderLines) { + final boolean isConnectedRight = checkRightConnection(ladderLine.getConnections(), ladderInfo.getWidth()); + final boolean isConnectedLeft = checkLeftConnection(ladderLine.getConnections()); + decideMoving(isConnectedLeft, isConnectedRight); + } + } + + private boolean checkRightConnection(final List connections, final int width) { + if (position == width - 1) { + return false; + } + return connections.get(position); + } + + private boolean checkLeftConnection(final List connections) { + if (position - 1 < 0) { + return false; + } + return connections.get(position - 1); + } + + private void decideMoving(final boolean isConnectedLeft, final boolean isConnectedRight) { + if (!isConnectedLeft && !isConnectedRight) { + return; + } + decideMovingLeftOrRight(isConnectedLeft); + } + + private void decideMovingLeftOrRight(final boolean isConnectedLeft) { + if (isConnectedLeft) { + position--; + return; + } + position++; + } +} diff --git a/src/main/java/domain/Users.java b/src/main/java/domain/Users.java new file mode 100644 index 00000000..bd561cb6 --- /dev/null +++ b/src/main/java/domain/Users.java @@ -0,0 +1,16 @@ +package domain; + +import java.util.List; + +public class Users { + + private final List users; + + public Users(final List users) { + this.users = users; + } + + public List getUsers() { + return users; + } +} diff --git a/src/main/java/service/LadderServiceImpl.java b/src/main/java/service/LadderServiceImpl.java index ffe05c80..6b664749 100644 --- a/src/main/java/service/LadderServiceImpl.java +++ b/src/main/java/service/LadderServiceImpl.java @@ -1,18 +1,17 @@ package service; import domain.Ladder; +import domain.LadderInfo; import domain.LadderLine; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; +import java.util.*; import java.util.stream.IntStream; public class LadderServiceImpl implements LadderService { @Override public Ladder makeLadder(final int width, final int height) { - return new Ladder(makeLadderLines(height, width)); + return new Ladder(makeLadderLines(height, width), new LadderInfo(width, height)); } private List makeLadderLines(final int height, final int width) { diff --git a/src/main/java/service/UserService.java b/src/main/java/service/UserService.java new file mode 100644 index 00000000..e5cf91e0 --- /dev/null +++ b/src/main/java/service/UserService.java @@ -0,0 +1,10 @@ +package service; + +import domain.Ladder; +import domain.Users; + +public interface UserService { + Users makeUsers(final int width); + + void updatePosition(final Ladder ladder, final Users users); +} diff --git a/src/main/java/service/UserServiceImpl.java b/src/main/java/service/UserServiceImpl.java new file mode 100644 index 00000000..7270b9df --- /dev/null +++ b/src/main/java/service/UserServiceImpl.java @@ -0,0 +1,28 @@ +package service; + +import domain.Ladder; +import domain.User; +import domain.Users; + +import java.util.stream.IntStream; + +public class UserServiceImpl implements UserService { + + @Override + public Users makeUsers(final int width) { + return new Users(IntStream.range(0, width) + .mapToObj(this::makeUser) + .toList()); + } + + private User makeUser(final int position) { + return new User(position, position); + } + + @Override + public void updatePosition(final Ladder ladder, final Users users) { + for (User user : users.getUsers()) { + user.updatePosition(ladder.getLadderLines(), ladder.getLadderInfo()); + } + } +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 63293498..11c41f09 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -5,4 +5,8 @@ public class OutputView { public void printLadderLine(final String ladderLine) { System.out.println(ladderLine); } + + public void printLadderResult(final int name, final int position) { + System.out.println(name + " -> " + position); + } } From ce853c550cb525debb5f2b7e23656d26b8aac80f Mon Sep 17 00:00:00 2001 From: Kim Uijin <127496156+sansan20535@users.noreply.github.com> Date: Thu, 31 Oct 2024 02:06:31 +0900 Subject: [PATCH 04/13] =?UTF-8?q?[FEAT]=204=EB=8B=A8=EA=B3=84=20:=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/controller/LadderController.java | 49 +++++++++++++++---- src/main/java/domain/Ladder.java | 17 +------ src/main/java/domain/LadderInfo.java | 18 +------ src/main/java/domain/LadderLine.java | 12 +---- src/main/java/domain/User.java | 8 +-- src/main/java/domain/Users.java | 7 +++ src/main/java/service/LadderServiceImpl.java | 13 ++++- src/main/java/service/UserService.java | 4 +- src/main/java/service/UserServiceImpl.java | 14 ++---- src/main/java/util/TextUtils.java | 13 +++++ src/main/java/view/InputView.java | 21 ++++++-- src/main/java/view/OutputView.java | 25 +++++++++- 12 files changed, 128 insertions(+), 73 deletions(-) create mode 100644 src/main/java/util/TextUtils.java diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index e8d67f1e..b793e8b3 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -9,6 +9,8 @@ import view.InputView; import view.OutputView; +import java.util.List; + public class LadderController { private final LadderService ladderService; @@ -24,27 +26,56 @@ public LadderController(final LadderService ladderService, final UserService use } public void start() { - final int width = inputView.inputWidth(); + final Users users = userService.makeUsers(inputView.inputUserNames()); + final List results = inputView.inputResults(); + final int width = users.getUsers().size(); final int height = inputView.inputHeight(); - final Ladder ladder = ladderService.makeLadder(width, height); - final Users users = userService.makeUsers(width); userService.updatePosition(ladder, users); - printLadder(ladder); - printLadderResult(users); + printLadder(users.getUsers(), ladder, results); + printLadderResult(users, results); } - private void printLadder(final Ladder ladder) { - for (LadderLine ladderLine : ladder.getLadderLines()) { + private void printLadder(final List users, final Ladder ladder, final List results) { + for (User user : users) { + outputView.printUser(user.getName()); + } + outputView.printEmpty(); + for (LadderLine ladderLine : ladder.ladderLines()) { outputView.printLadderLine(ladderLine.getLine()); } + for (String result : results) { + outputView.printResult(result); + } + outputView.printEmpty(); } - private void printLadderResult(final Users users) { + private void printLadderResult(final Users users, final List results) { + while (true) { + final String wantedUserName = inputView.inputWantedUserName(); + final boolean isAll = checkUserName(wantedUserName); + printResult(wantedUserName, users, results, isAll); + } + } + + private boolean checkUserName(final String wantedUserName) { + return wantedUserName.equals("all"); + } + + private void printResult(final String wantedUserName, final Users users, final List results, final boolean isAll) { + if (!isAll) { + outputView.printExecutionResult(); + outputView.printUserResult(results.get( + users.findByName(wantedUserName).getPosition()) + ); + return; + } + + outputView.printExecutionResult(); for (User user : users.getUsers()) { - outputView.printLadderResult(user.getName(), user.getPosition()); + outputView.printAllUserResults(user.getName(), results.get(user.getPosition())); } } } diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java index a4e5cea3..ed77678e 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/Ladder.java @@ -2,20 +2,5 @@ import java.util.List; -public class Ladder { - private final List ladderLines; - private final LadderInfo ladderInfo; - - public Ladder(final List ladderLines, final LadderInfo ladderInfo) { - this.ladderLines = ladderLines; - this.ladderInfo = ladderInfo; - } - - public LadderInfo getLadderInfo() { - return ladderInfo; - } - - public List getLadderLines() { - return ladderLines; - } +public record Ladder(List ladderLines, LadderInfo ladderInfo) { } diff --git a/src/main/java/domain/LadderInfo.java b/src/main/java/domain/LadderInfo.java index 24f732b7..d969c102 100644 --- a/src/main/java/domain/LadderInfo.java +++ b/src/main/java/domain/LadderInfo.java @@ -1,20 +1,4 @@ package domain; -public class LadderInfo { - - private final int width; - private final int height; - - public LadderInfo(int width, int height) { - this.width = width; - this.height = height; - } - - public int getWidth() { - return width; - } - - public int getHeight() { - return height; - } +public record LadderInfo(int width, int height) { } diff --git a/src/main/java/domain/LadderLine.java b/src/main/java/domain/LadderLine.java index 0a5f8083..4069b80d 100644 --- a/src/main/java/domain/LadderLine.java +++ b/src/main/java/domain/LadderLine.java @@ -7,17 +7,9 @@ public class LadderLine { private final List connections; private final String line; - public LadderLine(final List connections) { + public LadderLine(final List connections, final String line) { this.connections = connections; - this.line = makeLine(); - } - - private String makeLine() { - final List line = connections.stream() - .map(connections -> LadderLineConnection.of(connections).getLadderConnectionFormat()) - .toList(); - - return String.join("", line) + "|"; + this.line = line; } public List getConnections() { diff --git a/src/main/java/domain/User.java b/src/main/java/domain/User.java index 75921c79..e2b20624 100644 --- a/src/main/java/domain/User.java +++ b/src/main/java/domain/User.java @@ -4,15 +4,15 @@ public class User { - private int name; + private final String name; private int position; - public User(final int name, final int position) { + public User(final String name, final int position) { this.name = name; this.position = position; } - public int getName() { + public String getName() { return name; } @@ -22,7 +22,7 @@ public int getPosition() { public void updatePosition(final List ladderLines, final LadderInfo ladderInfo) { for (LadderLine ladderLine : ladderLines) { - final boolean isConnectedRight = checkRightConnection(ladderLine.getConnections(), ladderInfo.getWidth()); + final boolean isConnectedRight = checkRightConnection(ladderLine.getConnections(), ladderInfo.width()); final boolean isConnectedLeft = checkLeftConnection(ladderLine.getConnections()); decideMoving(isConnectedLeft, isConnectedRight); } diff --git a/src/main/java/domain/Users.java b/src/main/java/domain/Users.java index bd561cb6..f82f3a58 100644 --- a/src/main/java/domain/Users.java +++ b/src/main/java/domain/Users.java @@ -13,4 +13,11 @@ public Users(final List users) { public List getUsers() { return users; } + + public User findByName(final String userName) { + return users.stream() + .filter(user -> user.getName().equals(userName)) + .findFirst() + .orElse(null); // 또는 예외를 던질 수 있습니다. + } } diff --git a/src/main/java/service/LadderServiceImpl.java b/src/main/java/service/LadderServiceImpl.java index 6b664749..533f03ef 100644 --- a/src/main/java/service/LadderServiceImpl.java +++ b/src/main/java/service/LadderServiceImpl.java @@ -3,12 +3,15 @@ import domain.Ladder; import domain.LadderInfo; import domain.LadderLine; +import domain.LadderLineConnection; import java.util.*; import java.util.stream.IntStream; public class LadderServiceImpl implements LadderService { + private static final String EDGE_OF_LADDER = "|"; + @Override public Ladder makeLadder(final int width, final int height) { return new Ladder(makeLadderLines(height, width), new LadderInfo(width, height)); @@ -21,7 +24,8 @@ private List makeLadderLines(final int height, final int width) { } private LadderLine makeLadderLine(final int width) { - return new LadderLine(makeConnections(width)); + List connections = makeConnections(width); + return new LadderLine(connections, makeLine(connections)); } private List makeConnections(final int width) { @@ -40,4 +44,11 @@ private void addConnections(final List connections, final boolean isCon connections.add(isConnected); } } + + private String makeLine(final List connections) { + final List line = connections.stream() + .map(connection -> LadderLineConnection.of(connection).getLadderConnectionFormat()) + .toList(); + return String.join("", line) + EDGE_OF_LADDER; + } } diff --git a/src/main/java/service/UserService.java b/src/main/java/service/UserService.java index e5cf91e0..53c3ffe7 100644 --- a/src/main/java/service/UserService.java +++ b/src/main/java/service/UserService.java @@ -3,8 +3,10 @@ import domain.Ladder; import domain.Users; +import java.util.List; + public interface UserService { - Users makeUsers(final int width); + Users makeUsers(final List userNames); void updatePosition(final Ladder ladder, final Users users); } diff --git a/src/main/java/service/UserServiceImpl.java b/src/main/java/service/UserServiceImpl.java index 7270b9df..cefd9eae 100644 --- a/src/main/java/service/UserServiceImpl.java +++ b/src/main/java/service/UserServiceImpl.java @@ -4,25 +4,21 @@ import domain.User; import domain.Users; -import java.util.stream.IntStream; +import java.util.List; public class UserServiceImpl implements UserService { @Override - public Users makeUsers(final int width) { - return new Users(IntStream.range(0, width) - .mapToObj(this::makeUser) + public Users makeUsers(final List userNames) { + return new Users(userNames.stream() + .map(userName -> new User(userName, userNames.indexOf(userName))) .toList()); } - private User makeUser(final int position) { - return new User(position, position); - } - @Override public void updatePosition(final Ladder ladder, final Users users) { for (User user : users.getUsers()) { - user.updatePosition(ladder.getLadderLines(), ladder.getLadderInfo()); + user.updatePosition(ladder.ladderLines(), ladder.ladderInfo()); } } } diff --git a/src/main/java/util/TextUtils.java b/src/main/java/util/TextUtils.java new file mode 100644 index 00000000..97312bff --- /dev/null +++ b/src/main/java/util/TextUtils.java @@ -0,0 +1,13 @@ +package util; + +import java.util.ArrayList; +import java.util.List; + +public class TextUtils { + + private static final String SPLIT_CHARACTERS = ","; + + public static List splitMessage(final String message) { + return new ArrayList(List.of(message.split(SPLIT_CHARACTERS))); + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index f90908da..bba7cdba 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,18 +1,31 @@ package view; +import util.TextUtils; + +import java.util.List; import java.util.Scanner; public class InputView { private final Scanner scanner = new Scanner(System.in); - public int inputWidth() { - System.out.println("사다리의 넓이는 몇 개인가요?"); - return scanner.nextInt(); + public List inputUserNames() { + System.out.println("참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"); + return TextUtils.splitMessage(scanner.nextLine()); + } + + public List inputResults() { + System.out.println("실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)"); + return TextUtils.splitMessage(scanner.nextLine()); } public int inputHeight() { - System.out.println("사다리의 높이는 몇 개인가요?"); + System.out.println("최대 사다리의 높이는 몇 개인가요?"); return scanner.nextInt(); } + + public String inputWantedUserName() { + System.out.println("결과를 보고 싶은 사람은?"); + return scanner.next(); + } } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 11c41f09..190042b8 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -2,11 +2,32 @@ public class OutputView { + public void printEmpty() { + System.out.println(" "); + } + + public void printUser(final String userName) { + System.out.print(userName + " "); + } + + public void printResult(final String result) { + System.out.print(result + " "); + } + public void printLadderLine(final String ladderLine) { System.out.println(ladderLine); } - public void printLadderResult(final int name, final int position) { - System.out.println(name + " -> " + position); + public void printUserResult(final String result) { + System.out.println(result); + System.out.println(" "); + } + + public void printAllUserResults(final String name, final String result) { + System.out.println(name + " : " + result); + } + + public void printExecutionResult() { + System.out.println("실행 결과"); } } From 5cb3737bc31bfdf78182adb525efe6f28f123718 Mon Sep 17 00:00:00 2001 From: Kim Uijin <127496156+sansan20535@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:11:36 +0900 Subject: [PATCH 05/13] =?UTF-8?q?[FEAT]=205=EB=8B=A8=EA=B3=84=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81=20:=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=20=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/LadderApplication.java | 13 +++-- .../java/controller/LadderController.java | 55 ++++++++++--------- src/main/java/domain/Ladder.java | 6 -- src/main/java/domain/LadderInfo.java | 4 -- src/main/java/domain/LadderLine.java | 22 -------- src/main/java/domain/ladder/Ladder.java | 9 +++ src/main/java/domain/ladder/LadderInfo.java | 7 +++ src/main/java/domain/ladder/LadderLine.java | 9 +++ .../{ => ladder}/LadderLineConnection.java | 6 +- src/main/java/domain/results/Results.java | 9 +++ src/main/java/domain/{ => users}/User.java | 9 ++- src/main/java/domain/{ => users}/Users.java | 16 ++---- .../repository/ladder/LadderRepository.java | 16 ++++++ .../repository/results/ResultsRepository.java | 16 ++++++ .../java/repository/users/UserRepository.java | 16 ++++++ src/main/java/service/LadderService.java | 7 --- src/main/java/service/UserService.java | 12 ---- src/main/java/service/UserServiceImpl.java | 24 -------- .../java/service/ladder/LadderService.java | 10 ++++ .../{ => ladder}/LadderServiceImpl.java | 25 ++++++--- .../java/service/results/ResultsService.java | 11 ++++ .../service/results/ResultsServiceImpl.java | 25 +++++++++ src/main/java/service/users/UserService.java | 14 +++++ .../java/service/users/UserServiceImpl.java | 35 ++++++++++++ src/test/java/LadderLineConnectionTest.java | 2 +- 25 files changed, 244 insertions(+), 134 deletions(-) delete mode 100644 src/main/java/domain/Ladder.java delete mode 100644 src/main/java/domain/LadderInfo.java delete mode 100644 src/main/java/domain/LadderLine.java create mode 100644 src/main/java/domain/ladder/Ladder.java create mode 100644 src/main/java/domain/ladder/LadderInfo.java create mode 100644 src/main/java/domain/ladder/LadderLine.java rename src/main/java/domain/{ => ladder}/LadderLineConnection.java (90%) create mode 100644 src/main/java/domain/results/Results.java rename src/main/java/domain/{ => users}/User.java (90%) rename src/main/java/domain/{ => users}/Users.java (56%) create mode 100644 src/main/java/repository/ladder/LadderRepository.java create mode 100644 src/main/java/repository/results/ResultsRepository.java create mode 100644 src/main/java/repository/users/UserRepository.java delete mode 100644 src/main/java/service/LadderService.java delete mode 100644 src/main/java/service/UserService.java delete mode 100644 src/main/java/service/UserServiceImpl.java create mode 100644 src/main/java/service/ladder/LadderService.java rename src/main/java/service/{ => ladder}/LadderServiceImpl.java (69%) create mode 100644 src/main/java/service/results/ResultsService.java create mode 100644 src/main/java/service/results/ResultsServiceImpl.java create mode 100644 src/main/java/service/users/UserService.java create mode 100644 src/main/java/service/users/UserServiceImpl.java diff --git a/src/main/java/LadderApplication.java b/src/main/java/LadderApplication.java index 86a487a3..88a5388d 100644 --- a/src/main/java/LadderApplication.java +++ b/src/main/java/LadderApplication.java @@ -1,14 +1,19 @@ import controller.LadderController; -import service.LadderServiceImpl; -import service.UserServiceImpl; +import repository.ladder.LadderRepository; +import repository.results.ResultsRepository; +import repository.users.UserRepository; +import service.ladder.LadderServiceImpl; +import service.results.ResultsServiceImpl; +import service.users.UserServiceImpl; import view.InputView; import view.OutputView; public class LadderApplication { public static void main(String[] args) { LadderController ladderController = new LadderController( - new LadderServiceImpl(), - new UserServiceImpl(), + new LadderServiceImpl(new LadderRepository()), + new UserServiceImpl(new UserRepository()), + new ResultsServiceImpl(new ResultsRepository()), new OutputView(), new InputView() ); diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index b793e8b3..262fd722 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -1,58 +1,58 @@ package controller; -import domain.Ladder; -import domain.LadderLine; -import domain.User; -import domain.Users; -import service.LadderService; -import service.UserService; +import domain.ladder.Ladder; +import domain.ladder.LadderLine; +import domain.results.Results; +import domain.users.User; +import domain.users.Users; +import service.ladder.LadderService; +import service.results.ResultsService; +import service.users.UserService; import view.InputView; import view.OutputView; -import java.util.List; - public class LadderController { private final LadderService ladderService; private final UserService userService; + private final ResultsService resultsService; private final OutputView outputView; private final InputView inputView; - public LadderController(final LadderService ladderService, final UserService userService, final OutputView outputView, final InputView inputView) { + public LadderController(final LadderService ladderService, final UserService userService, final ResultsService resultsService, final OutputView outputView, final InputView inputView) { this.ladderService = ladderService; this.userService = userService; + this.resultsService = resultsService; this.outputView = outputView; this.inputView = inputView; } public void start() { - final Users users = userService.makeUsers(inputView.inputUserNames()); - final List results = inputView.inputResults(); - final int width = users.getUsers().size(); - final int height = inputView.inputHeight(); - final Ladder ladder = ladderService.makeLadder(width, height); + userService.makeUsers(inputView.inputUserNames()); + resultsService.makeResults(inputView.inputResults()); + ladderService.makeLadder(userService.getUsers().users().size(), inputView.inputHeight()); - userService.updatePosition(ladder, users); + userService.updatePosition(ladderService.getLadder(), userService.getUsers()); - printLadder(users.getUsers(), ladder, results); - printLadderResult(users, results); + printLadder(userService.getUsers(), ladderService.getLadder(), resultsService.getResults()); + printLadderResult(userService.getUsers(), resultsService.getResults()); } - private void printLadder(final List users, final Ladder ladder, final List results) { - for (User user : users) { + private void printLadder(final Users users, final Ladder ladder, final Results results) { + for (User user : users.users()) { outputView.printUser(user.getName()); } outputView.printEmpty(); for (LadderLine ladderLine : ladder.ladderLines()) { - outputView.printLadderLine(ladderLine.getLine()); + outputView.printLadderLine(ladderLine.line()); } - for (String result : results) { + for (String result : results.results()) { outputView.printResult(result); } outputView.printEmpty(); } - private void printLadderResult(final Users users, final List results) { + private void printLadderResult(final Users users, final Results results) { while (true) { final String wantedUserName = inputView.inputWantedUserName(); final boolean isAll = checkUserName(wantedUserName); @@ -64,18 +64,19 @@ private boolean checkUserName(final String wantedUserName) { return wantedUserName.equals("all"); } - private void printResult(final String wantedUserName, final Users users, final List results, final boolean isAll) { + private void printResult(final String wantedUserName, final Users users, final Results results, final boolean isAll) { if (!isAll) { outputView.printExecutionResult(); - outputView.printUserResult(results.get( - users.findByName(wantedUserName).getPosition()) + outputView.printUserResult(results.results() + .get(users.findByName(wantedUserName).getPosition()) ); return; } outputView.printExecutionResult(); - for (User user : users.getUsers()) { - outputView.printAllUserResults(user.getName(), results.get(user.getPosition())); + for (User user : users.users()) { + outputView.printAllUserResults(user.getName(), results.results() + .get(user.getPosition())); } } } diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java deleted file mode 100644 index ed77678e..00000000 --- a/src/main/java/domain/Ladder.java +++ /dev/null @@ -1,6 +0,0 @@ -package domain; - -import java.util.List; - -public record Ladder(List ladderLines, LadderInfo ladderInfo) { -} diff --git a/src/main/java/domain/LadderInfo.java b/src/main/java/domain/LadderInfo.java deleted file mode 100644 index d969c102..00000000 --- a/src/main/java/domain/LadderInfo.java +++ /dev/null @@ -1,4 +0,0 @@ -package domain; - -public record LadderInfo(int width, int height) { -} diff --git a/src/main/java/domain/LadderLine.java b/src/main/java/domain/LadderLine.java deleted file mode 100644 index 4069b80d..00000000 --- a/src/main/java/domain/LadderLine.java +++ /dev/null @@ -1,22 +0,0 @@ -package domain; - -import java.util.List; - -public class LadderLine { - - private final List connections; - private final String line; - - public LadderLine(final List connections, final String line) { - this.connections = connections; - this.line = line; - } - - public List getConnections() { - return connections; - } - - public String getLine() { - return line; - } -} diff --git a/src/main/java/domain/ladder/Ladder.java b/src/main/java/domain/ladder/Ladder.java new file mode 100644 index 00000000..00eec49d --- /dev/null +++ b/src/main/java/domain/ladder/Ladder.java @@ -0,0 +1,9 @@ +package domain.ladder; + +import java.util.List; + +public record Ladder( + List ladderLines, + LadderInfo ladderInfo +) { +} diff --git a/src/main/java/domain/ladder/LadderInfo.java b/src/main/java/domain/ladder/LadderInfo.java new file mode 100644 index 00000000..e6018fc6 --- /dev/null +++ b/src/main/java/domain/ladder/LadderInfo.java @@ -0,0 +1,7 @@ +package domain.ladder; + +public record LadderInfo( + int width, + int height +) { +} diff --git a/src/main/java/domain/ladder/LadderLine.java b/src/main/java/domain/ladder/LadderLine.java new file mode 100644 index 00000000..594f7101 --- /dev/null +++ b/src/main/java/domain/ladder/LadderLine.java @@ -0,0 +1,9 @@ +package domain.ladder; + +import java.util.List; + +public record LadderLine( + List connections, + String line +) { +} diff --git a/src/main/java/domain/LadderLineConnection.java b/src/main/java/domain/ladder/LadderLineConnection.java similarity index 90% rename from src/main/java/domain/LadderLineConnection.java rename to src/main/java/domain/ladder/LadderLineConnection.java index 7196b0c8..a8bc90db 100644 --- a/src/main/java/domain/LadderLineConnection.java +++ b/src/main/java/domain/ladder/LadderLineConnection.java @@ -1,4 +1,4 @@ -package domain; +package domain.ladder; import java.util.Arrays; @@ -19,10 +19,6 @@ public String getLadderConnectionFormat() { return ladderConnectionFormat; } - public boolean isConnected() { - return isConnected; - } - public static LadderLineConnection of(final boolean isConnected) { return Arrays.stream(values()) .filter(ladderLineConnection -> ladderLineConnection.isConnected == isConnected) diff --git a/src/main/java/domain/results/Results.java b/src/main/java/domain/results/Results.java new file mode 100644 index 00000000..6eeaf4bc --- /dev/null +++ b/src/main/java/domain/results/Results.java @@ -0,0 +1,9 @@ +package domain.results; + +import java.util.List; + +public record Results( + List results +) { + +} diff --git a/src/main/java/domain/User.java b/src/main/java/domain/users/User.java similarity index 90% rename from src/main/java/domain/User.java rename to src/main/java/domain/users/User.java index e2b20624..5e008b40 100644 --- a/src/main/java/domain/User.java +++ b/src/main/java/domain/users/User.java @@ -1,4 +1,7 @@ -package domain; +package domain.users; + +import domain.ladder.LadderInfo; +import domain.ladder.LadderLine; import java.util.List; @@ -22,8 +25,8 @@ public int getPosition() { public void updatePosition(final List ladderLines, final LadderInfo ladderInfo) { for (LadderLine ladderLine : ladderLines) { - final boolean isConnectedRight = checkRightConnection(ladderLine.getConnections(), ladderInfo.width()); - final boolean isConnectedLeft = checkLeftConnection(ladderLine.getConnections()); + final boolean isConnectedRight = checkRightConnection(ladderLine.connections(), ladderInfo.width()); + final boolean isConnectedLeft = checkLeftConnection(ladderLine.connections()); decideMoving(isConnectedLeft, isConnectedRight); } } diff --git a/src/main/java/domain/Users.java b/src/main/java/domain/users/Users.java similarity index 56% rename from src/main/java/domain/Users.java rename to src/main/java/domain/users/Users.java index f82f3a58..aae9a239 100644 --- a/src/main/java/domain/Users.java +++ b/src/main/java/domain/users/Users.java @@ -1,18 +1,10 @@ -package domain; +package domain.users; import java.util.List; -public class Users { - - private final List users; - - public Users(final List users) { - this.users = users; - } - - public List getUsers() { - return users; - } +public record Users( + List users +) { public User findByName(final String userName) { return users.stream() diff --git a/src/main/java/repository/ladder/LadderRepository.java b/src/main/java/repository/ladder/LadderRepository.java new file mode 100644 index 00000000..43a67d19 --- /dev/null +++ b/src/main/java/repository/ladder/LadderRepository.java @@ -0,0 +1,16 @@ +package repository.ladder; + +import domain.ladder.Ladder; + +public class LadderRepository { + + private Ladder ladder; + + public Ladder getLadder() { + return ladder; + } + + public void setLadder(Ladder ladder) { + this.ladder = ladder; + } +} diff --git a/src/main/java/repository/results/ResultsRepository.java b/src/main/java/repository/results/ResultsRepository.java new file mode 100644 index 00000000..4b30e085 --- /dev/null +++ b/src/main/java/repository/results/ResultsRepository.java @@ -0,0 +1,16 @@ +package repository.results; + +import domain.results.Results; + +public class ResultsRepository { + + private Results results; + + public Results getResults() { + return results; + } + + public void setResults(Results results) { + this.results = results; + } +} diff --git a/src/main/java/repository/users/UserRepository.java b/src/main/java/repository/users/UserRepository.java new file mode 100644 index 00000000..69a018af --- /dev/null +++ b/src/main/java/repository/users/UserRepository.java @@ -0,0 +1,16 @@ +package repository.users; + +import domain.users.Users; + +public class UserRepository { + + private Users users; + + public Users getUsers() { + return users; + } + + public void setUsers(Users users) { + this.users = users; + } +} diff --git a/src/main/java/service/LadderService.java b/src/main/java/service/LadderService.java deleted file mode 100644 index b3394a68..00000000 --- a/src/main/java/service/LadderService.java +++ /dev/null @@ -1,7 +0,0 @@ -package service; - -import domain.Ladder; - -public interface LadderService { - Ladder makeLadder(final int width, final int height); -} diff --git a/src/main/java/service/UserService.java b/src/main/java/service/UserService.java deleted file mode 100644 index 53c3ffe7..00000000 --- a/src/main/java/service/UserService.java +++ /dev/null @@ -1,12 +0,0 @@ -package service; - -import domain.Ladder; -import domain.Users; - -import java.util.List; - -public interface UserService { - Users makeUsers(final List userNames); - - void updatePosition(final Ladder ladder, final Users users); -} diff --git a/src/main/java/service/UserServiceImpl.java b/src/main/java/service/UserServiceImpl.java deleted file mode 100644 index cefd9eae..00000000 --- a/src/main/java/service/UserServiceImpl.java +++ /dev/null @@ -1,24 +0,0 @@ -package service; - -import domain.Ladder; -import domain.User; -import domain.Users; - -import java.util.List; - -public class UserServiceImpl implements UserService { - - @Override - public Users makeUsers(final List userNames) { - return new Users(userNames.stream() - .map(userName -> new User(userName, userNames.indexOf(userName))) - .toList()); - } - - @Override - public void updatePosition(final Ladder ladder, final Users users) { - for (User user : users.getUsers()) { - user.updatePosition(ladder.ladderLines(), ladder.ladderInfo()); - } - } -} diff --git a/src/main/java/service/ladder/LadderService.java b/src/main/java/service/ladder/LadderService.java new file mode 100644 index 00000000..b7fb07f4 --- /dev/null +++ b/src/main/java/service/ladder/LadderService.java @@ -0,0 +1,10 @@ +package service.ladder; + +import domain.ladder.Ladder; + +public interface LadderService { + + void makeLadder(final int width, final int height); + + Ladder getLadder(); +} diff --git a/src/main/java/service/LadderServiceImpl.java b/src/main/java/service/ladder/LadderServiceImpl.java similarity index 69% rename from src/main/java/service/LadderServiceImpl.java rename to src/main/java/service/ladder/LadderServiceImpl.java index 533f03ef..daf83599 100644 --- a/src/main/java/service/LadderServiceImpl.java +++ b/src/main/java/service/ladder/LadderServiceImpl.java @@ -1,20 +1,26 @@ -package service; +package service.ladder; -import domain.Ladder; -import domain.LadderInfo; -import domain.LadderLine; -import domain.LadderLineConnection; +import domain.ladder.Ladder; +import domain.ladder.LadderInfo; +import domain.ladder.LadderLine; +import domain.ladder.LadderLineConnection; +import repository.ladder.LadderRepository; import java.util.*; import java.util.stream.IntStream; public class LadderServiceImpl implements LadderService { + private final LadderRepository ladderRepository; private static final String EDGE_OF_LADDER = "|"; + public LadderServiceImpl(final LadderRepository ladderRepository) { + this.ladderRepository = ladderRepository; + } + @Override - public Ladder makeLadder(final int width, final int height) { - return new Ladder(makeLadderLines(height, width), new LadderInfo(width, height)); + public void makeLadder(final int width, final int height) { + ladderRepository.setLadder(new Ladder(makeLadderLines(height, width), new LadderInfo(width, height))); } private List makeLadderLines(final int height, final int width) { @@ -51,4 +57,9 @@ private String makeLine(final List connections) { .toList(); return String.join("", line) + EDGE_OF_LADDER; } + + @Override + public Ladder getLadder() { + return ladderRepository.getLadder(); + } } diff --git a/src/main/java/service/results/ResultsService.java b/src/main/java/service/results/ResultsService.java new file mode 100644 index 00000000..4dd91f86 --- /dev/null +++ b/src/main/java/service/results/ResultsService.java @@ -0,0 +1,11 @@ +package service.results; + +import domain.results.Results; + +import java.util.List; + +public interface ResultsService { + void makeResults(final List results); + + Results getResults(); +} diff --git a/src/main/java/service/results/ResultsServiceImpl.java b/src/main/java/service/results/ResultsServiceImpl.java new file mode 100644 index 00000000..ce479aed --- /dev/null +++ b/src/main/java/service/results/ResultsServiceImpl.java @@ -0,0 +1,25 @@ +package service.results; + +import domain.results.Results; +import repository.results.ResultsRepository; + +import java.util.List; + +public class ResultsServiceImpl implements ResultsService { + + private final ResultsRepository resultsRepository; + + public ResultsServiceImpl(ResultsRepository resultsRepository) { + this.resultsRepository = resultsRepository; + } + + @Override + public void makeResults(List results) { + resultsRepository.setResults(new Results(results)); + } + + @Override + public Results getResults() { + return resultsRepository.getResults(); + } +} diff --git a/src/main/java/service/users/UserService.java b/src/main/java/service/users/UserService.java new file mode 100644 index 00000000..33468927 --- /dev/null +++ b/src/main/java/service/users/UserService.java @@ -0,0 +1,14 @@ +package service.users; + +import domain.ladder.Ladder; +import domain.users.Users; + +import java.util.List; + +public interface UserService { + void makeUsers(final List userNames); + + void updatePosition(final Ladder ladder, final Users users); + + Users getUsers(); +} diff --git a/src/main/java/service/users/UserServiceImpl.java b/src/main/java/service/users/UserServiceImpl.java new file mode 100644 index 00000000..937475fa --- /dev/null +++ b/src/main/java/service/users/UserServiceImpl.java @@ -0,0 +1,35 @@ +package service.users; + +import domain.ladder.Ladder; +import domain.users.User; +import domain.users.Users; +import repository.users.UserRepository; + +import java.util.List; + +public class UserServiceImpl implements UserService { + + private final UserRepository userRepository; + + public UserServiceImpl(UserRepository userRepository) { + this.userRepository = userRepository; + } + + @Override + public void makeUsers(final List userNames) { + userRepository.setUsers(new Users(userNames.stream() + .map(userName -> new User(userName, userNames.indexOf(userName))) + .toList())); + } + + @Override + public void updatePosition(final Ladder ladder, final Users users) { + for (User user : users.users()) { + user.updatePosition(ladder.ladderLines(), ladder.ladderInfo()); + } + } + + public Users getUsers() { + return userRepository.getUsers(); + } +} diff --git a/src/test/java/LadderLineConnectionTest.java b/src/test/java/LadderLineConnectionTest.java index c2399248..8507e002 100644 --- a/src/test/java/LadderLineConnectionTest.java +++ b/src/test/java/LadderLineConnectionTest.java @@ -1,4 +1,4 @@ -import domain.LadderLineConnection; +import domain.ladder.LadderLineConnection; import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.assertEquals; From a465a836461d087f611f4015311df4fa772fa73b Mon Sep 17 00:00:00 2001 From: Kim Uijin <127496156+sansan20535@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:18:41 +0900 Subject: [PATCH 06/13] =?UTF-8?q?[FEAT]=205=EB=8B=A8=EA=B3=84=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81=20:=20=EC=A0=91=EA=B7=BC=20?= =?UTF-8?q?=EC=A7=80=EC=A0=95=EC=9E=90=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=9C=84=EC=B9=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/LadderController.java | 2 +- src/main/java/domain/users/Users.java | 7 ------- src/main/java/repository/ladder/LadderRepository.java | 2 +- .../java/repository/results/ResultsRepository.java | 2 +- src/main/java/repository/users/UserRepository.java | 10 +++++++++- src/main/java/service/results/ResultsServiceImpl.java | 4 ++-- src/main/java/service/users/UserService.java | 3 +++ src/main/java/service/users/UserServiceImpl.java | 5 +++++ 8 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index 262fd722..ce224f96 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -68,7 +68,7 @@ private void printResult(final String wantedUserName, final Users users, final R if (!isAll) { outputView.printExecutionResult(); outputView.printUserResult(results.results() - .get(users.findByName(wantedUserName).getPosition()) + .get(userService.findByName(wantedUserName).getPosition()) ); return; } diff --git a/src/main/java/domain/users/Users.java b/src/main/java/domain/users/Users.java index aae9a239..1a68e63c 100644 --- a/src/main/java/domain/users/Users.java +++ b/src/main/java/domain/users/Users.java @@ -5,11 +5,4 @@ public record Users( List users ) { - - public User findByName(final String userName) { - return users.stream() - .filter(user -> user.getName().equals(userName)) - .findFirst() - .orElse(null); // 또는 예외를 던질 수 있습니다. - } } diff --git a/src/main/java/repository/ladder/LadderRepository.java b/src/main/java/repository/ladder/LadderRepository.java index 43a67d19..b755d052 100644 --- a/src/main/java/repository/ladder/LadderRepository.java +++ b/src/main/java/repository/ladder/LadderRepository.java @@ -10,7 +10,7 @@ public Ladder getLadder() { return ladder; } - public void setLadder(Ladder ladder) { + public void setLadder(final Ladder ladder) { this.ladder = ladder; } } diff --git a/src/main/java/repository/results/ResultsRepository.java b/src/main/java/repository/results/ResultsRepository.java index 4b30e085..ad575972 100644 --- a/src/main/java/repository/results/ResultsRepository.java +++ b/src/main/java/repository/results/ResultsRepository.java @@ -10,7 +10,7 @@ public Results getResults() { return results; } - public void setResults(Results results) { + public void setResults(final Results results) { this.results = results; } } diff --git a/src/main/java/repository/users/UserRepository.java b/src/main/java/repository/users/UserRepository.java index 69a018af..a309ec31 100644 --- a/src/main/java/repository/users/UserRepository.java +++ b/src/main/java/repository/users/UserRepository.java @@ -1,5 +1,6 @@ package repository.users; +import domain.users.User; import domain.users.Users; public class UserRepository { @@ -10,7 +11,14 @@ public Users getUsers() { return users; } - public void setUsers(Users users) { + public void setUsers(final Users users) { this.users = users; } + + public User findByName(final String userName) { + return users.users().stream() + .filter(user -> user.getName().equals(userName)) + .findFirst() + .orElse(null); // 또는 예외를 던질 수 있습니다. + } } diff --git a/src/main/java/service/results/ResultsServiceImpl.java b/src/main/java/service/results/ResultsServiceImpl.java index ce479aed..183205b9 100644 --- a/src/main/java/service/results/ResultsServiceImpl.java +++ b/src/main/java/service/results/ResultsServiceImpl.java @@ -9,12 +9,12 @@ public class ResultsServiceImpl implements ResultsService { private final ResultsRepository resultsRepository; - public ResultsServiceImpl(ResultsRepository resultsRepository) { + public ResultsServiceImpl(final ResultsRepository resultsRepository) { this.resultsRepository = resultsRepository; } @Override - public void makeResults(List results) { + public void makeResults(final List results) { resultsRepository.setResults(new Results(results)); } diff --git a/src/main/java/service/users/UserService.java b/src/main/java/service/users/UserService.java index 33468927..ede37b18 100644 --- a/src/main/java/service/users/UserService.java +++ b/src/main/java/service/users/UserService.java @@ -1,6 +1,7 @@ package service.users; import domain.ladder.Ladder; +import domain.users.User; import domain.users.Users; import java.util.List; @@ -11,4 +12,6 @@ public interface UserService { void updatePosition(final Ladder ladder, final Users users); Users getUsers(); + + User findByName(final String name); } diff --git a/src/main/java/service/users/UserServiceImpl.java b/src/main/java/service/users/UserServiceImpl.java index 937475fa..a5a5f978 100644 --- a/src/main/java/service/users/UserServiceImpl.java +++ b/src/main/java/service/users/UserServiceImpl.java @@ -32,4 +32,9 @@ public void updatePosition(final Ladder ladder, final Users users) { public Users getUsers() { return userRepository.getUsers(); } + + @Override + public User findByName(final String name) { + return userRepository.findByName(name); + } } From 9bd9a42a8e740ea1a0637113b7b8e442380c143d Mon Sep 17 00:00:00 2001 From: Kim Uijin <127496156+sansan20535@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:26:43 +0900 Subject: [PATCH 07/13] =?UTF-8?q?[FEAT]=205=EB=8B=A8=EA=B3=84=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81=20:=20update=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=9C=84=EC=B9=98=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/domain/users/User.java | 45 ++----------------- .../java/repository/users/UserRepository.java | 41 +++++++++++++++++ .../java/service/users/UserServiceImpl.java | 2 +- .../LadderLineConnectionTest.java | 2 + 4 files changed, 48 insertions(+), 42 deletions(-) rename src/test/java/{ => ladder}/LadderLineConnectionTest.java (98%) diff --git a/src/main/java/domain/users/User.java b/src/main/java/domain/users/User.java index 5e008b40..937de0f9 100644 --- a/src/main/java/domain/users/User.java +++ b/src/main/java/domain/users/User.java @@ -1,10 +1,5 @@ package domain.users; -import domain.ladder.LadderInfo; -import domain.ladder.LadderLine; - -import java.util.List; - public class User { private final String name; @@ -19,44 +14,12 @@ public String getName() { return name; } - public int getPosition() { - return position; - } - - public void updatePosition(final List ladderLines, final LadderInfo ladderInfo) { - for (LadderLine ladderLine : ladderLines) { - final boolean isConnectedRight = checkRightConnection(ladderLine.connections(), ladderInfo.width()); - final boolean isConnectedLeft = checkLeftConnection(ladderLine.connections()); - decideMoving(isConnectedLeft, isConnectedRight); - } - } - - private boolean checkRightConnection(final List connections, final int width) { - if (position == width - 1) { - return false; - } - return connections.get(position); - } - - private boolean checkLeftConnection(final List connections) { - if (position - 1 < 0) { - return false; - } - return connections.get(position - 1); + public void setPosition(int position) { + this.position = position; } - private void decideMoving(final boolean isConnectedLeft, final boolean isConnectedRight) { - if (!isConnectedLeft && !isConnectedRight) { - return; - } - decideMovingLeftOrRight(isConnectedLeft); + public int getPosition() { + return position; } - private void decideMovingLeftOrRight(final boolean isConnectedLeft) { - if (isConnectedLeft) { - position--; - return; - } - position++; - } } diff --git a/src/main/java/repository/users/UserRepository.java b/src/main/java/repository/users/UserRepository.java index a309ec31..846b2a2a 100644 --- a/src/main/java/repository/users/UserRepository.java +++ b/src/main/java/repository/users/UserRepository.java @@ -1,8 +1,12 @@ package repository.users; +import domain.ladder.LadderInfo; +import domain.ladder.LadderLine; import domain.users.User; import domain.users.Users; +import java.util.List; + public class UserRepository { private Users users; @@ -21,4 +25,41 @@ public User findByName(final String userName) { .findFirst() .orElse(null); // 또는 예외를 던질 수 있습니다. } + + public void updatePosition(final User user, final List ladderLines, final LadderInfo ladderInfo) { + for (LadderLine ladderLine : ladderLines) { + final boolean isConnectedRight = checkRightConnection(ladderLine.connections(), user.getPosition(), ladderInfo.width()); + final boolean isConnectedLeft = checkLeftConnection(ladderLine.connections(), user.getPosition()); + decideMoving(isConnectedLeft, isConnectedRight, user); + } + } + + private boolean checkRightConnection(final List connections, final int position, final int width) { + if (position == width - 1) { + return false; + } + return connections.get(position); + } + + private boolean checkLeftConnection(final List connections, final int position) { + if (position - 1 < 0) { + return false; + } + return connections.get(position - 1); + } + + private void decideMoving(final boolean isConnectedLeft, final boolean isConnectedRight, final User user) { + if (!isConnectedLeft && !isConnectedRight) { + return; + } + decideMovingLeftOrRight(isConnectedLeft, user); + } + + private void decideMovingLeftOrRight(final boolean isConnectedLeft, final User user) { + if (isConnectedLeft) { + user.setPosition(user.getPosition() - 1); + return; + } + user.setPosition(user.getPosition() + 1); + } } diff --git a/src/main/java/service/users/UserServiceImpl.java b/src/main/java/service/users/UserServiceImpl.java index a5a5f978..3b3dfae5 100644 --- a/src/main/java/service/users/UserServiceImpl.java +++ b/src/main/java/service/users/UserServiceImpl.java @@ -25,7 +25,7 @@ public void makeUsers(final List userNames) { @Override public void updatePosition(final Ladder ladder, final Users users) { for (User user : users.users()) { - user.updatePosition(ladder.ladderLines(), ladder.ladderInfo()); + userRepository.updatePosition(user, ladder.ladderLines(), ladder.ladderInfo()); } } diff --git a/src/test/java/LadderLineConnectionTest.java b/src/test/java/ladder/LadderLineConnectionTest.java similarity index 98% rename from src/test/java/LadderLineConnectionTest.java rename to src/test/java/ladder/LadderLineConnectionTest.java index 8507e002..2ebdd6f0 100644 --- a/src/test/java/LadderLineConnectionTest.java +++ b/src/test/java/ladder/LadderLineConnectionTest.java @@ -1,3 +1,5 @@ +package ladder; + import domain.ladder.LadderLineConnection; import org.junit.jupiter.api.*; From ef10d694a4ed3af20c455e05cc721e916ffaa83a Mon Sep 17 00:00:00 2001 From: Kim Uijin <127496156+sansan20535@users.noreply.github.com> Date: Thu, 21 Nov 2024 15:57:45 +0900 Subject: [PATCH 08/13] =?UTF-8?q?[REFACT]=20:=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=ED=9A=9F=EC=88=98=20=EC=A0=9C=ED=95=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/LadderController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index ce224f96..5026c50b 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -53,7 +53,8 @@ private void printLadder(final Users users, final Ladder ladder, final Results r } private void printLadderResult(final Users users, final Results results) { - while (true) { + int printCount = 0; + while (printCount < users.users().size()) { final String wantedUserName = inputView.inputWantedUserName(); final boolean isAll = checkUserName(wantedUserName); printResult(wantedUserName, users, results, isAll); From 570a69a138a750f872a4f683924224cd4e749236 Mon Sep 17 00:00:00 2001 From: Kim Uijin <127496156+sansan20535@users.noreply.github.com> Date: Thu, 21 Nov 2024 15:59:17 +0900 Subject: [PATCH 09/13] =?UTF-8?q?[REFACT]=20:=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20=ED=95=A8=EC=88=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/LadderController.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index 5026c50b..e89f5ed0 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -56,15 +56,10 @@ private void printLadderResult(final Users users, final Results results) { int printCount = 0; while (printCount < users.users().size()) { final String wantedUserName = inputView.inputWantedUserName(); - final boolean isAll = checkUserName(wantedUserName); - printResult(wantedUserName, users, results, isAll); + printResult(wantedUserName, users, results, wantedUserName.equals("all")); } } - private boolean checkUserName(final String wantedUserName) { - return wantedUserName.equals("all"); - } - private void printResult(final String wantedUserName, final Users users, final Results results, final boolean isAll) { if (!isAll) { outputView.printExecutionResult(); From 5c9654e51e676ade0ece9b192d3c2312cde62d50 Mon Sep 17 00:00:00 2001 From: Kim Uijin <127496156+sansan20535@users.noreply.github.com> Date: Thu, 21 Nov 2024 16:27:39 +0900 Subject: [PATCH 10/13] =?UTF-8?q?[REFACT]=20:=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EB=AA=85=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/util/TextUtils.java | 2 +- src/main/java/view/InputView.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/util/TextUtils.java b/src/main/java/util/TextUtils.java index 97312bff..8cbea754 100644 --- a/src/main/java/util/TextUtils.java +++ b/src/main/java/util/TextUtils.java @@ -7,7 +7,7 @@ public class TextUtils { private static final String SPLIT_CHARACTERS = ","; - public static List splitMessage(final String message) { + public static List splitMessageWithComma(final String message) { return new ArrayList(List.of(message.split(SPLIT_CHARACTERS))); } } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index bba7cdba..e8c303de 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -11,12 +11,12 @@ public class InputView { public List inputUserNames() { System.out.println("참여할 사람 이름을 입력하세요. (이름은 쉼표(,)로 구분하세요)"); - return TextUtils.splitMessage(scanner.nextLine()); + return TextUtils.splitMessageWithComma(scanner.nextLine()); } public List inputResults() { System.out.println("실행 결과를 입력하세요. (결과는 쉼표(,)로 구분하세요)"); - return TextUtils.splitMessage(scanner.nextLine()); + return TextUtils.splitMessageWithComma(scanner.nextLine()); } public int inputHeight() { From ba0be8f40c108f8ad2b9a5376b1178e26c60201d Mon Sep 17 00:00:00 2001 From: Kim Uijin <127496156+sansan20535@users.noreply.github.com> Date: Thu, 21 Nov 2024 16:29:44 +0900 Subject: [PATCH 11/13] =?UTF-8?q?[REFACT]=20:=20=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/LadderApplication.java | 4 +- src/main/java/service/users/UserService.java | 30 +++++++++++--- .../java/service/users/UserServiceImpl.java | 40 ------------------- 3 files changed, 27 insertions(+), 47 deletions(-) delete mode 100644 src/main/java/service/users/UserServiceImpl.java diff --git a/src/main/java/LadderApplication.java b/src/main/java/LadderApplication.java index 88a5388d..b1c7e093 100644 --- a/src/main/java/LadderApplication.java +++ b/src/main/java/LadderApplication.java @@ -4,7 +4,7 @@ import repository.users.UserRepository; import service.ladder.LadderServiceImpl; import service.results.ResultsServiceImpl; -import service.users.UserServiceImpl; +import service.users.UserService; import view.InputView; import view.OutputView; @@ -12,7 +12,7 @@ public class LadderApplication { public static void main(String[] args) { LadderController ladderController = new LadderController( new LadderServiceImpl(new LadderRepository()), - new UserServiceImpl(new UserRepository()), + new UserService(new UserRepository()), new ResultsServiceImpl(new ResultsRepository()), new OutputView(), new InputView() diff --git a/src/main/java/service/users/UserService.java b/src/main/java/service/users/UserService.java index ede37b18..eaa1d65a 100644 --- a/src/main/java/service/users/UserService.java +++ b/src/main/java/service/users/UserService.java @@ -3,15 +3,35 @@ import domain.ladder.Ladder; import domain.users.User; import domain.users.Users; +import repository.users.UserRepository; import java.util.List; -public interface UserService { - void makeUsers(final List userNames); +public class UserService { - void updatePosition(final Ladder ladder, final Users users); + private final UserRepository userRepository; - Users getUsers(); + public UserService(UserRepository userRepository) { + this.userRepository = userRepository; + } - User findByName(final String name); + public void makeUsers(final List userNames) { + userRepository.setUsers(new Users(userNames.stream() + .map(userName -> new User(userName, userNames.indexOf(userName))) + .toList())); + } + + public void updatePosition(final Ladder ladder, final Users users) { + for (User user : users.users()) { + userRepository.updatePosition(user, ladder.ladderLines(), ladder.ladderInfo()); + } + } + + public Users getUsers() { + return userRepository.getUsers(); + } + + public User findByName(final String name) { + return userRepository.findByName(name); + } } diff --git a/src/main/java/service/users/UserServiceImpl.java b/src/main/java/service/users/UserServiceImpl.java deleted file mode 100644 index 3b3dfae5..00000000 --- a/src/main/java/service/users/UserServiceImpl.java +++ /dev/null @@ -1,40 +0,0 @@ -package service.users; - -import domain.ladder.Ladder; -import domain.users.User; -import domain.users.Users; -import repository.users.UserRepository; - -import java.util.List; - -public class UserServiceImpl implements UserService { - - private final UserRepository userRepository; - - public UserServiceImpl(UserRepository userRepository) { - this.userRepository = userRepository; - } - - @Override - public void makeUsers(final List userNames) { - userRepository.setUsers(new Users(userNames.stream() - .map(userName -> new User(userName, userNames.indexOf(userName))) - .toList())); - } - - @Override - public void updatePosition(final Ladder ladder, final Users users) { - for (User user : users.users()) { - userRepository.updatePosition(user, ladder.ladderLines(), ladder.ladderInfo()); - } - } - - public Users getUsers() { - return userRepository.getUsers(); - } - - @Override - public User findByName(final String name) { - return userRepository.findByName(name); - } -} From 0d8536a707dc6928e503f92fab57200d96ed58ae Mon Sep 17 00:00:00 2001 From: Kim Uijin <127496156+sansan20535@users.noreply.github.com> Date: Thu, 21 Nov 2024 16:31:38 +0900 Subject: [PATCH 12/13] =?UTF-8?q?[REFACT]=20:=20=EC=99=80=EC=9D=BC?= =?UTF-8?q?=EB=93=9C=20=EC=B9=B4=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/service/ladder/LadderServiceImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/service/ladder/LadderServiceImpl.java b/src/main/java/service/ladder/LadderServiceImpl.java index daf83599..a3977016 100644 --- a/src/main/java/service/ladder/LadderServiceImpl.java +++ b/src/main/java/service/ladder/LadderServiceImpl.java @@ -6,7 +6,9 @@ import domain.ladder.LadderLineConnection; import repository.ladder.LadderRepository; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; import java.util.stream.IntStream; public class LadderServiceImpl implements LadderService { From d1369ee2343084dde63ea0ba74e5d587e6ca66c4 Mon Sep 17 00:00:00 2001 From: Kim Uijin <127496156+sansan20535@users.noreply.github.com> Date: Thu, 21 Nov 2024 16:48:52 +0900 Subject: [PATCH 13/13] =?UTF-8?q?[REFACT]=20:=20=EB=A6=AC=EB=B7=B0=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/controller/LadderController.java | 4 +- src/main/java/domain/ladder/LadderLine.java | 3 +- .../domain/ladder/LadderLineConnection.java | 8 ++-- .../java/repository/users/UserRepository.java | 42 +------------------ .../service/ladder/LadderServiceImpl.java | 11 +---- .../java/service/results/ResultsService.java | 2 +- .../service/results/ResultsServiceImpl.java | 2 +- src/main/java/service/users/UserService.java | 41 +++++++++++++++++- src/main/java/view/OutputView.java | 13 +++++- 9 files changed, 62 insertions(+), 64 deletions(-) diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index e89f5ed0..2e2972c9 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -29,7 +29,7 @@ public LadderController(final LadderService ladderService, final UserService use public void start() { userService.makeUsers(inputView.inputUserNames()); - resultsService.makeResults(inputView.inputResults()); + resultsService.saveResults(inputView.inputResults()); ladderService.makeLadder(userService.getUsers().users().size(), inputView.inputHeight()); userService.updatePosition(ladderService.getLadder(), userService.getUsers()); @@ -44,7 +44,7 @@ private void printLadder(final Users users, final Ladder ladder, final Results r } outputView.printEmpty(); for (LadderLine ladderLine : ladder.ladderLines()) { - outputView.printLadderLine(ladderLine.line()); + outputView.printLadderLine(ladderLine.connections()); } for (String result : results.results()) { outputView.printResult(result); diff --git a/src/main/java/domain/ladder/LadderLine.java b/src/main/java/domain/ladder/LadderLine.java index 594f7101..a59f859a 100644 --- a/src/main/java/domain/ladder/LadderLine.java +++ b/src/main/java/domain/ladder/LadderLine.java @@ -3,7 +3,6 @@ import java.util.List; public record LadderLine( - List connections, - String line + List connections ) { } diff --git a/src/main/java/domain/ladder/LadderLineConnection.java b/src/main/java/domain/ladder/LadderLineConnection.java index a8bc90db..a848022d 100644 --- a/src/main/java/domain/ladder/LadderLineConnection.java +++ b/src/main/java/domain/ladder/LadderLineConnection.java @@ -20,9 +20,9 @@ public String getLadderConnectionFormat() { } public static LadderLineConnection of(final boolean isConnected) { - return Arrays.stream(values()) - .filter(ladderLineConnection -> ladderLineConnection.isConnected == isConnected) - .findAny() - .orElseThrow(); + if (isConnected) { + return CONNECT_LADDER; + } + return NOT_CONNECT_LADDER; } } diff --git a/src/main/java/repository/users/UserRepository.java b/src/main/java/repository/users/UserRepository.java index 846b2a2a..24cc56dc 100644 --- a/src/main/java/repository/users/UserRepository.java +++ b/src/main/java/repository/users/UserRepository.java @@ -1,12 +1,8 @@ package repository.users; -import domain.ladder.LadderInfo; -import domain.ladder.LadderLine; import domain.users.User; import domain.users.Users; -import java.util.List; - public class UserRepository { private Users users; @@ -23,43 +19,7 @@ public User findByName(final String userName) { return users.users().stream() .filter(user -> user.getName().equals(userName)) .findFirst() - .orElse(null); // 또는 예외를 던질 수 있습니다. - } - - public void updatePosition(final User user, final List ladderLines, final LadderInfo ladderInfo) { - for (LadderLine ladderLine : ladderLines) { - final boolean isConnectedRight = checkRightConnection(ladderLine.connections(), user.getPosition(), ladderInfo.width()); - final boolean isConnectedLeft = checkLeftConnection(ladderLine.connections(), user.getPosition()); - decideMoving(isConnectedLeft, isConnectedRight, user); - } - } - - private boolean checkRightConnection(final List connections, final int position, final int width) { - if (position == width - 1) { - return false; - } - return connections.get(position); + .orElseThrow(() -> new RuntimeException("해당 유저를 찾을 수 없습니다!")); // 또는 예외를 던질 수 있습니다. } - private boolean checkLeftConnection(final List connections, final int position) { - if (position - 1 < 0) { - return false; - } - return connections.get(position - 1); - } - - private void decideMoving(final boolean isConnectedLeft, final boolean isConnectedRight, final User user) { - if (!isConnectedLeft && !isConnectedRight) { - return; - } - decideMovingLeftOrRight(isConnectedLeft, user); - } - - private void decideMovingLeftOrRight(final boolean isConnectedLeft, final User user) { - if (isConnectedLeft) { - user.setPosition(user.getPosition() - 1); - return; - } - user.setPosition(user.getPosition() + 1); - } } diff --git a/src/main/java/service/ladder/LadderServiceImpl.java b/src/main/java/service/ladder/LadderServiceImpl.java index a3977016..e2afd442 100644 --- a/src/main/java/service/ladder/LadderServiceImpl.java +++ b/src/main/java/service/ladder/LadderServiceImpl.java @@ -3,7 +3,6 @@ import domain.ladder.Ladder; import domain.ladder.LadderInfo; import domain.ladder.LadderLine; -import domain.ladder.LadderLineConnection; import repository.ladder.LadderRepository; import java.util.ArrayList; @@ -14,7 +13,6 @@ public class LadderServiceImpl implements LadderService { private final LadderRepository ladderRepository; - private static final String EDGE_OF_LADDER = "|"; public LadderServiceImpl(final LadderRepository ladderRepository) { this.ladderRepository = ladderRepository; @@ -33,7 +31,7 @@ private List makeLadderLines(final int height, final int width) { private LadderLine makeLadderLine(final int width) { List connections = makeConnections(width); - return new LadderLine(connections, makeLine(connections)); + return new LadderLine(connections); } private List makeConnections(final int width) { @@ -53,13 +51,6 @@ private void addConnections(final List connections, final boolean isCon } } - private String makeLine(final List connections) { - final List line = connections.stream() - .map(connection -> LadderLineConnection.of(connection).getLadderConnectionFormat()) - .toList(); - return String.join("", line) + EDGE_OF_LADDER; - } - @Override public Ladder getLadder() { return ladderRepository.getLadder(); diff --git a/src/main/java/service/results/ResultsService.java b/src/main/java/service/results/ResultsService.java index 4dd91f86..078ffff7 100644 --- a/src/main/java/service/results/ResultsService.java +++ b/src/main/java/service/results/ResultsService.java @@ -5,7 +5,7 @@ import java.util.List; public interface ResultsService { - void makeResults(final List results); + void saveResults(final List results); Results getResults(); } diff --git a/src/main/java/service/results/ResultsServiceImpl.java b/src/main/java/service/results/ResultsServiceImpl.java index 183205b9..26d5743e 100644 --- a/src/main/java/service/results/ResultsServiceImpl.java +++ b/src/main/java/service/results/ResultsServiceImpl.java @@ -14,7 +14,7 @@ public ResultsServiceImpl(final ResultsRepository resultsRepository) { } @Override - public void makeResults(final List results) { + public void saveResults(final List results) { resultsRepository.setResults(new Results(results)); } diff --git a/src/main/java/service/users/UserService.java b/src/main/java/service/users/UserService.java index eaa1d65a..beeac630 100644 --- a/src/main/java/service/users/UserService.java +++ b/src/main/java/service/users/UserService.java @@ -1,6 +1,8 @@ package service.users; import domain.ladder.Ladder; +import domain.ladder.LadderInfo; +import domain.ladder.LadderLine; import domain.users.User; import domain.users.Users; import repository.users.UserRepository; @@ -23,7 +25,7 @@ public void makeUsers(final List userNames) { public void updatePosition(final Ladder ladder, final Users users) { for (User user : users.users()) { - userRepository.updatePosition(user, ladder.ladderLines(), ladder.ladderInfo()); + updatePosition(user, ladder.ladderLines(), ladder.ladderInfo()); } } @@ -34,4 +36,41 @@ public Users getUsers() { public User findByName(final String name) { return userRepository.findByName(name); } + + private void updatePosition(final User user, final List ladderLines, final LadderInfo ladderInfo) { + for (LadderLine ladderLine : ladderLines) { + final boolean isConnectedRight = checkRightConnection(ladderLine.connections(), user.getPosition(), ladderInfo.width()); + final boolean isConnectedLeft = checkLeftConnection(ladderLine.connections(), user.getPosition()); + decideMoving(isConnectedLeft, isConnectedRight, user); + } + } + + private boolean checkRightConnection(final List connections, final int position, final int width) { + if (position == width - 1) { + return false; + } + return connections.get(position); + } + + private boolean checkLeftConnection(final List connections, final int position) { + if (position - 1 < 0) { + return false; + } + return connections.get(position - 1); + } + + private void decideMoving(final boolean isConnectedLeft, final boolean isConnectedRight, final User user) { + if (!isConnectedLeft && !isConnectedRight) { + return; + } + decideMovingLeftOrRight(isConnectedLeft, user); + } + + private void decideMovingLeftOrRight(final boolean isConnectedLeft, final User user) { + if (isConnectedLeft) { + user.setPosition(user.getPosition() - 1); + return; + } + user.setPosition(user.getPosition() + 1); + } } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 190042b8..b641ce9b 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -1,7 +1,13 @@ package view; +import domain.ladder.LadderLineConnection; + +import java.util.List; + public class OutputView { + private static final String EDGE_OF_LADDER = "|"; + public void printEmpty() { System.out.println(" "); } @@ -14,8 +20,11 @@ public void printResult(final String result) { System.out.print(result + " "); } - public void printLadderLine(final String ladderLine) { - System.out.println(ladderLine); + public void printLadderLine(final List connections) { + final List line = connections.stream() + .map(connection -> LadderLineConnection.of(connection).getLadderConnectionFormat()) + .toList(); + System.out.println(String.join("", line) + EDGE_OF_LADDER); } public void printUserResult(final String result) {