Skip to content

Commit 99959e7

Browse files
committed
Refactor: RandomUtil, Controller, DTO 추가 및 책임 분배
1 parent 083c07e commit 99959e7

File tree

8 files changed

+76
-26
lines changed

8 files changed

+76
-26
lines changed

src/main/java/Application.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
import domain.Ladder;
1+
import controller.LadderController;
2+
import dto.LadderDto;
23
import utils.exception.ExceptionHandler;
34
import view.LadderView;
45

56
public class Application {
67
public static void main(String[] args) {
78
try {
8-
Ladder ladder = Ladder.of(4, 4);
9-
LadderView.printLadder(ladder);
9+
LadderController ladderController = new LadderController(4, 4);
10+
LadderDto ladderDto = ladderController.getLadderData();
11+
LadderView.printLadder(ladderDto);
1012
} catch (Exception e) {
1113
ExceptionHandler.handleException(e);
1214
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package controller;
2+
3+
import domain.Ladder;
4+
import dto.LadderDto;
5+
6+
public class LadderController {
7+
private final Ladder ladder;
8+
9+
public LadderController(int width, int height) {
10+
this.ladder = Ladder.of(width, height);
11+
}
12+
13+
public LadderDto getLadderData() {
14+
return LadderDto.from(ladder);
15+
}
16+
}

src/main/java/dto/LadderDto.java

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package dto;
2+
3+
import domain.Ladder;
4+
import domain.Line;
5+
import java.util.List;
6+
import java.util.stream.Collectors;
7+
8+
public class LadderDto {
9+
private final List<List<Boolean>> ladderData;
10+
11+
public LadderDto(List<List<Boolean>> ladderData) {
12+
this.ladderData = ladderData;
13+
}
14+
15+
public static LadderDto from(Ladder ladder) {
16+
return new LadderDto(
17+
ladder.getLines().getLines().stream()
18+
.map(Line::getPoints)
19+
.collect(Collectors.toList())
20+
);
21+
}
22+
23+
public List<List<Boolean>> getLadderData() {
24+
return ladderData;
25+
}
26+
}

src/main/java/utils/RandomUtil.java

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package utils;
2+
3+
import java.util.Random;
4+
5+
public class RandomUtil {
6+
public static final Random random = new Random();
7+
8+
public static boolean nextBoolean() {
9+
return random.nextBoolean();
10+
}
11+
12+
public static int nextInt(int bound) {
13+
return random.nextInt(bound);
14+
}
15+
}

src/main/java/utils/generator/ReservedPositionGenerator.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
11
package utils.generator;
22

3+
import utils.RandomUtil;
34
import java.util.HashSet;
45
import java.util.List;
5-
import java.util.Random;
66
import java.util.Set;
77
import java.util.stream.Collectors;
88
import java.util.stream.IntStream;
99

1010
public class ReservedPositionGenerator {
11-
private static final Random RANDOM = new Random();
12-
1311
public static List<Set<Integer>> generate(int width, int height) {
1412
List<Set<Integer>> reserved = IntStream.range(0, height)
1513
.mapToObj(i -> new HashSet<Integer>())
1614
.collect(Collectors.toList());
1715

1816
IntStream.range(0, width)
19-
.forEach(i -> reserved.get(RANDOM.nextInt(height)).add(i));
17+
.forEach(i -> reserved.get(RandomUtil.nextInt(height)).add(i));
2018

2119
return reserved;
2220
}

src/main/java/utils/generator/SingleLineGenerator.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package utils.generator;
22

33
import domain.Line;
4+
import utils.RandomUtil;
5+
46
import java.util.*;
57
import java.util.stream.IntStream;
68

79
public class SingleLineGenerator {
8-
private static final Random RANDOM = new Random();
9-
1010
public static Line generate(int width, Set<Integer> reserved, Line prev) {
1111
List<Boolean> points = new ArrayList<>(Collections.nCopies(width, false));
1212

@@ -18,7 +18,7 @@ public static Line generate(int width, Set<Integer> reserved, Line prev) {
1818

1919
IntStream.range(0, width).forEach(i -> {
2020
if (!points.get(i) && isNotOverlap(points, prev, i)) {
21-
points.set(i, RANDOM.nextBoolean());
21+
points.set(i, RandomUtil.nextBoolean());
2222
}
2323
});
2424

src/main/java/utils/validator/LadderValidator.java

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
package utils.validator;
22

33
import domain.Line;
4+
import utils.RandomUtil;
45
import java.util.List;
5-
import java.util.Random;
66
import java.util.stream.IntStream;
77

8-
98
public class LadderValidator {
10-
private static final Random RANDOM = new Random();
11-
129
public static void validate(List<Line> lines, int width) {
1310
IntStream.rangeClosed(0, width)
1411
.forEach(i -> validateColumn(lines, i, width));
@@ -17,7 +14,7 @@ public static void validate(List<Line> lines, int width) {
1714
private static void validateColumn(List<Line> lines, int col, int width) {
1815
boolean emptyColumn = lines.stream().noneMatch(line -> hasBridgeAt(line, col, width));
1916
if (emptyColumn) {
20-
connect(lines.get(RANDOM.nextInt(lines.size())), col, width);
17+
connect(lines.get(RandomUtil.nextInt(lines.size())), col, width);
2118
}
2219
}
2320

src/main/java/view/LadderView.java

+7-11
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,21 @@
11
package view;
22

3-
import domain.Ladder;
4-
import domain.Lines;
5-
import domain.Line;
3+
import dto.LadderDto;
4+
5+
import java.util.List;
66

77
public class LadderView {
88
private static final String BRIDGE = "-----|";
99
private static final String SPACE = " |";
1010
private static final String BAR = "|";
1111

12-
public static void printLadder(Ladder ladder) {
13-
printLines(ladder.getLines());
14-
}
15-
16-
private static void printLines(Lines lines) {
17-
lines.getLines().forEach(LadderView::printLine);
12+
public static void printLadder(LadderDto ladderDto) {
13+
ladderDto.getLadderData().forEach(LadderView::printLine);
1814
}
1915

20-
private static void printLine(Line line) {
16+
private static void printLine(List<Boolean> line) {
2117
System.out.print(BAR);
22-
line.getPoints().forEach(LadderView::printPoint);
18+
line.forEach(LadderView::printPoint);
2319
System.out.println();
2420
}
2521

0 commit comments

Comments
 (0)