From dfface6e5806ec352f23990aafe11b3658af16b8 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Wed, 20 Mar 2024 11:39:28 +0900 Subject: [PATCH 1/7] =?UTF-8?q?Refactor:=20=ED=95=98=EB=93=9C=EC=BD=94?= =?UTF-8?q?=EB=94=A9=20=EC=83=81=EC=88=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/Ladder.java | 14 +++++++++++--- src/main/java/ladder/Row.java | 17 ++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/main/java/ladder/Ladder.java b/src/main/java/ladder/Ladder.java index 503ae00..f083c07 100644 --- a/src/main/java/ladder/Ladder.java +++ b/src/main/java/ladder/Ladder.java @@ -2,16 +2,24 @@ public class Ladder { - private Row[] rows; + private Row[] rows; //선언 +// int[] arr = new int[5]; // 5칸인 배열을 생성 (다 0으로 초기화됨) +// Row[] rows = new Row[n] // 크기가 n인 Row배열을 만듦 public Ladder(int numberOfRows, int numberOfPerson) { - rows = new Row[numberOfPerson]; + rows = new Row[numberOfPerson]; // 초기화 + // Row[] rows = new Row[n] : 크기가 n인 Row배열을 만듦 for(int i = 0; i < numberOfRows; i++) { - rows[i] = new Row(numberOfPerson); + rows[i] = new Row(numberOfPerson); // new Row() : Row 객체를 만들어서 rows의 각 칸에 하나씩 넣어줌 + + +// Row row1 = new Row(numberOfPerson); // 생성자를 통한 객체 생성 +// rows[i] = row1; // 배열 각 칸에 만든 객체를 넣어줌 } } + public void drawLine(int row, int col) { rows[row].drawLine(col); } diff --git a/src/main/java/ladder/Row.java b/src/main/java/ladder/Row.java index 722a9a6..ce35de1 100644 --- a/src/main/java/ladder/Row.java +++ b/src/main/java/ladder/Row.java @@ -3,17 +3,24 @@ public class Row { private int[] row; + // 방향을 나타내는 상수 정의 + public static final int LEFT_LINE = -1; + public static final int RIGHT_LINE = 1; + public static final int MINIMUM_NUMBER_OF_PERSON = 1; + public static final int MAXIMUM_INVALID_POSITION_NUMBER = 0; public Row(int numberOfPerson) { validateNumberOfPerson(numberOfPerson); row = new int[numberOfPerson]; } + // 사다리 행에 가로선은 그리는 역할 public void drawLine(int lineStartPosition) { validateDrawLinePosition(lineStartPosition); - row[lineStartPosition] = 1; - row[lineStartPosition + 1] = -1; + row[lineStartPosition] = RIGHT_LINE; + row[lineStartPosition + 1] = LEFT_LINE; } + //현재위치 position에서 다음 위치를 계산해서 변환 public int nextPosition(int position) { validatePosition(position); @@ -37,19 +44,19 @@ private boolean isRight(int position) { } private void validateNumberOfPerson(int numberOfPerson) { - if(numberOfPerson < 1) { + if(numberOfPerson < MINIMUM_NUMBER_OF_PERSON) { throw new IllegalArgumentException("게임의 참여자 수는 1명 이상이어야 합니다."); } } private void validateDrawLinePosition(int lineStartPosition) { - if(lineStartPosition < 0 || lineStartPosition >= row.length - 1 || row[lineStartPosition] == -1 || row[lineStartPosition + 1] == 1) { + if(lineStartPosition < MAXIMUM_INVALID_POSITION_NUMBER || lineStartPosition >= row.length - 1 || row[lineStartPosition] == LEFT_LINE || row[lineStartPosition + 1] == RIGHT_LINE) { throw new IllegalArgumentException("라인 생성이 불가능한 위치 입니다."); } } private void validatePosition(int position) { - if(position >= row.length || position < 0 ) { + if(position >= row.length || position < MAXIMUM_INVALID_POSITION_NUMBER ) { throw new IllegalArgumentException("유효하지 않은 위치 입니다."); } } From 3e45e8d20b521df108cd6f28b3663ba9b70aa711 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Wed, 20 Mar 2024 14:20:37 +0900 Subject: [PATCH 2/7] =?UTF-8?q?Refactor:=20=EC=9B=90=EC=8B=9C=EA=B0=92=20?= =?UTF-8?q?=ED=8F=AC=EC=9E=A5=20NaturalNumber?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/Ladder.java | 10 ++++++---- src/main/java/ladder/NaturalNumber.java | 20 ++++++++++++++++++++ src/main/java/ladder/Node.java | 0 src/test/java/ladder/LadderTest.java | 14 +++++++------- 4 files changed, 33 insertions(+), 11 deletions(-) create mode 100644 src/main/java/ladder/NaturalNumber.java create mode 100644 src/main/java/ladder/Node.java diff --git a/src/main/java/ladder/Ladder.java b/src/main/java/ladder/Ladder.java index f083c07..22bbd55 100644 --- a/src/main/java/ladder/Ladder.java +++ b/src/main/java/ladder/Ladder.java @@ -1,17 +1,19 @@ package ladder; +import ladder.NaturalNumber; + public class Ladder { private Row[] rows; //선언 // int[] arr = new int[5]; // 5칸인 배열을 생성 (다 0으로 초기화됨) // Row[] rows = new Row[n] // 크기가 n인 Row배열을 만듦 - public Ladder(int numberOfRows, int numberOfPerson) { - rows = new Row[numberOfPerson]; // 초기화 + public Ladder(NaturalNumber numberOfRows, NaturalNumber numberOfPerson) { + rows = new Row[numberOfPerson.getValue()]; // 초기화 // Row[] rows = new Row[n] : 크기가 n인 Row배열을 만듦 - for(int i = 0; i < numberOfRows; i++) { - rows[i] = new Row(numberOfPerson); // new Row() : Row 객체를 만들어서 rows의 각 칸에 하나씩 넣어줌 + for(int i = 0; i < numberOfRows.getValue(); i++) { + rows[i] = new Row(numberOfPerson.getValue()); // new Row() : Row 객체를 만들어서 rows의 각 칸에 하나씩 넣어줌 // Row row1 = new Row(numberOfPerson); // 생성자를 통한 객체 생성 diff --git a/src/main/java/ladder/NaturalNumber.java b/src/main/java/ladder/NaturalNumber.java new file mode 100644 index 0000000..2894403 --- /dev/null +++ b/src/main/java/ladder/NaturalNumber.java @@ -0,0 +1,20 @@ +package ladder; + +public class NaturalNumber { + + private final int value; + + public NaturalNumber(int value) { + if(value <= 0){ + throw new IllegalArgumentException("자연수는 1 이상이어야 합니다."); + } + this.value = value; + } + + public int getValue() { + return value; + } +} + + + diff --git a/src/main/java/ladder/Node.java b/src/main/java/ladder/Node.java new file mode 100644 index 0000000..e69de29 diff --git a/src/test/java/ladder/LadderTest.java b/src/test/java/ladder/LadderTest.java index db63615..c87dc10 100644 --- a/src/test/java/ladder/LadderTest.java +++ b/src/test/java/ladder/LadderTest.java @@ -3,14 +3,14 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; - +import ladder.NaturalNumber; class LadderTest { @Test void 사다리_생성_확인() { //given - int numberOfRows = 3; - int numberOfPerson = 5; + NaturalNumber numberOfRows = new NaturalNumber(3); + NaturalNumber numberOfPerson = new NaturalNumber(5) ; //when Ladder ladder = new Ladder(numberOfRows, numberOfPerson); @@ -22,8 +22,8 @@ class LadderTest { @Test void 사다리_시작위치_예외_처리() { //given - int numberOfPerson = 3; - int numberOfRows = 1; + NaturalNumber numberOfPerson = new NaturalNumber(3); + NaturalNumber numberOfRows = new NaturalNumber(1); Ladder ladder = new Ladder(numberOfRows, numberOfPerson); //when @@ -36,8 +36,8 @@ class LadderTest { @Test void 사다리_결과_확인() { //given - int numberOfPerson = 4; - int numberOfRows = 4; + NaturalNumber numberOfPerson = new NaturalNumber(4); + NaturalNumber numberOfRows =new NaturalNumber(4) ; Ladder ladder = new Ladder(numberOfRows, numberOfPerson); ladder.drawLine(1,0); ladder.drawLine(1,2); From 934a7922ced3794d525963b826f430a2f9aa6725 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Wed, 20 Mar 2024 17:02:41 +0900 Subject: [PATCH 3/7] =?UTF-8?q?Refactor:=20Enum=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/Direction.java | 16 ++++++++++++++++ src/main/java/ladder/ExceptionMessage.java | 19 +++++++++++++++++++ src/main/java/ladder/Row.java | 18 +++++++++--------- 3 files changed, 44 insertions(+), 9 deletions(-) create mode 100644 src/main/java/ladder/Direction.java create mode 100644 src/main/java/ladder/ExceptionMessage.java diff --git a/src/main/java/ladder/Direction.java b/src/main/java/ladder/Direction.java new file mode 100644 index 0000000..10cb4a5 --- /dev/null +++ b/src/main/java/ladder/Direction.java @@ -0,0 +1,16 @@ +package ladder; + +public enum Direction { + LEFT(-1), RIGHT(1), NONE(0); + + private final int value; + + Direction(int value){ + this.value = value; + } + + public int getValue(){ + return value; + } + +} diff --git a/src/main/java/ladder/ExceptionMessage.java b/src/main/java/ladder/ExceptionMessage.java new file mode 100644 index 0000000..4c72a1d --- /dev/null +++ b/src/main/java/ladder/ExceptionMessage.java @@ -0,0 +1,19 @@ +package ladder; + +public enum ExceptionMessage { + + INVALID_NUMBER_OF_PERSON("게임의 참여자 수는 1명 이상이어야 합니다."), + INVALID_LINE_POSITION("라인 생성이 불가능한 위치입니다."), + INVALID_POSITION("유효하지 않은 위치입니다."); + + private final String message; + + ExceptionMessage(String message){ + this.message = message; + } + + public String getMessage(){ + return message; + } + +} diff --git a/src/main/java/ladder/Row.java b/src/main/java/ladder/Row.java index ce35de1..fefeb03 100644 --- a/src/main/java/ladder/Row.java +++ b/src/main/java/ladder/Row.java @@ -1,13 +1,13 @@ package ladder; +import static ladder.ExceptionMessage.*; + public class Row { private int[] row; - // 방향을 나타내는 상수 정의 - public static final int LEFT_LINE = -1; - public static final int RIGHT_LINE = 1; public static final int MINIMUM_NUMBER_OF_PERSON = 1; public static final int MAXIMUM_INVALID_POSITION_NUMBER = 0; + public Row(int numberOfPerson) { validateNumberOfPerson(numberOfPerson); row = new int[numberOfPerson]; @@ -16,8 +16,8 @@ public Row(int numberOfPerson) { // 사다리 행에 가로선은 그리는 역할 public void drawLine(int lineStartPosition) { validateDrawLinePosition(lineStartPosition); - row[lineStartPosition] = RIGHT_LINE; - row[lineStartPosition + 1] = LEFT_LINE; + row[lineStartPosition] = Direction.RIGHT.getValue(); + row[lineStartPosition + 1] = Direction.LEFT.getValue(); } //현재위치 position에서 다음 위치를 계산해서 변환 @@ -45,19 +45,19 @@ private boolean isRight(int position) { private void validateNumberOfPerson(int numberOfPerson) { if(numberOfPerson < MINIMUM_NUMBER_OF_PERSON) { - throw new IllegalArgumentException("게임의 참여자 수는 1명 이상이어야 합니다."); + throw new IllegalArgumentException(INVALID_NUMBER_OF_PERSON.getMessage()); } } private void validateDrawLinePosition(int lineStartPosition) { - if(lineStartPosition < MAXIMUM_INVALID_POSITION_NUMBER || lineStartPosition >= row.length - 1 || row[lineStartPosition] == LEFT_LINE || row[lineStartPosition + 1] == RIGHT_LINE) { - throw new IllegalArgumentException("라인 생성이 불가능한 위치 입니다."); + if(lineStartPosition < MAXIMUM_INVALID_POSITION_NUMBER || lineStartPosition >= row.length - 1 || row[lineStartPosition] == Direction.LEFT.getValue() || row[lineStartPosition + 1] == Direction.RIGHT.getValue()) { + throw new IllegalArgumentException(INVALID_LINE_POSITION.getMessage()); } } private void validatePosition(int position) { if(position >= row.length || position < MAXIMUM_INVALID_POSITION_NUMBER ) { - throw new IllegalArgumentException("유효하지 않은 위치 입니다."); + throw new IllegalArgumentException(INVALID_POSITION.getMessage()); } } From 2a6f89205abde38523199e746a09106b5d53efa3 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Thu, 21 Mar 2024 11:46:55 +0900 Subject: [PATCH 4/7] =?UTF-8?q?Refactor:=20NaturalNumber=20=EC=A0=95?= =?UTF-8?q?=EC=A0=81=20=ED=8C=A9=ED=84=B0=EB=A6=AC=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/NaturalNumber.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/ladder/NaturalNumber.java b/src/main/java/ladder/NaturalNumber.java index 2894403..cab33a8 100644 --- a/src/main/java/ladder/NaturalNumber.java +++ b/src/main/java/ladder/NaturalNumber.java @@ -5,15 +5,27 @@ public class NaturalNumber { private final int value; public NaturalNumber(int value) { - if(value <= 0){ - throw new IllegalArgumentException("자연수는 1 이상이어야 합니다."); - } + validate(value); this.value = value; } + public static NaturalNumber of(int value){ + return new NaturalNumber(value); + } + public int getValue() { return value; } + + private void validate(int value){ + if(!isNaturalNumber(value)){ + throw new IllegalArgumentException(ExceptionMessage.INVALID_NATURAL_NUMBER.getMessage()); + } + } + + private static boolean isNaturalNumber(int value){ + return value >=1; + } } From 5ec9f42610cc80dbe6eb3488fcf082ea09cb774f Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Thu, 21 Mar 2024 12:17:24 +0900 Subject: [PATCH 5/7] =?UTF-8?q?Refactor:=20Position=20=EC=9C=A0=ED=9A=A8?= =?UTF-8?q?=EC=84=B1=20=EA=B2=80=EC=A6=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ladder/Position.java | 31 ++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/java/ladder/Position.java diff --git a/src/main/java/ladder/Position.java b/src/main/java/ladder/Position.java new file mode 100644 index 0000000..8dd1d97 --- /dev/null +++ b/src/main/java/ladder/Position.java @@ -0,0 +1,31 @@ +package ladder; + +public class Position { + private final int position; + public static Position of(int position) { + validatePosition(position); + return new Position(position); + } + private Position(int position) { + this.position = position; + } + + public Position prev() { + return Position.of(position - 1); + } + + public Position next() { + return Position.of(position + 1); + } + + // 유효성 검증 + private static void validatePosition(int position) { + if (!isPosition(position)) { + throw new IllegalArgumentException(ExceptionMessage.INVALID_POSITION.getMessage()); + } + } + + private static boolean isPosition(int position){ + return position >= 0; + } +} From b3c4036eb1e302be72b857d5780239ef54a2fedf Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Thu, 21 Mar 2024 23:53:52 +0900 Subject: [PATCH 6/7] Refactor: Node --- src/main/java/ladder/Direction.java | 6 +-- src/main/java/ladder/ExceptionMessage.java | 7 +-- src/main/java/ladder/Ladder.java | 24 +++------ src/main/java/ladder/NaturalNumber.java | 3 +- src/main/java/ladder/Node.java | 33 ++++++++++++ src/main/java/ladder/Position.java | 16 ++++-- src/main/java/ladder/Row.java | 50 +++++++---------- src/test/java/ladder/LadderTest.java | 26 ++++----- src/test/java/ladder/RowTest.java | 62 +++++++++++----------- 9 files changed, 123 insertions(+), 104 deletions(-) diff --git a/src/main/java/ladder/Direction.java b/src/main/java/ladder/Direction.java index 10cb4a5..900d997 100644 --- a/src/main/java/ladder/Direction.java +++ b/src/main/java/ladder/Direction.java @@ -3,13 +3,13 @@ public enum Direction { LEFT(-1), RIGHT(1), NONE(0); - private final int value; + private final int value; - Direction(int value){ + Direction(int value) { this.value = value; } - public int getValue(){ + public int getValue() { return value; } diff --git a/src/main/java/ladder/ExceptionMessage.java b/src/main/java/ladder/ExceptionMessage.java index 4c72a1d..2ac4101 100644 --- a/src/main/java/ladder/ExceptionMessage.java +++ b/src/main/java/ladder/ExceptionMessage.java @@ -4,15 +4,16 @@ public enum ExceptionMessage { INVALID_NUMBER_OF_PERSON("게임의 참여자 수는 1명 이상이어야 합니다."), INVALID_LINE_POSITION("라인 생성이 불가능한 위치입니다."), - INVALID_POSITION("유효하지 않은 위치입니다."); + INVALID_POSITION("유효하지 않은 위치입니다."), + INVALID_NATURAL_NUMBER("유효하지 않은 자연수입니다."); private final String message; - ExceptionMessage(String message){ + ExceptionMessage(String message) { this.message = message; } - public String getMessage(){ + public String getMessage() { return message; } diff --git a/src/main/java/ladder/Ladder.java b/src/main/java/ladder/Ladder.java index 22bbd55..dbd7597 100644 --- a/src/main/java/ladder/Ladder.java +++ b/src/main/java/ladder/Ladder.java @@ -1,37 +1,27 @@ package ladder; -import ladder.NaturalNumber; - public class Ladder { - private Row[] rows; //선언 -// int[] arr = new int[5]; // 5칸인 배열을 생성 (다 0으로 초기화됨) -// Row[] rows = new Row[n] // 크기가 n인 Row배열을 만듦 + private Row[] rows; public Ladder(NaturalNumber numberOfRows, NaturalNumber numberOfPerson) { - rows = new Row[numberOfPerson.getValue()]; // 초기화 - // Row[] rows = new Row[n] : 크기가 n인 Row배열을 만듦 - - for(int i = 0; i < numberOfRows.getValue(); i++) { - rows[i] = new Row(numberOfPerson.getValue()); // new Row() : Row 객체를 만들어서 rows의 각 칸에 하나씩 넣어줌 + rows = new Row[numberOfPerson.getValue()]; - -// Row row1 = new Row(numberOfPerson); // 생성자를 통한 객체 생성 -// rows[i] = row1; // 배열 각 칸에 만든 객체를 넣어줌 + for (int i = 0; i < numberOfRows.getValue(); i++) { + rows[i] = new Row(numberOfPerson); } } public void drawLine(int row, int col) { - rows[row].drawLine(col); + rows[row].drawLine(Position.of(col)); } - public int run(int position) { + public Position run(Position position) { - for(int i = 0; i < rows.length; i++) { + for (int i = 0; i < rows.length; i++) { position = rows[i].nextPosition(position); } - return position; } } diff --git a/src/main/java/ladder/NaturalNumber.java b/src/main/java/ladder/NaturalNumber.java index cab33a8..b424f7e 100644 --- a/src/main/java/ladder/NaturalNumber.java +++ b/src/main/java/ladder/NaturalNumber.java @@ -4,11 +4,12 @@ public class NaturalNumber { private final int value; - public NaturalNumber(int value) { + private NaturalNumber(int value) { validate(value); this.value = value; } + public static NaturalNumber of(int value){ return new NaturalNumber(value); } diff --git a/src/main/java/ladder/Node.java b/src/main/java/ladder/Node.java index e69de29..99267a4 100644 --- a/src/main/java/ladder/Node.java +++ b/src/main/java/ladder/Node.java @@ -0,0 +1,33 @@ +package ladder; + +public class Node { + + private Direction direction; + + private Node(Direction direction){ + this.direction = direction; + } + + public static Node of(Direction direction){ + return new Node(direction); + } + + public Position move(Position position){ + if(isRight()){ + return position.next(); + } + else if(isLeft()){ + return position.prev(); + } + return position; + } + + public boolean isRight(){ + return direction == Direction.RIGHT; + } + public boolean isLeft(){ + return direction == Direction.LEFT; + } + + +} diff --git a/src/main/java/ladder/Position.java b/src/main/java/ladder/Position.java index 8dd1d97..4873d8f 100644 --- a/src/main/java/ladder/Position.java +++ b/src/main/java/ladder/Position.java @@ -1,13 +1,19 @@ package ladder; public class Position { - private final int position; + private int position; + + private Position(int position) { + this.position = position; + } + public static Position of(int position) { validatePosition(position); return new Position(position); } - private Position(int position) { - this.position = position; + + public int getValue() { + return position; } public Position prev() { @@ -25,7 +31,7 @@ private static void validatePosition(int position) { } } - private static boolean isPosition(int position){ - return position >= 0; + private static boolean isPosition(int position) { + return position >= 0; } } diff --git a/src/main/java/ladder/Row.java b/src/main/java/ladder/Row.java index fefeb03..8a82e72 100644 --- a/src/main/java/ladder/Row.java +++ b/src/main/java/ladder/Row.java @@ -3,44 +3,29 @@ import static ladder.ExceptionMessage.*; public class Row { - private int[] row; + private Node[] nodes; public static final int MINIMUM_NUMBER_OF_PERSON = 1; public static final int MAXIMUM_INVALID_POSITION_NUMBER = 0; - public Row(int numberOfPerson) { - validateNumberOfPerson(numberOfPerson); - row = new int[numberOfPerson]; + public Row(NaturalNumber numberOfPerson) { + validateNumberOfPerson(numberOfPerson.getValue()); + nodes = new Node[numberOfPerson.getValue()]; } - // 사다리 행에 가로선은 그리는 역할 - public void drawLine(int lineStartPosition) { + // 사다리 행에 가로선을 그리는 역할 + public void drawLine(Position lineStartPosition) { validateDrawLinePosition(lineStartPosition); - row[lineStartPosition] = Direction.RIGHT.getValue(); - row[lineStartPosition + 1] = Direction.LEFT.getValue(); + nodes[lineStartPosition.getValue()] = Node.of(Direction.RIGHT); + nodes[lineStartPosition.getValue() + 1] = Node.of(Direction.LEFT); } //현재위치 position에서 다음 위치를 계산해서 변환 - public int nextPosition(int position) { + public Position nextPosition(Position currentPosition) { - validatePosition(position); - - if (isLeft(position)) { - return position - 1; - } - if (isRight(position)) { - return position + 1; - } - - return position; - } - - private boolean isLeft(int position) { - return row[position] == -1; - } - - private boolean isRight(int position) { - return row[position] == 1; + validatePosition(currentPosition); + Position nextPosition = nodes[currentPosition.getValue()].move(currentPosition); + return nextPosition; } private void validateNumberOfPerson(int numberOfPerson) { @@ -49,14 +34,17 @@ private void validateNumberOfPerson(int numberOfPerson) { } } - private void validateDrawLinePosition(int lineStartPosition) { - if(lineStartPosition < MAXIMUM_INVALID_POSITION_NUMBER || lineStartPosition >= row.length - 1 || row[lineStartPosition] == Direction.LEFT.getValue() || row[lineStartPosition + 1] == Direction.RIGHT.getValue()) { + private void validateDrawLinePosition(Position lineStartPosition) { + if(lineStartPosition.getValue() < MAXIMUM_INVALID_POSITION_NUMBER || + lineStartPosition.getValue() >= nodes.length - 1 || + nodes[lineStartPosition.getValue()].isLeft() || + nodes[lineStartPosition.getValue() + 1].isRight() ) { throw new IllegalArgumentException(INVALID_LINE_POSITION.getMessage()); } } - private void validatePosition(int position) { - if(position >= row.length || position < MAXIMUM_INVALID_POSITION_NUMBER ) { + private void validatePosition(Position position) { + if(position.getValue() >= nodes.length || position.getValue() < MAXIMUM_INVALID_POSITION_NUMBER ) { throw new IllegalArgumentException(INVALID_POSITION.getMessage()); } } diff --git a/src/test/java/ladder/LadderTest.java b/src/test/java/ladder/LadderTest.java index c87dc10..51f3d9d 100644 --- a/src/test/java/ladder/LadderTest.java +++ b/src/test/java/ladder/LadderTest.java @@ -9,8 +9,8 @@ class LadderTest { @Test void 사다리_생성_확인() { //given - NaturalNumber numberOfRows = new NaturalNumber(3); - NaturalNumber numberOfPerson = new NaturalNumber(5) ; + NaturalNumber numberOfRows = NaturalNumber.of(3); + NaturalNumber numberOfPerson = NaturalNumber.of(5) ; //when Ladder ladder = new Ladder(numberOfRows, numberOfPerson); @@ -22,22 +22,22 @@ class LadderTest { @Test void 사다리_시작위치_예외_처리() { //given - NaturalNumber numberOfPerson = new NaturalNumber(3); - NaturalNumber numberOfRows = new NaturalNumber(1); + NaturalNumber numberOfPerson = NaturalNumber.of(3); + NaturalNumber numberOfRows = NaturalNumber.of(1); Ladder ladder = new Ladder(numberOfRows, numberOfPerson); //when - int position = 3; + Position position = Position.of(3); //then - assertThrows(IllegalArgumentException.class, () -> ladder.run(3)); + assertThrows(IllegalArgumentException.class, () -> ladder.run(Position.of(3))); } @Test void 사다리_결과_확인() { //given - NaturalNumber numberOfPerson = new NaturalNumber(4); - NaturalNumber numberOfRows =new NaturalNumber(4) ; + NaturalNumber numberOfPerson = NaturalNumber.of(4); + NaturalNumber numberOfRows =NaturalNumber.of(4) ; Ladder ladder = new Ladder(numberOfRows, numberOfPerson); ladder.drawLine(1,0); ladder.drawLine(1,2); @@ -45,25 +45,25 @@ class LadderTest { //when - int position = 0; - int resultPosition = ladder.run(position); + Position position = Position.of(0); + Position resultPosition = ladder.run(position); //then assertEquals(2, resultPosition); //when - position = 1; + position = Position.of(1); resultPosition = ladder.run(position); //then assertEquals(0, resultPosition); //when - position = 2; + position = Position.of(2); resultPosition = ladder.run(position); //then assertEquals(3, resultPosition); //when - position = 3; + position = Position.of(3); resultPosition = ladder.run(position); //then assertEquals(1, resultPosition); diff --git a/src/test/java/ladder/RowTest.java b/src/test/java/ladder/RowTest.java index c5eeed9..64ba48e 100644 --- a/src/test/java/ladder/RowTest.java +++ b/src/test/java/ladder/RowTest.java @@ -9,32 +9,32 @@ class RowTest { @Test void 참여자_한_명_사다리_이동() { //given - int numberOfPerson = 1; + NaturalNumber numberOfPerson = NaturalNumber.of(1); Row row = new Row(numberOfPerson); //when - int position = 0; + Position position = Position.of(0) ; //then - assertEquals(0,row.nextPosition(position)); + assertEquals(0, row.nextPosition(position)); } @Test void 참여자_두_명_사다리_열간_이동() { //given - int numberOfPerson = 2; + NaturalNumber numberOfPerson = NaturalNumber.of(2); Row row = new Row(numberOfPerson); - row.drawLine(0); + row.drawLine(Position.of(0)); //when - int position = 0; - int resultPosition = row.nextPosition(position); + Position position = Position.of(0); + Position resultPosition = row.nextPosition(position); //then - assertEquals(1,resultPosition); + assertEquals(1, resultPosition); //when - position = 1; + position = Position.of(1); resultPosition = row.nextPosition(position); //then assertEquals(0, resultPosition); @@ -43,25 +43,25 @@ class RowTest { @Test void 참여자_세_명_사다리_열간_이동() { //given - int numberOfPerson = 3; + NaturalNumber numberOfPerson = NaturalNumber.of(3); Row row = new Row(numberOfPerson); - row.drawLine(0); + row.drawLine(Position.of(0)); //when - int position = 0; - int resultPosition = row.nextPosition(position); + Position position = Position.of(0); + Position resultPosition = row.nextPosition(position); //then - assertEquals(1,resultPosition); + assertEquals(1, resultPosition); //when - position = 1; + position = Position.of(1); resultPosition = row.nextPosition(position); //then assertEquals(0, resultPosition); //when - position = 2; + position = Position.of(2); resultPosition = row.nextPosition(position); //then assertEquals(2, resultPosition); @@ -69,17 +69,17 @@ class RowTest { @Test void 사다리_사람수_예외_처리() { - assertThrows(IllegalArgumentException.class, () -> new Row(0)); + assertThrows(IllegalArgumentException.class, () -> new Row(NaturalNumber.of(0))); } @Test void 사다리_위치_최대값_초과_예외_처리() { //given - int numberOfPerson = 3; + NaturalNumber numberOfPerson = NaturalNumber.of(3); Row row = new Row(numberOfPerson); //when - int position = 3; + Position position = Position.of(3); //then assertThrows(IllegalArgumentException.class, () -> row.nextPosition(position)); @@ -88,11 +88,11 @@ class RowTest { @Test void 사다리_위치_최소값_미만_예외_처리() { //given - int numberOfPerson = 3; + NaturalNumber numberOfPerson = NaturalNumber.of(3); Row row = new Row(numberOfPerson); //when - int position = -1; + Position position = Position.of(-1); //then assertThrows(IllegalArgumentException.class, () -> row.nextPosition(position)); @@ -101,11 +101,11 @@ class RowTest { @Test void 사다리_라인_그리기_위치_초과_예외() { //given - int numberOfPerson = 3; + NaturalNumber numberOfPerson = NaturalNumber.of(3); Row row = new Row(numberOfPerson); //when - int lineStartPosition = 2; + Position lineStartPosition = Position.of(2); //then assertThrows(IllegalArgumentException.class, () -> row.drawLine(lineStartPosition)); @@ -114,11 +114,11 @@ class RowTest { @Test void 사다리_라인_그리기_위치_미만_예외() { //given - int numberOfPerson = 3; + NaturalNumber numberOfPerson = NaturalNumber.of(3); Row row = new Row(numberOfPerson); //when - int lineStartPosition = -1; + Position lineStartPosition = Position.of(-1); //then assertThrows(IllegalArgumentException.class, () -> row.drawLine(lineStartPosition)); @@ -127,12 +127,12 @@ class RowTest { @Test void 라인_그리기_좌측_라인_중복_예외() { //given - int numberOfPerson = 3; + NaturalNumber numberOfPerson = NaturalNumber.of(3); Row row = new Row(numberOfPerson); - row.drawLine(0); + row.drawLine(Position.of(0)); //when - int lineStartPosition = 1; + Position lineStartPosition = Position.of(1); //then assertThrows(IllegalArgumentException.class, () -> row.drawLine(lineStartPosition)); @@ -142,12 +142,12 @@ class RowTest { @Test void 라인_그리기_우측_라인_중복_예외() { //given - int numberOfPerson = 3; + NaturalNumber numberOfPerson = NaturalNumber.of(3); Row row = new Row(numberOfPerson); - row.drawLine(1); + row.drawLine(Position.of(1)); //when - int lineStartPosition = 0; + Position lineStartPosition = Position.of(0); //then assertThrows(IllegalArgumentException.class, () -> row.drawLine(lineStartPosition)); From 78a4cbfe356c093883b40450407ea995ea61b848 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Fri, 22 Mar 2024 09:01:53 +0900 Subject: [PATCH 7/7] =?UTF-8?q?Refactor:=20Ladder=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ladder/{Ladder.java => LadderCreator.java} | 14 ++++---------- src/main/java/ladder/LadderGame.java | 14 ++++++++++++++ src/main/java/ladder/LadderRunner.java | 17 +++++++++++++++++ src/test/java/ladder/LadderTest.java | 10 ++++++---- 4 files changed, 41 insertions(+), 14 deletions(-) rename src/main/java/ladder/{Ladder.java => LadderCreator.java} (53%) create mode 100644 src/main/java/ladder/LadderGame.java create mode 100644 src/main/java/ladder/LadderRunner.java diff --git a/src/main/java/ladder/Ladder.java b/src/main/java/ladder/LadderCreator.java similarity index 53% rename from src/main/java/ladder/Ladder.java rename to src/main/java/ladder/LadderCreator.java index dbd7597..5cb2fab 100644 --- a/src/main/java/ladder/Ladder.java +++ b/src/main/java/ladder/LadderCreator.java @@ -1,10 +1,9 @@ package ladder; -public class Ladder { - +public class LadderCreator { private Row[] rows; - public Ladder(NaturalNumber numberOfRows, NaturalNumber numberOfPerson) { + public LadderCreator(NaturalNumber numberOfRows, NaturalNumber numberOfPerson) { rows = new Row[numberOfPerson.getValue()]; for (int i = 0; i < numberOfRows.getValue(); i++) { @@ -12,16 +11,11 @@ public Ladder(NaturalNumber numberOfRows, NaturalNumber numberOfPerson) { } } - public void drawLine(int row, int col) { rows[row].drawLine(Position.of(col)); } - public Position run(Position position) { - - for (int i = 0; i < rows.length; i++) { - position = rows[i].nextPosition(position); - } - return position; + public Row[] getRows() { + return rows; } } diff --git a/src/main/java/ladder/LadderGame.java b/src/main/java/ladder/LadderGame.java new file mode 100644 index 0000000..17d65c5 --- /dev/null +++ b/src/main/java/ladder/LadderGame.java @@ -0,0 +1,14 @@ +package ladder; + +public class LadderGame { + private final LadderCreator ladderCreator; + + public LadderGame(LadderCreator ladderCreator){ + this.ladderCreator = ladderCreator; + } + + public Position run(Position position){ + LadderRunner ladderRunner =new LadderRunner(ladderCreator.getRows()); + return ladderRunner.run((position)); + } +} diff --git a/src/main/java/ladder/LadderRunner.java b/src/main/java/ladder/LadderRunner.java new file mode 100644 index 0000000..f971e76 --- /dev/null +++ b/src/main/java/ladder/LadderRunner.java @@ -0,0 +1,17 @@ +package ladder; + +public class LadderRunner { + private Row[] rows; + + public LadderRunner(Row[] rows) { + this.rows = rows; + } + + public Position run(Position position) { + + for (int i = 0; i < rows.length; i++) { + position = rows[i].nextPosition(position); + } + return position; + } +} diff --git a/src/test/java/ladder/LadderTest.java b/src/test/java/ladder/LadderTest.java index 51f3d9d..aaf2da6 100644 --- a/src/test/java/ladder/LadderTest.java +++ b/src/test/java/ladder/LadderTest.java @@ -13,7 +13,7 @@ class LadderTest { NaturalNumber numberOfPerson = NaturalNumber.of(5) ; //when - Ladder ladder = new Ladder(numberOfRows, numberOfPerson); + LadderCreator ladder = new LadderCreator(numberOfRows, numberOfPerson); //then assertNotNull(ladder); @@ -24,7 +24,7 @@ class LadderTest { //given NaturalNumber numberOfPerson = NaturalNumber.of(3); NaturalNumber numberOfRows = NaturalNumber.of(1); - Ladder ladder = new Ladder(numberOfRows, numberOfPerson); + LadderCreator ladder = new LadderCreator(numberOfRows, numberOfPerson); //when Position position = Position.of(3); @@ -38,7 +38,7 @@ class LadderTest { //given NaturalNumber numberOfPerson = NaturalNumber.of(4); NaturalNumber numberOfRows =NaturalNumber.of(4) ; - Ladder ladder = new Ladder(numberOfRows, numberOfPerson); + LadderCreator ladder = new LadderCreator(numberOfRows, numberOfPerson); ladder.drawLine(1,0); ladder.drawLine(1,2); ladder.drawLine(2,1); @@ -46,7 +46,9 @@ class LadderTest { //when Position position = Position.of(0); - Position resultPosition = ladder.run(position); + LadderRunner ladderRunner = new LadderRunner(ladder.getRows()); + Position resultPosition = ladderRunner.run(position); + //then assertEquals(2, resultPosition);