From 9054ebd98b2fc2de9472e4e5e296a127cfe8a00a Mon Sep 17 00:00:00 2001 From: dahee Date: Sat, 14 Oct 2023 00:28:47 +0900 Subject: [PATCH 1/4] =?UTF-8?q?1.=20=EB=8F=84=ED=98=95=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0=20=EA=B5=AC=ED=98=84=202.=20=EB=8F=84=ED=98=95=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Figure/Line.java | 21 +++++++ src/main/java/Figure/Square.java | 33 ++++++++++ src/main/java/Figure/Triangle.java | 30 +++++++++ src/main/java/domain/Point.java | 50 +++++++++++++++ src/main/java/domain/Points.java | 16 +++++ src/test/java/study/FigureTest.java | 97 +++++++++++++++++++++++++++++ 6 files changed, 247 insertions(+) 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 create mode 100644 src/main/java/domain/Point.java create mode 100644 src/main/java/domain/Points.java create mode 100644 src/test/java/study/FigureTest.java diff --git a/src/main/java/Figure/Line.java b/src/main/java/Figure/Line.java new file mode 100644 index 00000000..76d4097f --- /dev/null +++ b/src/main/java/Figure/Line.java @@ -0,0 +1,21 @@ +package Figure; + +import domain.Point; +import domain.Points; + +public class Line { + + Points points; + + public Line(Points points) { + this.points = points; + } + + public double getLength() { + + Point point1 = points.getPoint(0); + Point point2 = points.getPoint(1); + + return point1.getDifferDistance(point2); + } +} diff --git a/src/main/java/Figure/Square.java b/src/main/java/Figure/Square.java new file mode 100644 index 00000000..0ea67838 --- /dev/null +++ b/src/main/java/Figure/Square.java @@ -0,0 +1,33 @@ +package Figure; + +import domain.Point; +import domain.Points; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class Square { + + Points points; + + public Square(Points points) { + this.points = points; + } + + public double getArea() { + + Point stand = points.getPoint(0); + + List lens = new ArrayList<>(); + + for(int i=1; i<4; i++) { + lens.add(stand.getDifferDistance(points.getPoint(i))); + } + + Collections.sort(lens); + + return lens.get(0)*lens.get(1); + } + +} diff --git a/src/main/java/Figure/Triangle.java b/src/main/java/Figure/Triangle.java new file mode 100644 index 00000000..c5e92f06 --- /dev/null +++ b/src/main/java/Figure/Triangle.java @@ -0,0 +1,30 @@ +package Figure; + +import domain.Point; +import domain.Points; + +public class Triangle { + + Points points; + + public Triangle(Points points) { + this.points = points; + } + + public double getArea() { + + Point pointA = points.getPoint(0); + Point pointB = points.getPoint(1); + Point pointC = points.getPoint(2); + + double area = 0.5 * ( + pointA.getX() * (pointB.getY() - pointC.getY()) + + pointB.getX() * (pointC.getY() - pointA.getY()) + + pointC.getX() * (pointA.getY() - pointB.getY()) + ); + + return Math.abs(area); + + } + +} diff --git a/src/main/java/domain/Point.java b/src/main/java/domain/Point.java new file mode 100644 index 00000000..6e49a645 --- /dev/null +++ b/src/main/java/domain/Point.java @@ -0,0 +1,50 @@ +package domain; + +public class Point { + + private int x; + private int y; + + private Point(int x, int y) { + + this.x = x; + this.y = y; + + } + + public static Point initPoint(int x, int y) { + + if (x < 0 || x > 24 || y < 0 || y > 24) { + throw new IllegalArgumentException("좌표는 모두 최대 24까지만 허용"); + } + + return new Point(x, y); + } + + public static Point inputStrSeparator(String inStr) { + + String[] values = inStr.split(","); + + return initPoint(Integer.parseInt(values[0]), Integer.parseInt(values[1])); + + } + + public double getDifferDistance(Point point) { + + return Math.sqrt(Math.pow(x - point.getX(), 2) + Math.pow(x - point.getY(), 2)); + + } + + public int getX() { + + return this.x; + + } + + public int getY() { + + return this.y; + + } + +} diff --git a/src/main/java/domain/Points.java b/src/main/java/domain/Points.java new file mode 100644 index 00000000..859ca6a0 --- /dev/null +++ b/src/main/java/domain/Points.java @@ -0,0 +1,16 @@ +package domain; + +import java.util.List; + +public class Points { + + private List points; + + public Points(List points) { + this.points = points; + } + + public Point getPoint(int idx) { + return points.get(idx); + } +} diff --git a/src/test/java/study/FigureTest.java b/src/test/java/study/FigureTest.java new file mode 100644 index 00000000..94aec58a --- /dev/null +++ b/src/test/java/study/FigureTest.java @@ -0,0 +1,97 @@ +package study; + +import Figure.Line; +import Figure.Square; +import Figure.Triangle; +import domain.*; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class FigureTest { + + // 좌표 정보는 괄호"(", ")"로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분 + @Test + @DisplayName("입력 좌표 포맷을 확인") + void 입력_좌표_포맷_Test() { + + + + } + + // X, Y좌표 모두 최대 24까지만 입력 + @Test + @DisplayName("입력_좌표_범위_확인") + void 입력_좌표_범위_Test() { + + Point.initPoint(0, 24); + + Throwable exception = assertThrows(RuntimeException.class, () -> { + Point.initPoint(-1, 24); + }); + assertEquals("좌표는 모두 최대 24까지만 허용", exception.getMessage()); + + Throwable exception2 = assertThrows(RuntimeException.class, () -> { + Point.initPoint(0, 25); + }); + assertEquals("좌표는 모두 최대 24까지만 허용", exception2.getMessage()); + + } + + // 선 길이 + @Test + @DisplayName("선_길이_확인") + void 선_길이_Test() { + + List points = new ArrayList<>(); + + points.add(Point.initPoint(10, 10)); + points.add(Point.initPoint(10, 15)); + + Line line = new Line(new Points(points)); + double len = line.getLength(); + Assertions.assertThat(5.0).isEqualTo(len); + + } + + // 사각형 넓이 + @Test + @DisplayName("사각형_넓이_확인") + void 사각형_넓이_Test() { + + List points = new ArrayList<>(); + + points.add(Point.initPoint(10, 10)); + points.add(Point.initPoint(10, 15)); + points.add(Point.initPoint(15, 15)); + points.add(Point.initPoint(15, 10)); + + Square square = new Square(new Points(points)); + double area = square.getArea(); + Assertions.assertThat(25.0).isEqualTo(area); + + } + + // 삼각형 + @Test + @DisplayName("삼각형_넓이_확인") + void 삼각형_넓이_Test() { + + List points = new ArrayList<>(); + + points.add(Point.initPoint(0, 10)); + points.add(Point.initPoint(0, 0)); + points.add(Point.initPoint(10, 0)); + + Triangle triangle = new Triangle(new Points(points)); + double area = triangle.getArea(); + Assertions.assertThat(50.0).isEqualTo(area); + + } +} From e47e4eb0d89d07f1afbcf658b1673a74bb3b3da6 Mon Sep 17 00:00:00 2001 From: dahee Date: Sat, 14 Oct 2023 23:29:13 +0900 Subject: [PATCH 2/4] =?UTF-8?q?1.=20View=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Figure/Calculator.java | 7 ++++ src/main/java/Figure/Line.java | 5 ++- src/main/java/Figure/Square.java | 5 ++- src/main/java/Figure/Triangle.java | 5 ++- src/main/java/Main.java | 10 +++++ src/main/java/coordinate/Process.java | 37 +++++++++++++++++++ src/main/java/domain/Point.java | 2 +- src/main/java/domain/Points.java | 10 ++++- src/main/java/domain/Type.java | 19 ++++++++++ src/main/java/view/InputView.java | 37 +++++++++++++++++++ src/main/java/view/OutputView.java | 21 +++++++++++ .../{FigureTest.java => CalculatorTest.java} | 23 ++++-------- 12 files changed, 157 insertions(+), 24 deletions(-) create mode 100644 src/main/java/Figure/Calculator.java create mode 100644 src/main/java/Main.java create mode 100644 src/main/java/coordinate/Process.java create mode 100644 src/main/java/domain/Type.java create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/OutputView.java rename src/test/java/study/{FigureTest.java => CalculatorTest.java} (79%) diff --git a/src/main/java/Figure/Calculator.java b/src/main/java/Figure/Calculator.java new file mode 100644 index 00000000..a44fd3d8 --- /dev/null +++ b/src/main/java/Figure/Calculator.java @@ -0,0 +1,7 @@ +package Figure; + +public interface Calculator { + + double calculate(); + +} diff --git a/src/main/java/Figure/Line.java b/src/main/java/Figure/Line.java index 76d4097f..4194c67a 100644 --- a/src/main/java/Figure/Line.java +++ b/src/main/java/Figure/Line.java @@ -3,7 +3,7 @@ import domain.Point; import domain.Points; -public class Line { +public class Line implements Calculator { Points points; @@ -11,7 +11,8 @@ public Line(Points points) { this.points = points; } - public double getLength() { + @Override + public double calculate() { Point point1 = points.getPoint(0); Point point2 = points.getPoint(1); diff --git a/src/main/java/Figure/Square.java b/src/main/java/Figure/Square.java index 0ea67838..5175c988 100644 --- a/src/main/java/Figure/Square.java +++ b/src/main/java/Figure/Square.java @@ -7,7 +7,7 @@ import java.util.Collections; import java.util.List; -public class Square { +public class Square implements Calculator { Points points; @@ -15,7 +15,8 @@ public Square(Points points) { this.points = points; } - public double getArea() { + @Override + public double calculate() { Point stand = points.getPoint(0); diff --git a/src/main/java/Figure/Triangle.java b/src/main/java/Figure/Triangle.java index c5e92f06..17aaa0eb 100644 --- a/src/main/java/Figure/Triangle.java +++ b/src/main/java/Figure/Triangle.java @@ -3,7 +3,7 @@ import domain.Point; import domain.Points; -public class Triangle { +public class Triangle implements Calculator { Points points; @@ -11,7 +11,8 @@ public Triangle(Points points) { this.points = points; } - public double getArea() { + @Override + public double calculate() { Point pointA = points.getPoint(0); Point pointB = points.getPoint(1); diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 00000000..5dbe168f --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,10 @@ +import coordinate.Process; + +public class Main { + + public static void main(String[] args) { + Process process = new Process(); + process.run(); + } + +} diff --git a/src/main/java/coordinate/Process.java b/src/main/java/coordinate/Process.java new file mode 100644 index 00000000..05e2e573 --- /dev/null +++ b/src/main/java/coordinate/Process.java @@ -0,0 +1,37 @@ +package coordinate; + +import Figure.Line; +import Figure.Square; +import Figure.Triangle; +import domain.Points; +import domain.Type; +import view.InputView; +import view.OutputView; + +public class Process { + + OutputView oView = new OutputView(); + InputView inputView = new InputView(); + + public void run() { + + oView.msgInputPoints(); + + Points points = Points.initPoints(inputView.inputPoints()); + + if(points.getSize()== Type.LINE.getCount()) { + + oView.msgOutputLine(new Line(points).calculate()); + + } else if(points.getSize()==Type.TRIANGLE.getCount()) { + + oView.msgOutputTriangle(new Triangle(points).calculate()); + + } else if(points.getSize()==Type.RECTANGLE.getCount()) { + + oView.msgOutputSquare(new Square(points).calculate()); + + } + } + +} diff --git a/src/main/java/domain/Point.java b/src/main/java/domain/Point.java index 6e49a645..b1697504 100644 --- a/src/main/java/domain/Point.java +++ b/src/main/java/domain/Point.java @@ -23,7 +23,7 @@ public static Point initPoint(int x, int y) { public static Point inputStrSeparator(String inStr) { - String[] values = inStr.split(","); + String[] values = inStr.replaceAll("[()]", "").split(","); return initPoint(Integer.parseInt(values[0]), Integer.parseInt(values[1])); diff --git a/src/main/java/domain/Points.java b/src/main/java/domain/Points.java index 859ca6a0..06a6617b 100644 --- a/src/main/java/domain/Points.java +++ b/src/main/java/domain/Points.java @@ -6,11 +6,19 @@ public class Points { private List points; - public Points(List points) { + private Points(List points) { this.points = points; } + public static Points initPoints(List points) { + return new Points(points); + } + public Point getPoint(int idx) { return points.get(idx); } + + public int getSize() { + return points.size(); + } } diff --git a/src/main/java/domain/Type.java b/src/main/java/domain/Type.java new file mode 100644 index 00000000..89d5f19a --- /dev/null +++ b/src/main/java/domain/Type.java @@ -0,0 +1,19 @@ +package domain; + +public enum Type { + + LINE(2), + TRIANGLE(3), + RECTANGLE(4); + + private final int count; + + Type(int count) { + this.count = count; + } + + public int getCount() { + return count; + } + +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 00000000..9908c1c2 --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,37 @@ +package view; + +import domain.Point; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +public class InputView { + + public List inputPoints() { + + List points = new ArrayList<>(); + + try { + + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String line = br.readLine(); + + String[] pointsStr = line.split("-"); + + for(int i=0; i< pointsStr.length; i++) { + + points.add(Point.inputStrSeparator(pointsStr[i])); + + } + + } catch (IOException e) { + System.out.println(e.getMessage()); + } + + return points; + } + +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java new file mode 100644 index 00000000..10593173 --- /dev/null +++ b/src/main/java/view/OutputView.java @@ -0,0 +1,21 @@ +package view; + +public class OutputView { + + public void msgInputPoints() { + System.out.println("좌표를 입력하세요."); + } + + public void msgOutputLine(double result) { + System.out.println("두 점 사이의 거리는 "+result); + } + + public void msgOutputSquare(double result) { + System.out.println("사각형 넓이는 "+result); + } + + public void msgOutputTriangle(double result) { + System.out.println("삼각형 넓이는 "+result); + } + +} diff --git a/src/test/java/study/FigureTest.java b/src/test/java/study/CalculatorTest.java similarity index 79% rename from src/test/java/study/FigureTest.java rename to src/test/java/study/CalculatorTest.java index 94aec58a..23644f4c 100644 --- a/src/test/java/study/FigureTest.java +++ b/src/test/java/study/CalculatorTest.java @@ -14,16 +14,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -public class FigureTest { - - // 좌표 정보는 괄호"(", ")"로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분 - @Test - @DisplayName("입력 좌표 포맷을 확인") - void 입력_좌표_포맷_Test() { - - - - } +public class CalculatorTest { // X, Y좌표 모두 최대 24까지만 입력 @Test @@ -54,8 +45,8 @@ public class FigureTest { points.add(Point.initPoint(10, 10)); points.add(Point.initPoint(10, 15)); - Line line = new Line(new Points(points)); - double len = line.getLength(); + Line line = new Line(Points.initPoints(points)); + double len = line.calculate(); Assertions.assertThat(5.0).isEqualTo(len); } @@ -72,8 +63,8 @@ public class FigureTest { points.add(Point.initPoint(15, 15)); points.add(Point.initPoint(15, 10)); - Square square = new Square(new Points(points)); - double area = square.getArea(); + Square square = new Square(Points.initPoints(points)); + double area = square.calculate(); Assertions.assertThat(25.0).isEqualTo(area); } @@ -89,8 +80,8 @@ public class FigureTest { points.add(Point.initPoint(0, 0)); points.add(Point.initPoint(10, 0)); - Triangle triangle = new Triangle(new Points(points)); - double area = triangle.getArea(); + Triangle triangle = new Triangle(Points.initPoints(points)); + double area = triangle.calculate(); Assertions.assertThat(50.0).isEqualTo(area); } From ed0e495b0b452d4ad693137f2526808812d6b74f Mon Sep 17 00:00:00 2001 From: dahee Date: Sun, 15 Oct 2023 14:26:51 +0900 Subject: [PATCH 3/4] =?UTF-8?q?1.=20=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC=202.=20=EC=9E=85=EB=A0=A5=20=ED=8F=AC?= =?UTF-8?q?=EB=A7=B7=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Point.java | 4 ++- src/main/java/utils/Constants.java | 9 +++++++ src/main/java/view/InputView.java | 26 ++++++++++++++++++ src/test/java/study/CalculatorTest.java | 35 +++++++++++++++++++++++-- 4 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 src/main/java/utils/Constants.java diff --git a/src/main/java/domain/Point.java b/src/main/java/domain/Point.java index b1697504..4a4986a2 100644 --- a/src/main/java/domain/Point.java +++ b/src/main/java/domain/Point.java @@ -1,5 +1,7 @@ package domain; +import utils.Constants; + public class Point { private int x; @@ -15,7 +17,7 @@ private Point(int x, int y) { public static Point initPoint(int x, int y) { if (x < 0 || x > 24 || y < 0 || y > 24) { - throw new IllegalArgumentException("좌표는 모두 최대 24까지만 허용"); + throw new IllegalArgumentException(Constants.INPUT_RANGE_CHECK); } return new Point(x, y); diff --git a/src/main/java/utils/Constants.java b/src/main/java/utils/Constants.java new file mode 100644 index 00000000..7230dd3a --- /dev/null +++ b/src/main/java/utils/Constants.java @@ -0,0 +1,9 @@ +package utils; + +public class Constants { + + public static String INPUT_FORMAT_CHECK = "입력 좌표의 포맷을 확인"; + + public static String INPUT_RANGE_CHECK = "좌표(x,y)는 모두 최소0 부터 최대 24까지만 허용"; + +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 9908c1c2..1cc6c935 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,6 +1,8 @@ package view; import domain.Point; +import domain.Type; +import utils.Constants; import java.io.BufferedReader; import java.io.IOException; @@ -19,6 +21,8 @@ public List inputPoints() { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); + InputView.validInputFormat(line); + String[] pointsStr = line.split("-"); for(int i=0; i< pointsStr.length; i++) { @@ -34,4 +38,26 @@ public List inputPoints() { return points; } + public static void validInputFormat(String inStr) { + + String[] strArr = inStr.split("-"); + + if(strArr.length != Type.LINE.getCount() && strArr.length != Type.LINE.getCount() && strArr.length != Type.LINE.getCount()) { + throw new IllegalArgumentException(Constants.INPUT_FORMAT_CHECK); + } + + for(String str:strArr) { + String[] checkArr = str.replaceAll("[()]", "").split(","); + + if(checkArr.length!=2) throw new IllegalArgumentException(Constants.INPUT_FORMAT_CHECK); + + try { + Integer.parseInt(checkArr[0]); + Integer.parseInt(checkArr[1]); + } catch (NumberFormatException e) { + throw new IllegalArgumentException(Constants.INPUT_FORMAT_CHECK); + } + } + + } } diff --git a/src/test/java/study/CalculatorTest.java b/src/test/java/study/CalculatorTest.java index 23644f4c..c393c3b8 100644 --- a/src/test/java/study/CalculatorTest.java +++ b/src/test/java/study/CalculatorTest.java @@ -7,6 +7,8 @@ import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import utils.Constants; +import view.InputView; import java.util.ArrayList; import java.util.List; @@ -16,6 +18,35 @@ public class CalculatorTest { + // 좌표 정보는 괄호"(", ")"로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분 + @Test + @DisplayName("입력 좌표 포맷을 확인") + void 입력_좌표_포맷_Test() { + + Throwable exception1 = assertThrows(RuntimeException.class, () -> { + InputView.validInputFormat("(3,4)"); + }); + assertEquals(Constants.INPUT_FORMAT_CHECK, exception1.getMessage()); + + InputView.validInputFormat("(3,4)-(3,5)"); + + Throwable exception3 = assertThrows(RuntimeException.class, () -> { + InputView.validInputFormat("(3,4)-(3,5)-(3,6)-(3,7)"); + }); + assertEquals(Constants.INPUT_FORMAT_CHECK, exception3.getMessage()); + + Throwable exception4 = assertThrows(RuntimeException.class, () -> { + InputView.validInputFormat("(3,4)-(3,5,8)"); + }); + assertEquals(Constants.INPUT_FORMAT_CHECK, exception4.getMessage()); + + Throwable exception5 = assertThrows(RuntimeException.class, () -> { + InputView.validInputFormat("(3,4)-(3,g)"); + }); + assertEquals(Constants.INPUT_FORMAT_CHECK, exception5.getMessage()); + + } + // X, Y좌표 모두 최대 24까지만 입력 @Test @DisplayName("입력_좌표_범위_확인") @@ -26,12 +57,12 @@ public class CalculatorTest { Throwable exception = assertThrows(RuntimeException.class, () -> { Point.initPoint(-1, 24); }); - assertEquals("좌표는 모두 최대 24까지만 허용", exception.getMessage()); + assertEquals(Constants.INPUT_RANGE_CHECK, exception.getMessage()); Throwable exception2 = assertThrows(RuntimeException.class, () -> { Point.initPoint(0, 25); }); - assertEquals("좌표는 모두 최대 24까지만 허용", exception2.getMessage()); + assertEquals(Constants.INPUT_RANGE_CHECK, exception2.getMessage()); } From a81aafc65b81fcc718695db29b714c1a76d92857 Mon Sep 17 00:00:00 2001 From: dahee Date: Mon, 23 Oct 2023 21:19:42 +0900 Subject: [PATCH 4/4] =?UTF-8?q?1.=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=8A=A4=EB=A5=BC=20=EB=B6=84=EB=A6=AC=202.?= =?UTF-8?q?=20=EC=A0=91=EA=B7=BC=EC=A0=9C=ED=95=9C=EC=9E=90=203.=20?= =?UTF-8?q?=EC=A0=95=EC=A0=81=20=ED=8C=A9=ED=84=B0=EB=A6=AC=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=ED=8C=A8=ED=84=B4=20=EB=A6=AC=EB=84=A4?= =?UTF-8?q?=EC=9D=B4=EB=B0=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Figure/Line.java | 2 +- src/main/java/Figure/Square.java | 2 +- src/main/java/Figure/Triangle.java | 12 ++- src/main/java/coordinate/Process.java | 2 +- src/main/java/domain/Point.java | 4 +- src/main/java/domain/Points.java | 2 +- src/test/java/study/CalculatorTest.java | 119 ----------------------- src/test/java/study/InputFormatTest.java | 99 +++++++++++++++++++ src/test/java/study/LineTest.java | 29 ++++++ src/test/java/study/SquareTest.java | 31 ++++++ src/test/java/study/TriangleTest.java | 29 ++++++ 11 files changed, 202 insertions(+), 129 deletions(-) delete mode 100644 src/test/java/study/CalculatorTest.java create mode 100644 src/test/java/study/InputFormatTest.java create mode 100644 src/test/java/study/LineTest.java create mode 100644 src/test/java/study/SquareTest.java create mode 100644 src/test/java/study/TriangleTest.java diff --git a/src/main/java/Figure/Line.java b/src/main/java/Figure/Line.java index 4194c67a..20554402 100644 --- a/src/main/java/Figure/Line.java +++ b/src/main/java/Figure/Line.java @@ -5,7 +5,7 @@ public class Line implements Calculator { - Points points; + private Points points; public Line(Points points) { this.points = points; diff --git a/src/main/java/Figure/Square.java b/src/main/java/Figure/Square.java index 5175c988..30135cd7 100644 --- a/src/main/java/Figure/Square.java +++ b/src/main/java/Figure/Square.java @@ -9,7 +9,7 @@ public class Square implements Calculator { - Points points; + private Points points; public Square(Points points) { this.points = points; diff --git a/src/main/java/Figure/Triangle.java b/src/main/java/Figure/Triangle.java index 17aaa0eb..6f919077 100644 --- a/src/main/java/Figure/Triangle.java +++ b/src/main/java/Figure/Triangle.java @@ -5,7 +5,7 @@ public class Triangle implements Calculator { - Points points; + private Points points; public Triangle(Points points) { this.points = points; @@ -19,13 +19,17 @@ public double calculate() { Point pointC = points.getPoint(2); double area = 0.5 * ( - pointA.getX() * (pointB.getY() - pointC.getY()) + - pointB.getX() * (pointC.getY() - pointA.getY()) + - pointC.getX() * (pointA.getY() - pointB.getY()) + this.getTriangleLine(pointA, pointB, pointC) + + this.getTriangleLine(pointB, pointC, pointA) + + this.getTriangleLine(pointC, pointA, pointB) ); return Math.abs(area); } + private int getTriangleLine(Point pointA, Point pointB, Point pointC) { + return pointA.getX() * (pointB.getY() - pointC.getY()); + } + } diff --git a/src/main/java/coordinate/Process.java b/src/main/java/coordinate/Process.java index 05e2e573..b777ec2e 100644 --- a/src/main/java/coordinate/Process.java +++ b/src/main/java/coordinate/Process.java @@ -17,7 +17,7 @@ public void run() { oView.msgInputPoints(); - Points points = Points.initPoints(inputView.inputPoints()); + Points points = Points.newInstance(inputView.inputPoints()); if(points.getSize()== Type.LINE.getCount()) { diff --git a/src/main/java/domain/Point.java b/src/main/java/domain/Point.java index 4a4986a2..7461f4dc 100644 --- a/src/main/java/domain/Point.java +++ b/src/main/java/domain/Point.java @@ -14,7 +14,7 @@ private Point(int x, int y) { } - public static Point initPoint(int x, int y) { + public static Point newInstance(int x, int y) { if (x < 0 || x > 24 || y < 0 || y > 24) { throw new IllegalArgumentException(Constants.INPUT_RANGE_CHECK); @@ -27,7 +27,7 @@ public static Point inputStrSeparator(String inStr) { String[] values = inStr.replaceAll("[()]", "").split(","); - return initPoint(Integer.parseInt(values[0]), Integer.parseInt(values[1])); + return newInstance(Integer.parseInt(values[0]), Integer.parseInt(values[1])); } diff --git a/src/main/java/domain/Points.java b/src/main/java/domain/Points.java index 06a6617b..455bf980 100644 --- a/src/main/java/domain/Points.java +++ b/src/main/java/domain/Points.java @@ -10,7 +10,7 @@ private Points(List points) { this.points = points; } - public static Points initPoints(List points) { + public static Points newInstance(List points) { return new Points(points); } diff --git a/src/test/java/study/CalculatorTest.java b/src/test/java/study/CalculatorTest.java deleted file mode 100644 index c393c3b8..00000000 --- a/src/test/java/study/CalculatorTest.java +++ /dev/null @@ -1,119 +0,0 @@ -package study; - -import Figure.Line; -import Figure.Square; -import Figure.Triangle; -import domain.*; -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import utils.Constants; -import view.InputView; - -import java.util.ArrayList; -import java.util.List; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -public class CalculatorTest { - - // 좌표 정보는 괄호"(", ")"로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분 - @Test - @DisplayName("입력 좌표 포맷을 확인") - void 입력_좌표_포맷_Test() { - - Throwable exception1 = assertThrows(RuntimeException.class, () -> { - InputView.validInputFormat("(3,4)"); - }); - assertEquals(Constants.INPUT_FORMAT_CHECK, exception1.getMessage()); - - InputView.validInputFormat("(3,4)-(3,5)"); - - Throwable exception3 = assertThrows(RuntimeException.class, () -> { - InputView.validInputFormat("(3,4)-(3,5)-(3,6)-(3,7)"); - }); - assertEquals(Constants.INPUT_FORMAT_CHECK, exception3.getMessage()); - - Throwable exception4 = assertThrows(RuntimeException.class, () -> { - InputView.validInputFormat("(3,4)-(3,5,8)"); - }); - assertEquals(Constants.INPUT_FORMAT_CHECK, exception4.getMessage()); - - Throwable exception5 = assertThrows(RuntimeException.class, () -> { - InputView.validInputFormat("(3,4)-(3,g)"); - }); - assertEquals(Constants.INPUT_FORMAT_CHECK, exception5.getMessage()); - - } - - // X, Y좌표 모두 최대 24까지만 입력 - @Test - @DisplayName("입력_좌표_범위_확인") - void 입력_좌표_범위_Test() { - - Point.initPoint(0, 24); - - Throwable exception = assertThrows(RuntimeException.class, () -> { - Point.initPoint(-1, 24); - }); - assertEquals(Constants.INPUT_RANGE_CHECK, exception.getMessage()); - - Throwable exception2 = assertThrows(RuntimeException.class, () -> { - Point.initPoint(0, 25); - }); - assertEquals(Constants.INPUT_RANGE_CHECK, exception2.getMessage()); - - } - - // 선 길이 - @Test - @DisplayName("선_길이_확인") - void 선_길이_Test() { - - List points = new ArrayList<>(); - - points.add(Point.initPoint(10, 10)); - points.add(Point.initPoint(10, 15)); - - Line line = new Line(Points.initPoints(points)); - double len = line.calculate(); - Assertions.assertThat(5.0).isEqualTo(len); - - } - - // 사각형 넓이 - @Test - @DisplayName("사각형_넓이_확인") - void 사각형_넓이_Test() { - - List points = new ArrayList<>(); - - points.add(Point.initPoint(10, 10)); - points.add(Point.initPoint(10, 15)); - points.add(Point.initPoint(15, 15)); - points.add(Point.initPoint(15, 10)); - - Square square = new Square(Points.initPoints(points)); - double area = square.calculate(); - Assertions.assertThat(25.0).isEqualTo(area); - - } - - // 삼각형 - @Test - @DisplayName("삼각형_넓이_확인") - void 삼각형_넓이_Test() { - - List points = new ArrayList<>(); - - points.add(Point.initPoint(0, 10)); - points.add(Point.initPoint(0, 0)); - points.add(Point.initPoint(10, 0)); - - Triangle triangle = new Triangle(Points.initPoints(points)); - double area = triangle.calculate(); - Assertions.assertThat(50.0).isEqualTo(area); - - } -} diff --git a/src/test/java/study/InputFormatTest.java b/src/test/java/study/InputFormatTest.java new file mode 100644 index 00000000..53a1d9a5 --- /dev/null +++ b/src/test/java/study/InputFormatTest.java @@ -0,0 +1,99 @@ +package study; + +import domain.*; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import utils.Constants; +import view.InputView; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class InputFormatTest { + + // 좌표 정보는 괄호"(", ")"로 둘러쌓여 있으며 쉼표(,)로 x값과 y값을 구분 + @Test + @DisplayName("입력 좌표 포맷 정상 확인") + void 입력_좌표_포맷_정상_Test() { + + InputView.validInputFormat("(3,4)-(3,5)"); + + } + + @Test + @DisplayName("하나의 입력 좌표 포맷을 확인") + void 하나의_입력_좌표_포맷_Test() { + + Throwable exception1 = assertThrows(RuntimeException.class, () -> { + InputView.validInputFormat("(3,4)"); + }); + + assertEquals(Constants.INPUT_FORMAT_CHECK, exception1.getMessage()); + + } + + @Test + @DisplayName("여러개의 입력 좌표 포맷을 확인") + void 여러개_입력_좌표_포맷_Test() { + + Throwable exception3 = assertThrows(RuntimeException.class, () -> { + InputView.validInputFormat("(3,4)-(3,5)-(3,6)-(3,7)"); + }); + assertEquals(Constants.INPUT_FORMAT_CHECK, exception3.getMessage()); + + } + + @Test + @DisplayName("입력 좌표(x,y) 포맷을 확인") + void 입력_좌표_두자리_포맷_Test() { + + Throwable exception4 = assertThrows(RuntimeException.class, () -> { + InputView.validInputFormat("(3,4)-(3,5,8)"); + }); + assertEquals(Constants.INPUT_FORMAT_CHECK, exception4.getMessage()); + + } + + @Test + @DisplayName("입력 좌표 숫자 포맷을 확인") + void 입력_좌표_숫자_포맷_Test() { + + Throwable exception5 = assertThrows(RuntimeException.class, () -> { + InputView.validInputFormat("(3,4)-(3,g)"); + }); + assertEquals(Constants.INPUT_FORMAT_CHECK, exception5.getMessage()); + + } + + @Test + @DisplayName("입력_좌표_범위_정상_확인") + void 입력_좌표_정상_범위_Test() { + + Point.newInstance(0, 24); + + } + + @Test + @DisplayName("입력_좌표X_0_24범위_확인") + void 입력_좌표X_0_24범위_Test() { + + Throwable exception = assertThrows(RuntimeException.class, () -> { + Point.newInstance(-1, 24); + }); + assertEquals(Constants.INPUT_RANGE_CHECK, exception.getMessage()); + + } + + @Test + @DisplayName("입력_좌표Y_0_24범위_확인") + void 입력_좌표Y_범위_Test() { + + Throwable exception2 = assertThrows(RuntimeException.class, () -> { + Point.newInstance(0, 25); + }); + assertEquals(Constants.INPUT_RANGE_CHECK, exception2.getMessage()); + + } + + +} diff --git a/src/test/java/study/LineTest.java b/src/test/java/study/LineTest.java new file mode 100644 index 00000000..5329dfd3 --- /dev/null +++ b/src/test/java/study/LineTest.java @@ -0,0 +1,29 @@ +package study; + +import Figure.Line; +import domain.Point; +import domain.Points; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +public class LineTest { + + @Test + @DisplayName("선_길이_확인") + void 선_길이_Test() { + + List points = new ArrayList<>(); + + points.add(Point.newInstance(10, 10)); + points.add(Point.newInstance(10, 15)); + + Line line = new Line(Points.newInstance(points)); + double len = line.calculate(); + Assertions.assertThat(5.0).isEqualTo(len); + + } +} diff --git a/src/test/java/study/SquareTest.java b/src/test/java/study/SquareTest.java new file mode 100644 index 00000000..3d792236 --- /dev/null +++ b/src/test/java/study/SquareTest.java @@ -0,0 +1,31 @@ +package study; + +import Figure.Square; +import domain.Point; +import domain.Points; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +public class SquareTest { + + @Test + @DisplayName("사각형_넓이_확인") + void 사각형_넓이_Test() { + + List points = new ArrayList<>(); + + points.add(Point.newInstance(10, 10)); + points.add(Point.newInstance(10, 15)); + points.add(Point.newInstance(15, 15)); + points.add(Point.newInstance(15, 10)); + + Square square = new Square(Points.newInstance(points)); + double area = square.calculate(); + Assertions.assertThat(25.0).isEqualTo(area); + + } +} diff --git a/src/test/java/study/TriangleTest.java b/src/test/java/study/TriangleTest.java new file mode 100644 index 00000000..27c7673e --- /dev/null +++ b/src/test/java/study/TriangleTest.java @@ -0,0 +1,29 @@ +package study; + +import Figure.Triangle; +import domain.Point; +import domain.Points; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +public class TriangleTest { + @Test + @DisplayName("삼각형_넓이_확인") + void 삼각형_넓이_Test() { + + List points = new ArrayList<>(); + + points.add(Point.newInstance(0, 10)); + points.add(Point.newInstance(0, 0)); + points.add(Point.newInstance(10, 0)); + + Triangle triangle = new Triangle(Points.newInstance(points)); + double area = triangle.calculate(); + Assertions.assertThat(50.0).isEqualTo(area); + + } +}