From 78048a5b17e2214b7b95679fcd605301bbdd8f7d Mon Sep 17 00:00:00 2001 From: DK Date: Mon, 9 Oct 2023 01:35:57 +0900 Subject: [PATCH 1/6] for PullRequest --- src/main/java/calculator/Dot.java | 49 ++++++++++++++++++++++++++++++ src/main/java/calculator/Line.java | 35 +++++++++++++++++++++ src/test/java/DotTest.java | 45 +++++++++++++++++++++++++++ src/test/java/LineTest.java | 40 ++++++++++++++++++++++++ 4 files changed, 169 insertions(+) create mode 100644 src/main/java/calculator/Dot.java create mode 100644 src/main/java/calculator/Line.java create mode 100644 src/test/java/DotTest.java create mode 100644 src/test/java/LineTest.java diff --git a/src/main/java/calculator/Dot.java b/src/main/java/calculator/Dot.java new file mode 100644 index 00000000..d5de48fe --- /dev/null +++ b/src/main/java/calculator/Dot.java @@ -0,0 +1,49 @@ +package calculator; + +import java.util.Objects; + +public class Dot { + private final int x; + private final int y; + private static final String INVALID_INPUT_FORMAT = "Invalid input format"; + private static final String REGEX_FOR_STRING_INPUT = "[()]"; + private static final int MAX_LOCATION_FOR_DOT = 24; + public Dot(int x, int y) { + validateLocations(x, y); + this.x = x; + this.y = y; + } + + public Dot(String input) { + String[] parts = input.replaceAll(REGEX_FOR_STRING_INPUT, "").split(","); + if (parts.length != 2) { + throw new IllegalArgumentException(INVALID_INPUT_FORMAT); + } + int x = Integer.parseInt(parts[0].trim()); + int y = Integer.parseInt(parts[1].trim()); + validateLocations(x, y); + this.x = x; + this.y = y; + } + + private void validateLocations(int x, int y) { + if (x > MAX_LOCATION_FOR_DOT || y > MAX_LOCATION_FOR_DOT) throw new IllegalArgumentException(); + } + + public double getDistanceBetween(Dot secondDot) { + return Math.sqrt(Math.pow((secondDot.x - this.x), 2) + Math.pow((secondDot.y - this.y), 2)); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Dot dot = (Dot) o; + return x == dot.x && y == dot.y; + } + + @Override + public int hashCode() { + return Objects.hash(x, y); + } +} diff --git a/src/main/java/calculator/Line.java b/src/main/java/calculator/Line.java new file mode 100644 index 00000000..b5cb2267 --- /dev/null +++ b/src/main/java/calculator/Line.java @@ -0,0 +1,35 @@ +package calculator; + +public class Line { + private final Dot firstDot; + private final Dot secondDot; + private static final String SPLIT_EXPRESSION = "-"; + public Line(String input) { + validateInput(input); + String[] split = input.split(SPLIT_EXPRESSION); + try{ + this.firstDot = new Dot(split[0]); + this.secondDot = new Dot(split[1]); + } catch (Exception e){ + throw new IllegalArgumentException(); + } + } + + private void validateInput(String input) { + if (!input.contains(SPLIT_EXPRESSION)){ + throw new IllegalArgumentException(); + } + } + + public Dot getFirstDot() { + return firstDot; + } + + public Dot getSecondDot() { + return secondDot; + } + + public double getDotsDistance(){ + return this.firstDot.getDistanceBetween(secondDot); + } +} diff --git a/src/test/java/DotTest.java b/src/test/java/DotTest.java new file mode 100644 index 00000000..c1c2f2e2 --- /dev/null +++ b/src/test/java/DotTest.java @@ -0,0 +1,45 @@ +import calculator.Dot; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.*; + +class DotTest { + //- 사용자가 점에 대한 좌표 정보를 입력하는 메뉴를 구성한다. + //- 좌표 정보는 괄호"(", ")"로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분한다. + //- X, Y좌표 모두 최대 24까지만 입력할 수 있다. + + //- 정상적인 좌표값을 입력한 경우, 해당 좌표에 특수문자를 표시한다. + //- 좌표값을 두 개 입력한 경우, 두 점을 있는 직선으로 가정한다. 좌표값과 좌표값 사이는 '-' 문자로 구분한다. + //- 직선인 경우는 두 점 사이 거리를 계산해서 출력한다. + + @Test + void dotInit_test() { + Dot dot = new Dot(1, 1); + assertThat(dot).isEqualTo(new Dot(1, 1)); + } + + @Test + void dot_validation_test() { //- 입력 범위를 초과할 경우 에러 문구를 출력하고 다시 입력을 받는다. 중요! + assertThatThrownBy(() -> new Dot(25, 25)).isInstanceOf(IllegalArgumentException.class); + } + + @Test + void string_input_test() { + String input = "(1,1)"; + Dot dot = new Dot(input); + assertThat(dot).isEqualTo(new Dot(1,1)); + } + + @Test + void validate_input_test() { + String input = "(25,25)"; + assertThatThrownBy(() -> new Dot(input)).isInstanceOf(IllegalArgumentException.class); + } + + @Test + void get_dot_distance() { + Dot dot = new Dot(10,10); + Dot secondDot = new Dot(14,15); + assertThat(dot.getDistanceBetween(secondDot)).isEqualTo(6.4, offset(0.1)); + } +} diff --git a/src/test/java/LineTest.java b/src/test/java/LineTest.java new file mode 100644 index 00000000..281ade21 --- /dev/null +++ b/src/test/java/LineTest.java @@ -0,0 +1,40 @@ +import calculator.Dot; +import calculator.Line; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.*; + +class LineTest { + //- 사용자가 점에 대한 좌표 정보를 입력하는 메뉴를 구성한다. + //- 좌표 정보는 괄호"(", ")"로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분한다. + //- X, Y좌표 모두 최대 24까지만 입력할 수 있다. + + //- 정상적인 좌표값을 입력한 경우, 해당 좌표에 특수문자를 표시한다. + //- 좌표값을 두 개 입력한 경우, 두 점을 있는 직선으로 가정한다. 좌표값과 좌표값 사이는 '-' 문자로 구분한다. + //- 직선인 경우는 두 점 사이 거리를 계산해서 출력한다. + @Test + void lineInput_test() { + String input = "(1,1)-(5,5)"; + Line line = new Line(input); + + assertThat(line.getFirstDot()).isEqualTo(new Dot(1, 1)); + assertThat(line.getSecondDot()).isEqualTo(new Dot(5, 5)); + } + + @Test + void invalid_lineInput_test() { + String input = "(1,1)1(5,5)"; + String input2 = "(1,1)"; + String input3 = "(25,25)-(25,25)"; + assertThatThrownBy(() -> new Line(input)).isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> new Line(input2)).isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> new Line(input3)).isInstanceOf(IllegalArgumentException.class); + } + + @Test + void lineDistance_test() { + String input = "(1,1)-(5,5)"; + Line line = new Line(input); + assertThat(line.getDotsDistance()).isEqualTo(5.65, offset(0.01)); + } +} From fa301aa9a5bfeaf2692b915fd16edfea624270ab Mon Sep 17 00:00:00 2001 From: DK Date: Mon, 9 Oct 2023 13:33:38 +0900 Subject: [PATCH 2/6] =?UTF-8?q?feat=20:=20=EB=91=90=EB=B2=88=EC=A7=B8=20?= =?UTF-8?q?=EA=B3=BC=EC=A0=9C=20-=20Square=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Dot.java | 7 +++ src/main/java/calculator/Dots.java | 93 ++++++++++++++++++++++++++++ src/main/java/calculator/Line.java | 34 +++------- src/main/java/calculator/Square.java | 16 +++++ src/main/java/view/InputView.java | 4 ++ src/test/java/DotTest.java | 14 +++++ src/test/java/DotsTest.java | 46 ++++++++++++++ src/test/java/LineTest.java | 31 +++++----- src/test/java/SquareTest.java | 19 ++++++ 9 files changed, 224 insertions(+), 40 deletions(-) create mode 100644 src/main/java/calculator/Dots.java create mode 100644 src/main/java/calculator/Square.java create mode 100644 src/main/java/view/InputView.java create mode 100644 src/test/java/DotsTest.java create mode 100644 src/test/java/SquareTest.java diff --git a/src/main/java/calculator/Dot.java b/src/main/java/calculator/Dot.java index d5de48fe..db7505f7 100644 --- a/src/main/java/calculator/Dot.java +++ b/src/main/java/calculator/Dot.java @@ -33,6 +33,13 @@ private void validateLocations(int x, int y) { public double getDistanceBetween(Dot secondDot) { return Math.sqrt(Math.pow((secondDot.x - this.x), 2) + Math.pow((secondDot.y - this.y), 2)); } + public boolean isXParallel(Dot dot) { + return this.y == dot.y; + } + + public boolean isYParallel(Dot dot) { + return this.x == dot.x; + } @Override public boolean equals(Object o) { diff --git a/src/main/java/calculator/Dots.java b/src/main/java/calculator/Dots.java new file mode 100644 index 00000000..c5342690 --- /dev/null +++ b/src/main/java/calculator/Dots.java @@ -0,0 +1,93 @@ +package calculator; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class Dots { + private final List dots; + + /** + * CONSTANTS + */ + private static final String SPLIT_EXPRESSION = "-"; + private static final String IS_NOT_LINE = "선이 아니다."; + private static final String IS_NOT_SQUARE = "사각형이 아니다."; + public Dots(String input) { + validateInput(input); + this.dots = Arrays.stream(input.split("-")).map(Dot::new).collect(Collectors.toList()); + } + + /** + * validations & common methods + */ + private void validateInput(String input) { + if (!input.contains(SPLIT_EXPRESSION)){ + throw new IllegalArgumentException(); + } + } + + public int size() { + return this.dots.size(); + } + + /** + * line methods + */ + public boolean isLine() { + return this.dots.size() == 2; + } + + public boolean isXParallelLine(){ + if (!isLine()) { + throw new IllegalArgumentException(IS_NOT_LINE); + } + return dots.get(0).isXParallel(dots.get(1)); + } + + public boolean isYParallelLine(){ + if (!isLine()) { + throw new IllegalArgumentException(IS_NOT_LINE); + } + return dots.get(0).isYParallel(dots.get(1)); + } + + public double getDistanceBetween(){ + if (!this.isLine()) { + throw new IllegalArgumentException(IS_NOT_LINE); + } + return this.dots.get(0).getDistanceBetween(dots.get(1)); + } + + /** + * square methods + */ + public boolean isSquare() { + if (this.dots.size() != 4) { + return false; + } + return isAllParallel(); + } + + public boolean isAllParallel() { + return IntStream.range(0, 4).allMatch(i -> { + Dot dot1 = dots.get(i); + Dot dot2 = dots.get((i + 1) % 4); // 다음 점 + return dot1.isXParallel(dot2) || dot1.isYParallel(dot2); + }); + } + + public int getSquareArea(){ + if (!isSquare()) { + throw new IllegalArgumentException(IS_NOT_SQUARE); + } + + List collect = IntStream.range(0, 4) + .mapToObj(i -> dots.get(i).getDistanceBetween(dots.get((i + 1) % 4))) + .distinct().collect(Collectors.toList()); + + if (collect.size() == 1) return (int) Math.pow(collect.get(0), 2); + return (int) (collect.get(0) * collect.get(1)); + } +} \ No newline at end of file diff --git a/src/main/java/calculator/Line.java b/src/main/java/calculator/Line.java index b5cb2267..44d8e359 100644 --- a/src/main/java/calculator/Line.java +++ b/src/main/java/calculator/Line.java @@ -1,35 +1,21 @@ package calculator; public class Line { - private final Dot firstDot; - private final Dot secondDot; - private static final String SPLIT_EXPRESSION = "-"; - public Line(String input) { - validateInput(input); - String[] split = input.split(SPLIT_EXPRESSION); - try{ - this.firstDot = new Dot(split[0]); - this.secondDot = new Dot(split[1]); - } catch (Exception e){ - throw new IllegalArgumentException(); - } - } + private final Dots dots; - private void validateInput(String input) { - if (!input.contains(SPLIT_EXPRESSION)){ - throw new IllegalArgumentException(); - } + public Line(Dots dots) { + this.dots = dots; } - public Dot getFirstDot() { - return firstDot; + public double getDotsDistance(){ + return this.dots.getDistanceBetween(); } - public Dot getSecondDot() { - return secondDot; + public boolean isXParallel() { + return this.dots.isXParallelLine(); } - public double getDotsDistance(){ - return this.firstDot.getDistanceBetween(secondDot); + public boolean isYParallel(){ + return this.dots.isYParallelLine(); } -} +} \ No newline at end of file diff --git a/src/main/java/calculator/Square.java b/src/main/java/calculator/Square.java new file mode 100644 index 00000000..6b9ba93d --- /dev/null +++ b/src/main/java/calculator/Square.java @@ -0,0 +1,16 @@ +package calculator; + +public class Square { + private final Dots dots; + + public Square(Dots dots) { + if (!dots.isSquare()){ + throw new IllegalArgumentException(); + } + this.dots = dots; + } + + public int getArea() { + return this.dots.getSquareArea(); + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 00000000..ae2791fb --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,4 @@ +package view; + +public class InputView { +} diff --git a/src/test/java/DotTest.java b/src/test/java/DotTest.java index c1c2f2e2..c88c3e9f 100644 --- a/src/test/java/DotTest.java +++ b/src/test/java/DotTest.java @@ -42,4 +42,18 @@ void get_dot_distance() { Dot secondDot = new Dot(14,15); assertThat(dot.getDistanceBetween(secondDot)).isEqualTo(6.4, offset(0.1)); } + + @Test + void is_x_parallel() { + Dot dot = new Dot(10, 10); + Dot dot2 = new Dot(15, 10); + assertThat(dot.isXParallel(dot2)).isTrue(); + } + + @Test + void is_y_parallel() { + Dot dot = new Dot(10, 10); + Dot dot2 = new Dot(10, 15); + assertThat(dot.isYParallel(dot2)).isTrue(); + } } diff --git a/src/test/java/DotsTest.java b/src/test/java/DotsTest.java new file mode 100644 index 00000000..dc67596c --- /dev/null +++ b/src/test/java/DotsTest.java @@ -0,0 +1,46 @@ +import calculator.Dots; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +class DotsTest { + @Test + void dots_init_test() { + String input = "(10,10)-(22,10)-(22,18)-(10,18)"; + Dots dots = new Dots(input); + assertThat(dots.size()).isEqualTo(4); + } + + @Test + void is_line() { + String input = "(10,10)-(22,10)"; + Dots dots = new Dots(input); + assertThat(dots.isLine()).isTrue(); + } + + @Test + void invalid_lineInput_test() { + String input = "(1,1)1(5,5)"; + String input2 = "(1,1)"; + String input3 = "(25,25)-(25,25)"; + + assertThatThrownBy(() -> new Dots(input)).isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> new Dots(input2)).isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> new Dots(input3)).isInstanceOf(IllegalArgumentException.class); + } + + @Test + void is_square() { + String input = "(10,10)-(22,10)-(22,18)-(10,18)"; + Dots dots = new Dots(input); + assertThat(dots.isSquare()).isTrue(); + } + + @Test + void is_not_square() { + String input = "(10,11)-(22,10)-(22,18)-(10,18)"; + Dots dots = new Dots(input); + assertThat(dots.isSquare()).isFalse(); + } +} diff --git a/src/test/java/LineTest.java b/src/test/java/LineTest.java index 281ade21..887ea81e 100644 --- a/src/test/java/LineTest.java +++ b/src/test/java/LineTest.java @@ -1,4 +1,5 @@ import calculator.Dot; +import calculator.Dots; import calculator.Line; import org.junit.jupiter.api.Test; @@ -12,29 +13,27 @@ class LineTest { //- 정상적인 좌표값을 입력한 경우, 해당 좌표에 특수문자를 표시한다. //- 좌표값을 두 개 입력한 경우, 두 점을 있는 직선으로 가정한다. 좌표값과 좌표값 사이는 '-' 문자로 구분한다. //- 직선인 경우는 두 점 사이 거리를 계산해서 출력한다. + + // getter 매소드를 두는 것이 좋지 않다고 판단됨. lineGetFirstDot() 과 같은 형태는 쓰지 않기로 - + @Test - void lineInput_test() { + void lineDistance_test() { String input = "(1,1)-(5,5)"; - Line line = new Line(input); - - assertThat(line.getFirstDot()).isEqualTo(new Dot(1, 1)); - assertThat(line.getSecondDot()).isEqualTo(new Dot(5, 5)); + Line line = new Line(new Dots(input)); + assertThat(line.getDotsDistance()).isEqualTo(5.65, offset(0.01)); } @Test - void invalid_lineInput_test() { - String input = "(1,1)1(5,5)"; - String input2 = "(1,1)"; - String input3 = "(25,25)-(25,25)"; - assertThatThrownBy(() -> new Line(input)).isInstanceOf(IllegalArgumentException.class); - assertThatThrownBy(() -> new Line(input2)).isInstanceOf(IllegalArgumentException.class); - assertThatThrownBy(() -> new Line(input3)).isInstanceOf(IllegalArgumentException.class); + void is_line_x_parallel() { + String input = "(1,1)-(5,1)"; // y 값이 같다. + Line line = new Line(new Dots(input)); + assertThat(line.isXParallel()).isTrue(); } @Test - void lineDistance_test() { - String input = "(1,1)-(5,5)"; - Line line = new Line(input); - assertThat(line.getDotsDistance()).isEqualTo(5.65, offset(0.01)); + void is_line_y_parallel() { + String input = "(1,1)-(1,5)"; // x 값이 같다. + Line line = new Line(new Dots(input)); + assertThat(line.isYParallel()).isTrue(); } } diff --git a/src/test/java/SquareTest.java b/src/test/java/SquareTest.java new file mode 100644 index 00000000..c021497a --- /dev/null +++ b/src/test/java/SquareTest.java @@ -0,0 +1,19 @@ +import calculator.Dots; +import calculator.Square; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class SquareTest { + //- 좌표값을 두 개 입력한 경우, 두 점을 있는 직선으로 가정한다. 좌표값과 좌표값 사이는 '-' 문자로 구분한다. + //- 좌표값을 네 개 입력한 경우, 네 점을 연결하는 사각형으로 가정한다. + // - 네 점이 뒤틀어진 사다리꼴이나 마름모는 제외하고 직사각형만 허용하도록 검사한다. + // - 사각형인 경우 사각형의 넓이를 계산해서 출력한다 + @Test + void square_area_test() { + String input = "(10,10)-(22,10)-(22,18)-(10,18)"; + Dots dots = new Dots(input); + Square square = new Square(dots); + assertThat(square.getArea()).isEqualTo(12 * 8); + } +} From 659d0d3ef7b3590ce17efe39803e526a907a2dca Mon Sep 17 00:00:00 2001 From: DK Date: Wed, 11 Oct 2023 13:20:19 +0900 Subject: [PATCH 3/6] =?UTF-8?q?=EB=AA=A8=EB=93=A0=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=99=84=EC=84=B1.=20=EB=AC=B4=EC=A1=B0=EA=B1=B4=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81=20=ED=95=B4=EC=95=BC=20=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=B2=84=EC=A0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Dots.java | 48 ++++++++++++++++++++++++++ src/main/java/calculator/Line.java | 4 +++ src/main/java/calculator/Triangle.java | 5 +++ src/test/java/DotsTest.java | 21 +++++++++++ src/test/java/TriangleTest.java | 28 +++++++++++++++ 5 files changed, 106 insertions(+) create mode 100644 src/main/java/calculator/Triangle.java create mode 100644 src/test/java/TriangleTest.java diff --git a/src/main/java/calculator/Dots.java b/src/main/java/calculator/Dots.java index c5342690..971bdd85 100644 --- a/src/main/java/calculator/Dots.java +++ b/src/main/java/calculator/Dots.java @@ -1,5 +1,6 @@ package calculator; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -19,6 +20,17 @@ public Dots(String input) { this.dots = Arrays.stream(input.split("-")).map(Dot::new).collect(Collectors.toList()); } + private Dots(Dot first, Dot second){ +// this.dots = List.of(first, second); + this.dots = new ArrayList<>(); + dots.add(first); + dots.add(second); + } + + public static Dots asLine(Dot first, Dot second){ + return new Dots(first, second); + } + /** * validations & common methods */ @@ -90,4 +102,40 @@ public int getSquareArea(){ if (collect.size() == 1) return (int) Math.pow(collect.get(0), 2); return (int) (collect.get(0) * collect.get(1)); } + + /** + * triangle + */ + public boolean isTriangle() { + return this.dots.size() == 3; + } + + public double getLinesLength(){ + double lineLength = 0; + for (int i = 0; i < this.dots.size(); i++) { + Dot first = dots.get(i); + Dot second = dots.get((i + 1) % dots.size()); + Line line = new Line(first, second); + lineLength += line.getDotsDistance(); + } + return lineLength; + } + + //헤론의 공식 + //s = (a + b + c) / 2 + //Area = √(s * (s - a) * (s - b) * (s - c)) + public double getTriangleArea(){ + List lineLengths = new ArrayList<>(); + for (int i = 0; i < this.dots.size(); i++) { + Dot first = dots.get(i); + Dot second = dots.get((i + 1) % dots.size()); + Line line = new Line(first, second); + lineLengths.add(line.getDotsDistance()); + } + double area = getLinesLength() / 2; + for (Double lineLength : lineLengths) { + area *= (getLinesLength() / 2) - lineLength; + } + return Math.sqrt(area); + } } \ No newline at end of file diff --git a/src/main/java/calculator/Line.java b/src/main/java/calculator/Line.java index 44d8e359..af0fc7d2 100644 --- a/src/main/java/calculator/Line.java +++ b/src/main/java/calculator/Line.java @@ -7,6 +7,10 @@ public Line(Dots dots) { this.dots = dots; } + public Line(Dot first, Dot second){ + this.dots = Dots.asLine(first, second); + } + public double getDotsDistance(){ return this.dots.getDistanceBetween(); } diff --git a/src/main/java/calculator/Triangle.java b/src/main/java/calculator/Triangle.java new file mode 100644 index 00000000..f202db9e --- /dev/null +++ b/src/main/java/calculator/Triangle.java @@ -0,0 +1,5 @@ +package calculator; + +public class Triangle { + +} diff --git a/src/test/java/DotsTest.java b/src/test/java/DotsTest.java index dc67596c..048ceace 100644 --- a/src/test/java/DotsTest.java +++ b/src/test/java/DotsTest.java @@ -43,4 +43,25 @@ void is_not_square() { Dots dots = new Dots(input); assertThat(dots.isSquare()).isFalse(); } + + @Test + void is_triangle() { + String input = "(10,11)-(22,10)-(22,18)"; + Dots dots = new Dots(input); + assertThat(dots.isTriangle()).isTrue(); + } + + @Test + void is_not_triangle() { + String input = "(10,11)-(22,10)"; + Dots dots = new Dots(input); + assertThat(dots.isTriangle()).isFalse(); + } + + @Test + void triangle_area() { + String input = "(10,11)-(22,10)-(22,18)"; + Dots dots = new Dots(input); + + } } diff --git a/src/test/java/TriangleTest.java b/src/test/java/TriangleTest.java new file mode 100644 index 00000000..f4503d37 --- /dev/null +++ b/src/test/java/TriangleTest.java @@ -0,0 +1,28 @@ +import calculator.Dots; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.offset; + +class TriangleTest { + @Test + void is_triangle() { + String input = "(10,11)-(22,10)-(22,18)"; + Dots dots = new Dots(input); + assertThat(dots.isTriangle()).isTrue(); + } + + @Test + void get_triangle_distances() { + String input = "(10,11)-(22,10)-(22,18)"; + Dots dots = new Dots(input); + assertThat(dots.getLinesLength()).isEqualTo(33.93, offset(0.01)); + } + + @Test + void get_triangle_area() { + String input = "(10,11)-(22,10)-(22,18)"; + Dots dots = new Dots(input); + assertThat(dots.getTriangleArea()).isEqualTo(48, offset(0.1)); + } +} From 88e8febd4258d1bcfa0b38c012df593028c0e284 Mon Sep 17 00:00:00 2001 From: DK Date: Mon, 16 Oct 2023 20:55:58 +0900 Subject: [PATCH 4/6] =?UTF-8?q?Refactor=20:=20=EB=91=90=EB=B2=88=EC=A7=B8?= =?UTF-8?q?=20=EB=B2=84=EC=A0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/DotV1.java | 56 ++++++++++++++++++ src/main/java/calculator/Dots.java | 58 +++++++++---------- .../calculator/{Line.java => LineV1.java} | 6 +- .../calculator/{Square.java => SquareV1.java} | 4 +- src/main/java/calculator/Triangle.java | 5 -- src/main/java/calculator/TriangleV1.java | 5 ++ src/main/java/figure/AbstractFigure.java | 21 +++++++ src/main/java/{calculator => figure}/Dot.java | 2 +- src/main/java/figure/Figure.java | 10 ++++ src/main/java/figure/FigureEnum.java | 22 +++++++ src/main/java/figure/FigureFactory.java | 21 +++++++ src/main/java/figure/Line.java | 31 ++++++++++ src/main/java/figure/Square.java | 40 +++++++++++++ src/main/java/figure/Triangle.java | 46 +++++++++++++++ .../java/{DotTest.java => DotV1Test.java} | 34 +++++------ .../java/{LineTest.java => LineV1Test.java} | 17 +++--- .../{SquareTest.java => SquareV1Test.java} | 8 +-- ...{TriangleTest.java => TriangleV1Test.java} | 2 +- 18 files changed, 317 insertions(+), 71 deletions(-) create mode 100644 src/main/java/calculator/DotV1.java rename src/main/java/calculator/{Line.java => LineV1.java} (80%) rename src/main/java/calculator/{Square.java => SquareV1.java} (81%) delete mode 100644 src/main/java/calculator/Triangle.java create mode 100644 src/main/java/calculator/TriangleV1.java create mode 100644 src/main/java/figure/AbstractFigure.java rename src/main/java/{calculator => figure}/Dot.java (98%) create mode 100644 src/main/java/figure/Figure.java create mode 100644 src/main/java/figure/FigureEnum.java create mode 100644 src/main/java/figure/FigureFactory.java create mode 100644 src/main/java/figure/Line.java create mode 100644 src/main/java/figure/Square.java create mode 100644 src/main/java/figure/Triangle.java rename src/test/java/{DotTest.java => DotV1Test.java} (57%) rename src/test/java/{LineTest.java => LineV1Test.java} (74%) rename src/test/java/{SquareTest.java => SquareV1Test.java} (82%) rename src/test/java/{TriangleTest.java => TriangleV1Test.java} (97%) diff --git a/src/main/java/calculator/DotV1.java b/src/main/java/calculator/DotV1.java new file mode 100644 index 00000000..fcea73c8 --- /dev/null +++ b/src/main/java/calculator/DotV1.java @@ -0,0 +1,56 @@ +package calculator; + +import java.util.Objects; + +public class DotV1 { + private final int x; + private final int y; + private static final String INVALID_INPUT_FORMAT = "Invalid input format"; + private static final String REGEX_FOR_STRING_INPUT = "[()]"; + private static final int MAX_LOCATION_FOR_DOT = 24; + public DotV1(int x, int y) { + validateLocations(x, y); + this.x = x; + this.y = y; + } + + public DotV1(String input) { + String[] parts = input.replaceAll(REGEX_FOR_STRING_INPUT, "").split(","); + if (parts.length != 2) { + throw new IllegalArgumentException(INVALID_INPUT_FORMAT); + } + int x = Integer.parseInt(parts[0].trim()); + int y = Integer.parseInt(parts[1].trim()); + validateLocations(x, y); + this.x = x; + this.y = y; + } + + private void validateLocations(int x, int y) { + if (x > MAX_LOCATION_FOR_DOT || y > MAX_LOCATION_FOR_DOT) throw new IllegalArgumentException(); + } + + public double getDistanceBetween(DotV1 secondDotV1) { + return Math.sqrt(Math.pow((secondDotV1.x - this.x), 2) + Math.pow((secondDotV1.y - this.y), 2)); + } + public boolean isXParallel(DotV1 dotV1) { + return this.y == dotV1.y; + } + + public boolean isYParallel(DotV1 dotV1) { + return this.x == dotV1.x; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + DotV1 dotV1 = (DotV1) o; + return x == dotV1.x && y == dotV1.y; + } + + @Override + public int hashCode() { + return Objects.hash(x, y); + } +} diff --git a/src/main/java/calculator/Dots.java b/src/main/java/calculator/Dots.java index 971bdd85..ce1bf2d7 100644 --- a/src/main/java/calculator/Dots.java +++ b/src/main/java/calculator/Dots.java @@ -7,7 +7,7 @@ import java.util.stream.IntStream; public class Dots { - private final List dots; + private final List dotV1s; /** * CONSTANTS @@ -15,19 +15,19 @@ public class Dots { private static final String SPLIT_EXPRESSION = "-"; private static final String IS_NOT_LINE = "선이 아니다."; private static final String IS_NOT_SQUARE = "사각형이 아니다."; + public Dots(String input) { validateInput(input); - this.dots = Arrays.stream(input.split("-")).map(Dot::new).collect(Collectors.toList()); + this.dotV1s = Arrays.stream(input.split("-")).map(DotV1::new).collect(Collectors.toList()); } - private Dots(Dot first, Dot second){ -// this.dots = List.of(first, second); - this.dots = new ArrayList<>(); - dots.add(first); - dots.add(second); + private Dots(DotV1 first, DotV1 second){ + this.dotV1s = new ArrayList<>(); + dotV1s.add(first); + dotV1s.add(second); } - public static Dots asLine(Dot first, Dot second){ + public static Dots asLine(DotV1 first, DotV1 second){ return new Dots(first, second); } @@ -41,42 +41,42 @@ private void validateInput(String input) { } public int size() { - return this.dots.size(); + return this.dotV1s.size(); } /** * line methods */ public boolean isLine() { - return this.dots.size() == 2; + return this.dotV1s.size() == 2; } public boolean isXParallelLine(){ if (!isLine()) { throw new IllegalArgumentException(IS_NOT_LINE); } - return dots.get(0).isXParallel(dots.get(1)); + return dotV1s.get(0).isXParallel(dotV1s.get(1)); } public boolean isYParallelLine(){ if (!isLine()) { throw new IllegalArgumentException(IS_NOT_LINE); } - return dots.get(0).isYParallel(dots.get(1)); + return dotV1s.get(0).isYParallel(dotV1s.get(1)); } public double getDistanceBetween(){ if (!this.isLine()) { throw new IllegalArgumentException(IS_NOT_LINE); } - return this.dots.get(0).getDistanceBetween(dots.get(1)); + return this.dotV1s.get(0).getDistanceBetween(dotV1s.get(1)); } /** * square methods */ public boolean isSquare() { - if (this.dots.size() != 4) { + if (this.dotV1s.size() != 4) { return false; } return isAllParallel(); @@ -84,9 +84,9 @@ public boolean isSquare() { public boolean isAllParallel() { return IntStream.range(0, 4).allMatch(i -> { - Dot dot1 = dots.get(i); - Dot dot2 = dots.get((i + 1) % 4); // 다음 점 - return dot1.isXParallel(dot2) || dot1.isYParallel(dot2); + DotV1 dotV1 = dotV1s.get(i); + DotV1 dotV12 = dotV1s.get((i + 1) % 4); // 다음 점 + return dotV1.isXParallel(dotV12) || dotV1.isYParallel(dotV12); }); } @@ -96,7 +96,7 @@ public int getSquareArea(){ } List collect = IntStream.range(0, 4) - .mapToObj(i -> dots.get(i).getDistanceBetween(dots.get((i + 1) % 4))) + .mapToObj(i -> dotV1s.get(i).getDistanceBetween(dotV1s.get((i + 1) % 4))) .distinct().collect(Collectors.toList()); if (collect.size() == 1) return (int) Math.pow(collect.get(0), 2); @@ -107,16 +107,16 @@ public int getSquareArea(){ * triangle */ public boolean isTriangle() { - return this.dots.size() == 3; + return this.dotV1s.size() == 3; } public double getLinesLength(){ double lineLength = 0; - for (int i = 0; i < this.dots.size(); i++) { - Dot first = dots.get(i); - Dot second = dots.get((i + 1) % dots.size()); - Line line = new Line(first, second); - lineLength += line.getDotsDistance(); + for (int i = 0; i < this.dotV1s.size(); i++) { + DotV1 first = dotV1s.get(i); + DotV1 second = dotV1s.get((i + 1) % dotV1s.size()); + LineV1 lineV1 = new LineV1(first, second); + lineLength += lineV1.getDotsDistance(); } return lineLength; } @@ -126,11 +126,11 @@ public double getLinesLength(){ //Area = √(s * (s - a) * (s - b) * (s - c)) public double getTriangleArea(){ List lineLengths = new ArrayList<>(); - for (int i = 0; i < this.dots.size(); i++) { - Dot first = dots.get(i); - Dot second = dots.get((i + 1) % dots.size()); - Line line = new Line(first, second); - lineLengths.add(line.getDotsDistance()); + for (int i = 0; i < this.dotV1s.size(); i++) { + DotV1 first = dotV1s.get(i); + DotV1 second = dotV1s.get((i + 1) % dotV1s.size()); + LineV1 lineV1 = new LineV1(first, second); + lineLengths.add(lineV1.getDotsDistance()); } double area = getLinesLength() / 2; for (Double lineLength : lineLengths) { diff --git a/src/main/java/calculator/Line.java b/src/main/java/calculator/LineV1.java similarity index 80% rename from src/main/java/calculator/Line.java rename to src/main/java/calculator/LineV1.java index af0fc7d2..0fdf8237 100644 --- a/src/main/java/calculator/Line.java +++ b/src/main/java/calculator/LineV1.java @@ -1,13 +1,13 @@ package calculator; -public class Line { +public class LineV1 { private final Dots dots; - public Line(Dots dots) { + public LineV1(Dots dots) { this.dots = dots; } - public Line(Dot first, Dot second){ + public LineV1(DotV1 first, DotV1 second){ this.dots = Dots.asLine(first, second); } diff --git a/src/main/java/calculator/Square.java b/src/main/java/calculator/SquareV1.java similarity index 81% rename from src/main/java/calculator/Square.java rename to src/main/java/calculator/SquareV1.java index 6b9ba93d..da316fc9 100644 --- a/src/main/java/calculator/Square.java +++ b/src/main/java/calculator/SquareV1.java @@ -1,9 +1,9 @@ package calculator; -public class Square { +public class SquareV1 { private final Dots dots; - public Square(Dots dots) { + public SquareV1(Dots dots) { if (!dots.isSquare()){ throw new IllegalArgumentException(); } diff --git a/src/main/java/calculator/Triangle.java b/src/main/java/calculator/Triangle.java deleted file mode 100644 index f202db9e..00000000 --- a/src/main/java/calculator/Triangle.java +++ /dev/null @@ -1,5 +0,0 @@ -package calculator; - -public class Triangle { - -} diff --git a/src/main/java/calculator/TriangleV1.java b/src/main/java/calculator/TriangleV1.java new file mode 100644 index 00000000..69b503ef --- /dev/null +++ b/src/main/java/calculator/TriangleV1.java @@ -0,0 +1,5 @@ +package calculator; + +public class TriangleV1 { + +} diff --git a/src/main/java/figure/AbstractFigure.java b/src/main/java/figure/AbstractFigure.java new file mode 100644 index 00000000..a2499d6b --- /dev/null +++ b/src/main/java/figure/AbstractFigure.java @@ -0,0 +1,21 @@ +package figure; + +import java.util.List; + +public abstract class AbstractFigure implements Figure{ + private final List dotList; + + protected AbstractFigure(List dotList) { + if (dotList.size() != this.size()){ + throw new IllegalArgumentException(); + } + this.dotList = dotList; + } + public Dot getDot(int index){ + return this.dotList.get(index); + } + @Override + public List getDots(){ + return this.dotList; + } +} diff --git a/src/main/java/calculator/Dot.java b/src/main/java/figure/Dot.java similarity index 98% rename from src/main/java/calculator/Dot.java rename to src/main/java/figure/Dot.java index db7505f7..ddd08a85 100644 --- a/src/main/java/calculator/Dot.java +++ b/src/main/java/figure/Dot.java @@ -1,4 +1,4 @@ -package calculator; +package figure; import java.util.Objects; diff --git a/src/main/java/figure/Figure.java b/src/main/java/figure/Figure.java new file mode 100644 index 00000000..9c7d58d8 --- /dev/null +++ b/src/main/java/figure/Figure.java @@ -0,0 +1,10 @@ +package figure; + +import java.util.List; + +public interface Figure { + String getName(); + int size(); + double getArea(); + List getDots(); +} diff --git a/src/main/java/figure/FigureEnum.java b/src/main/java/figure/FigureEnum.java new file mode 100644 index 00000000..5fe7acb2 --- /dev/null +++ b/src/main/java/figure/FigureEnum.java @@ -0,0 +1,22 @@ +package figure; + +public enum FigureEnum { + LINE("Line", 2), + TRIANGLE("Triangle", 3), + SQUARE("Square", 4); + + private final String name; + private final int size; + FigureEnum(String name, int size) { + this.name = name; + this.size = size; + } + + public String getName() { + return name; + } + + public int getSize(){ + return this.size; + } +} diff --git a/src/main/java/figure/FigureFactory.java b/src/main/java/figure/FigureFactory.java new file mode 100644 index 00000000..21c4c6f2 --- /dev/null +++ b/src/main/java/figure/FigureFactory.java @@ -0,0 +1,21 @@ +package figure; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class FigureFactory { + private final List
figures; + private static final Map figureMap = new HashMap<>(); + + public FigureFactory(List
figures) { + this.figures = figures; + for (Figure figure : figures) { + figureMap.put(figure.size(), figure); + } + } + + static Figure getInstance(List points) { + return figureMap.get(points.size()); + } +} \ No newline at end of file diff --git a/src/main/java/figure/Line.java b/src/main/java/figure/Line.java new file mode 100644 index 00000000..8cfa9ebf --- /dev/null +++ b/src/main/java/figure/Line.java @@ -0,0 +1,31 @@ +package figure; + +import java.util.List; + +public class Line extends AbstractFigure { + + protected Line(List dotList) { + super(dotList); + } + + @Override + public String getName() { + return FigureEnum.LINE.getName(); + } + + @Override + public int size() { + return FigureEnum.LINE.getSize(); + } + + @Override + public double getArea() { + return getLineDistance(); + } + + private double getLineDistance() { + Dot dot = this.getDot(0); + Dot secondDot = this.getDot(1); + return dot.getDistanceBetween(secondDot); + } +} diff --git a/src/main/java/figure/Square.java b/src/main/java/figure/Square.java new file mode 100644 index 00000000..00751769 --- /dev/null +++ b/src/main/java/figure/Square.java @@ -0,0 +1,40 @@ +package figure; + +import calculator.DotV1; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class Square extends AbstractFigure{ + + protected Square(List dotList) { + super(dotList); + } + + @Override + public String getName() { + return FigureEnum.SQUARE.getName(); + } + + @Override + public int size() { + return FigureEnum.SQUARE.getSize(); + } + + @Override + public double getArea() { + return getSquareArea(); + } + + private double getSquareArea(){ + List collect = IntStream.range(0, 4) + .mapToObj(i -> getDot(i).getDistanceBetween(getDots().get((i + 1) % 4))) + .distinct().collect(Collectors.toList()); + + if (collect.size() == 1) return (int) Math.pow(collect.get(0), 2); + + return collect.get(0) * collect.get(1); + } + +} diff --git a/src/main/java/figure/Triangle.java b/src/main/java/figure/Triangle.java new file mode 100644 index 00000000..31310198 --- /dev/null +++ b/src/main/java/figure/Triangle.java @@ -0,0 +1,46 @@ +package figure; + +import java.util.Arrays; +import java.util.List; + +public class Triangle extends AbstractFigure{ + protected Triangle(List dotList) { + super(dotList); + } + + @Override + public String getName() { + return FigureEnum.TRIANGLE.getName(); + } + + @Override + public int size() { + return FigureEnum.TRIANGLE.getSize(); + } + + @Override + public double getArea() { + return calculateArea(); + } + private double getLineLength(int firstIdx, int secondIdx){ + Dot dot = getDot(firstIdx); + Dot secondDot = getDot(secondIdx); + return dot.getDistanceBetween(secondDot); + } + + //헤론의 공식 + //s = (a + b + c) / 2 + //Area = √(s * (s - a) * (s - b) * (s - c)) + private double calculateArea(){ + double[] lengths = new double[3]; + + for (int i = 0; i < size(); i++) { + lengths[i] = this.getLineLength(i, (i + 1) % 3); + } + + double s = Arrays.stream(lengths).sum() / 2; + + return Math.sqrt(s * (s - lengths[0]) * (s - lengths[1]) * (s - lengths[2])); + } + +} diff --git a/src/test/java/DotTest.java b/src/test/java/DotV1Test.java similarity index 57% rename from src/test/java/DotTest.java rename to src/test/java/DotV1Test.java index c88c3e9f..ff2a0d46 100644 --- a/src/test/java/DotTest.java +++ b/src/test/java/DotV1Test.java @@ -1,9 +1,9 @@ -import calculator.Dot; +import calculator.DotV1; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; -class DotTest { +class DotV1Test { //- 사용자가 점에 대한 좌표 정보를 입력하는 메뉴를 구성한다. //- 좌표 정보는 괄호"(", ")"로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분한다. //- X, Y좌표 모두 최대 24까지만 입력할 수 있다. @@ -14,46 +14,46 @@ class DotTest { @Test void dotInit_test() { - Dot dot = new Dot(1, 1); - assertThat(dot).isEqualTo(new Dot(1, 1)); + DotV1 dotV1 = new DotV1(1, 1); + assertThat(dotV1).isEqualTo(new DotV1(1, 1)); } @Test void dot_validation_test() { //- 입력 범위를 초과할 경우 에러 문구를 출력하고 다시 입력을 받는다. 중요! - assertThatThrownBy(() -> new Dot(25, 25)).isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> new DotV1(25, 25)).isInstanceOf(IllegalArgumentException.class); } @Test void string_input_test() { String input = "(1,1)"; - Dot dot = new Dot(input); - assertThat(dot).isEqualTo(new Dot(1,1)); + DotV1 dotV1 = new DotV1(input); + assertThat(dotV1).isEqualTo(new DotV1(1,1)); } @Test void validate_input_test() { String input = "(25,25)"; - assertThatThrownBy(() -> new Dot(input)).isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> new DotV1(input)).isInstanceOf(IllegalArgumentException.class); } @Test void get_dot_distance() { - Dot dot = new Dot(10,10); - Dot secondDot = new Dot(14,15); - assertThat(dot.getDistanceBetween(secondDot)).isEqualTo(6.4, offset(0.1)); + DotV1 dotV1 = new DotV1(10,10); + DotV1 secondDotV1 = new DotV1(14,15); + assertThat(dotV1.getDistanceBetween(secondDotV1)).isEqualTo(6.4, offset(0.1)); } @Test void is_x_parallel() { - Dot dot = new Dot(10, 10); - Dot dot2 = new Dot(15, 10); - assertThat(dot.isXParallel(dot2)).isTrue(); + DotV1 dotV1 = new DotV1(10, 10); + DotV1 dotV12 = new DotV1(15, 10); + assertThat(dotV1.isXParallel(dotV12)).isTrue(); } @Test void is_y_parallel() { - Dot dot = new Dot(10, 10); - Dot dot2 = new Dot(10, 15); - assertThat(dot.isYParallel(dot2)).isTrue(); + DotV1 dotV1 = new DotV1(10, 10); + DotV1 dotV12 = new DotV1(10, 15); + assertThat(dotV1.isYParallel(dotV12)).isTrue(); } } diff --git a/src/test/java/LineTest.java b/src/test/java/LineV1Test.java similarity index 74% rename from src/test/java/LineTest.java rename to src/test/java/LineV1Test.java index 887ea81e..82b75a34 100644 --- a/src/test/java/LineTest.java +++ b/src/test/java/LineV1Test.java @@ -1,11 +1,10 @@ -import calculator.Dot; import calculator.Dots; -import calculator.Line; +import calculator.LineV1; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; -class LineTest { +class LineV1Test { //- 사용자가 점에 대한 좌표 정보를 입력하는 메뉴를 구성한다. //- 좌표 정보는 괄호"(", ")"로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분한다. //- X, Y좌표 모두 최대 24까지만 입력할 수 있다. @@ -19,21 +18,21 @@ class LineTest { @Test void lineDistance_test() { String input = "(1,1)-(5,5)"; - Line line = new Line(new Dots(input)); - assertThat(line.getDotsDistance()).isEqualTo(5.65, offset(0.01)); + LineV1 lineV1 = new LineV1(new Dots(input)); + assertThat(lineV1.getDotsDistance()).isEqualTo(5.65, offset(0.01)); } @Test void is_line_x_parallel() { String input = "(1,1)-(5,1)"; // y 값이 같다. - Line line = new Line(new Dots(input)); - assertThat(line.isXParallel()).isTrue(); + LineV1 lineV1 = new LineV1(new Dots(input)); + assertThat(lineV1.isXParallel()).isTrue(); } @Test void is_line_y_parallel() { String input = "(1,1)-(1,5)"; // x 값이 같다. - Line line = new Line(new Dots(input)); - assertThat(line.isYParallel()).isTrue(); + LineV1 lineV1 = new LineV1(new Dots(input)); + assertThat(lineV1.isYParallel()).isTrue(); } } diff --git a/src/test/java/SquareTest.java b/src/test/java/SquareV1Test.java similarity index 82% rename from src/test/java/SquareTest.java rename to src/test/java/SquareV1Test.java index c021497a..92a1cab6 100644 --- a/src/test/java/SquareTest.java +++ b/src/test/java/SquareV1Test.java @@ -1,10 +1,10 @@ import calculator.Dots; -import calculator.Square; +import calculator.SquareV1; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -class SquareTest { +class SquareV1Test { //- 좌표값을 두 개 입력한 경우, 두 점을 있는 직선으로 가정한다. 좌표값과 좌표값 사이는 '-' 문자로 구분한다. //- 좌표값을 네 개 입력한 경우, 네 점을 연결하는 사각형으로 가정한다. // - 네 점이 뒤틀어진 사다리꼴이나 마름모는 제외하고 직사각형만 허용하도록 검사한다. @@ -13,7 +13,7 @@ class SquareTest { void square_area_test() { String input = "(10,10)-(22,10)-(22,18)-(10,18)"; Dots dots = new Dots(input); - Square square = new Square(dots); - assertThat(square.getArea()).isEqualTo(12 * 8); + SquareV1 squareV1 = new SquareV1(dots); + assertThat(squareV1.getArea()).isEqualTo(12 * 8); } } diff --git a/src/test/java/TriangleTest.java b/src/test/java/TriangleV1Test.java similarity index 97% rename from src/test/java/TriangleTest.java rename to src/test/java/TriangleV1Test.java index f4503d37..723ca77f 100644 --- a/src/test/java/TriangleTest.java +++ b/src/test/java/TriangleV1Test.java @@ -4,7 +4,7 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.offset; -class TriangleTest { +class TriangleV1Test { @Test void is_triangle() { String input = "(10,11)-(22,10)-(22,18)"; From 00f76b2332775bfd5c766af6255417e51d86b478 Mon Sep 17 00:00:00 2001 From: DK Date: Wed, 18 Oct 2023 21:26:01 +0900 Subject: [PATCH 5/6] =?UTF-8?q?Refactor=20:=20=EB=91=90=EB=B2=88=EC=A7=B8?= =?UTF-8?q?=20=EB=B2=84=EC=A0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/figure/FigureFactory.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/figure/FigureFactory.java b/src/main/java/figure/FigureFactory.java index 21c4c6f2..cfaa507e 100644 --- a/src/main/java/figure/FigureFactory.java +++ b/src/main/java/figure/FigureFactory.java @@ -5,12 +5,12 @@ import java.util.Map; public class FigureFactory { - private final List
figures; + private final List
figureList; private static final Map figureMap = new HashMap<>(); - public FigureFactory(List
figures) { - this.figures = figures; - for (Figure figure : figures) { + public FigureFactory(List
figureList) { + this.figureList = figureList; + for (Figure figure : figureList) { figureMap.put(figure.size(), figure); } } From 654aae9849cdf2eff429317421e3765545f23e02 Mon Sep 17 00:00:00 2001 From: DK Date: Thu, 26 Oct 2023 21:46:33 +0900 Subject: [PATCH 6/6] =?UTF-8?q?Refactor=20:=20=EC=A0=95=EC=A0=81=20?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A6=AC=20=EB=A7=A4=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=9C=20Dot=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/figure/Dot.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/figure/Dot.java b/src/main/java/figure/Dot.java index ddd08a85..ab4d1755 100644 --- a/src/main/java/figure/Dot.java +++ b/src/main/java/figure/Dot.java @@ -8,22 +8,22 @@ public class Dot { private static final String INVALID_INPUT_FORMAT = "Invalid input format"; private static final String REGEX_FOR_STRING_INPUT = "[()]"; private static final int MAX_LOCATION_FOR_DOT = 24; - public Dot(int x, int y) { + private Dot(int x, int y) { validateLocations(x, y); this.x = x; this.y = y; } - - public Dot(String input) { + public static Dot ofTest(int x, int y){ + return new Dot(x,y); + } + public static Dot of(String input){ String[] parts = input.replaceAll(REGEX_FOR_STRING_INPUT, "").split(","); if (parts.length != 2) { throw new IllegalArgumentException(INVALID_INPUT_FORMAT); } int x = Integer.parseInt(parts[0].trim()); int y = Integer.parseInt(parts[1].trim()); - validateLocations(x, y); - this.x = x; - this.y = y; + return new Dot(x, y); } private void validateLocations(int x, int y) {