From 110778ceac05db96b7b3a74eab27df8728768ef4 Mon Sep 17 00:00:00 2001 From: Huniiiiiii Date: Tue, 1 Apr 2025 12:26:57 +0900 Subject: [PATCH 1/7] =?UTF-8?q?[fix]=20AsciiGenerator=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EC=BD=94=EB=93=9C=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/mission/utils/AsciiGenerator.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/mission/utils/AsciiGenerator.java b/src/main/java/mission/utils/AsciiGenerator.java index 2498d7e..03e15cc 100644 --- a/src/main/java/mission/utils/AsciiGenerator.java +++ b/src/main/java/mission/utils/AsciiGenerator.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.Arrays; public class AsciiGenerator { private final List> data; @@ -24,7 +25,12 @@ public AsciiGenerator() { getClass().getClassLoader().getResource("numberAsciiDesign/" + fileName + ".txt") ).toURI()); String content = Files.readString(path); - data.add(List.of(content.split("\n"))); + + List paddedLines = Arrays.stream(content.split("\n")) + .map(line -> String.format("%-3s", line)) + .toList(); + + data.add(paddedLines); } catch (URISyntaxException | IOException e) { throw new IllegalStateException("[ERROR] 아스키아트를 로드하지 못했습니다."); } From 48f7baa407ce850e6e35be262c09170603d5d073 Mon Sep 17 00:00:00 2001 From: Huniiiiiii Date: Sun, 6 Apr 2025 22:27:49 +0900 Subject: [PATCH 2/7] =?UTF-8?q?[feat]=20Model=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/mission/model/ink.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/mission/model/ink.java diff --git a/src/main/java/mission/model/ink.java b/src/main/java/mission/model/ink.java new file mode 100644 index 0000000..9c7d3ae --- /dev/null +++ b/src/main/java/mission/model/ink.java @@ -0,0 +1,22 @@ +package mission.model; + +public class ink { + private int ink = 1000; + + public int getInk() { + return ink; + } + + public void minusInk() { + + if (ink <= 0) { + throw new IllegalStateException("[ERROR] 잉크가 부족해 출력을 중단합니다."); + } + this.ink -= 1; + + } + + public void refillInk() { + this.ink = 1000; + } +} From 173033d2d376a8c9714f5821aadcce4a7a7f398c Mon Sep 17 00:00:00 2001 From: Huniiiiiii Date: Sun, 6 Apr 2025 22:28:34 +0900 Subject: [PATCH 3/7] =?UTF-8?q?[feat]=20Controller=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission/controller/printerController.java | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 src/main/java/mission/controller/printerController.java diff --git a/src/main/java/mission/controller/printerController.java b/src/main/java/mission/controller/printerController.java new file mode 100644 index 0000000..99eb170 --- /dev/null +++ b/src/main/java/mission/controller/printerController.java @@ -0,0 +1,112 @@ +package mission.controller; + +import mission.model.ink; +import mission.utils.AsciiGenerator; +import mission.view.printerView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class printerController { + private final AsciiGenerator generator; + private final ink inkManager; + private final printerView view; + private static final int LINE_COUNT = 5; + private final Map menuMap = new HashMap<>(); + + public printerController(AsciiGenerator generator, ink inkManager, printerView view) { + this.generator = generator; + this.inkManager = inkManager; + this.view = view; + initMenu(); + } + + public void run() { + while (true) { + view.printMenu(); + String input = view.input(""); + if (input.equals("4")) return; + Runnable action = menuMap.get(input); + if (action != null) action.run(); + } + } + + private void initMenu() { + menuMap.put("1", this::handlePrint); + menuMap.put("2", this::handleInkCheck); + menuMap.put("3", this::handleInkRefill); + } + + private void handlePrint() { + String text = view.input("출력할 문자를 입력해주세요. "); + int size = view.paperSize("용지 크기를 입력해주세요. "); + printAsciiHorizontally(text, size); + view.showMessage("출력이 완료되었습니다. "); + } + + private void handleInkCheck() { + int amount = inkManager.getInk(); + view.showMessage(String.format("잉크 잔량 : %d/1000", amount)); + } + + private void handleInkRefill() { + inkManager.refillInk(); + view.showMessage("잉크를 교체하였습니다. "); + } + + public void printAsciiHorizontally(String input, int paperSize) { + int start = 0; + while (start < input.length()) { + int end = Math.min(start + paperSize, input.length()); + printOneLine(input.substring(start, end)); + start = end; + } + } + + private void printOneLine(String input) { + List lines = initLines(); + try { + buildAsciiLines(input, lines); + printLines(lines); + } catch (IllegalStateException e) { + view.showMessage(e.getMessage()); + } + } + + private void buildAsciiLines(String input, List lines) { + for (char ch : input.toCharArray()) { + if (ch == ' ') { + appendSpace(lines); + continue; + } + inkManager.minusInk(); + appendAscii(lines, ch); + } + } + + private List initLines() { + List lines = new ArrayList<>(); + for (int i = 0; i < LINE_COUNT; i++) lines.add(new StringBuilder()); + return lines; + } + + private void appendAscii(List lines, char ch) { + int num = Character.getNumericValue(ch); + List ascii = generator.getNumberAsciiDesign(num); + for (int i = 0; i < ascii.size(); i++) { + lines.get(i).append(String.format("%s ", ascii.get(i))); + } + } + + private void appendSpace(List lines) { + for (int i = 0; i < LINE_COUNT; i++) { + lines.get(i).append(String.format("%s ", " ")); + } + } + + private void printLines(List lines) { + for (StringBuilder line : lines) System.out.println(line); + } +} From 8a2b2ef1558c89a0f48f4d623c5d9a130b09256e Mon Sep 17 00:00:00 2001 From: Huniiiiiii Date: Sun, 6 Apr 2025 22:29:13 +0900 Subject: [PATCH 4/7] =?UTF-8?q?[feat]=20view=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/mission/view/printerView.java | 29 +++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/mission/view/printerView.java diff --git a/src/main/java/mission/view/printerView.java b/src/main/java/mission/view/printerView.java new file mode 100644 index 0000000..5145a5a --- /dev/null +++ b/src/main/java/mission/view/printerView.java @@ -0,0 +1,29 @@ +package mission.view; + +import java.util.Scanner; + +public class printerView { + private final Scanner scanner = new Scanner(System.in); + + public void printMenu(){ + System.out.println("프린터를 실행합니다."); + System.out.print("사용할 기능을 입력해주세요. 1) 출력, 2) 잉크 잔량 확인, 3) 잉크 교체, 4) 프로그램 종료"); + } + + public String input(String message){ + System.out.println(message); + return scanner.nextLine(); + } + + public void showMessage(String message){ + System.out.println(message); + } + + public int paperSize(String message){ + System.out.println(message); + int value = scanner.nextInt(); + scanner.nextLine(); // 버퍼에 남아있는 \n 제거 + return value; + } + +} From 7d64c49362dbc2807386bb7283c05379760057d4 Mon Sep 17 00:00:00 2001 From: Huniiiiiii Date: Sun, 6 Apr 2025 22:30:11 +0900 Subject: [PATCH 5/7] =?UTF-8?q?[feat]=20Application=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/gradle.xml | 1 + .idea/misc.xml | 2 +- .idea/runConfigurations/Application.xml | 2 +- src/main/java/mission/Application.java | 10 +++++++++- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index ce1c62c..f2c1963 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -5,6 +5,7 @@