์ฐ์ํํ ํฌ์ฝ์ค ์ฌ๋ค๋ฆฌ ๊ฒ์ ๋ฏธ์ ์ ์งํํ๋ฉฐ ๊ฐ์ฅ ๋ง์ด ๊ณ ๋ฏผํ๋ ๋ด์ฉ์ ๊ณต์ ํ๋ ค๊ณ ํ๋ค.
1. ๊ณ ๋ฏผ
์ฌ๋ค๋ฆฌ ๊ฒ์ ๋ฏธ์ ์ ๊ตฌํํ๋ฉด์ ๊ฐ์ฅ ๋ง์ด ๊ณ ๋ฏผํ ๋ถ๋ถ์ โ๊ฐ์ฒด๊ฐ ํ๋๋ก ๊ฐ๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ์ด๋์์ ์์ฑํด์ฃผ์ด์ผ ํ ์งโ ์ด๋ค.
ํ๋์ ์์ฑ๋ '์ฌ๋ค๋ฆฌ'๋ผ๋ ๊ฐ์ฒด๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋ง์ ๋ถํ๋ค์ด ํ์ํ๋ค. (์์ง 2์ฃผ์ฐจ ๋ณ์๋ฆฌ์ด๊ธฐ ๋๋ฌธ์..) ์ด๋ฌํ ๊ฐ์ฒด๋ฅผ ์ด๋์ ์์ฑํด์ผ ํ ์ง ์กฐ์ฐจ ํ์คํ๊ฒ ๋ต์ ๋ด๋ฆฌ๊ธฐ ์ด๋ ค์ ๋ค.
๋จผ์ ์ฌ๋ค๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๋์ง ๋ถํฐ ์ดํด๋ณด์.
1.1. ์ฌ๋ค๋ฆฌ ๊ตฌ์ฑ
์ฌ๋ค๋ฆฌ(Ladder
) ํ๋๋ ๋๋ค๋๋ค(Lines
)์ด ๋ชจ์ฌ์ ๋ง๋ค์ด์ง๋ค.
๋๋ค๋ ํ๋(Line
)๋ ๋๋ค๋ ์กด์ฌ ์ ๋ฌด์ ์ํ๋ค(List<LineStatus>
)์ด ๋ชจ์ฌ์ ๋ง๋ค์ด์ง๋ค. (LineStatus
๋ boolean ๊ฐ์ด๋ค.)
๊ทธ๋ ๋ค๋ฉด ์ฌ๋ค๋ฆฌ ํ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋
1๏ธโฃ ๋๋ค๋ ์กด์ฌ ์ ๋ฌด์ ์ํ๋ค์ด ๋ชจ์ฌ ๋๋ค๋ ํ๋๋ฅผ ๋ง๋ค๊ณ
2๏ธโฃ ๊ทธ๊ฒ์ ์ฌ๋ค๋ฆฌ์ ํค(Height
)๋งํผ ๋ฐ๋ณตํ์ฌ
3๏ธโฃ ๋๋ค๋๋ค์ ๋ง๋ค์ด ์ฌ๋ค๋ฆฌ๊ฐ ๊ฐ๊ณ ์๋๊ฒ์ด๋ค.
1.2. ๋ฆฌํฉํ ๋ง ์
์ฒ์ ๊ตฌํ์ ํ ๋, ๊ฐ ๊ฐ์ฒด๊ฐ์ ๊ด๊ณ๋ ์์กด์ ์ผ ์ ๋ฐ์ ์๋ค๊ณ ์๊ฐํ๋ค. Ladder
๊ฐ ์์ผ๋ ค๋ฉด Lines
๊ฐ ์์ด์ผ ํ๋๊น ๊ทธ๊ฑธ Ladder
๊ฐ ๋ง๋ค์ด์ผ ๋๋ ๊ฑฐ ์๋๊ฐ? ๋ผ๋ ์๊ฐ..
๊ทธ๋์ Ladder
์์ Lines
๋ฅผ ์์ฑํ๊ณ , Lines
์์์ Line
์ ์์ฑํ๊ณ , Line
์์์ LineStatus
๋ฅผ ์์ฑํ๋๋ก (์์ฃผ์์ฃผ ์์กด์ ์ด๊ฒ) ๊ตฌํ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ๋ถ์์ new Ladder()
๋ง ํ๋ฉด ๊ฐ๋จํ ์ผ ์๋๊ฐ! ๋ผ๊ณ ์๊ฐํ๋ค.
์ฒ์ ๊ตฌํํ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ๋ฌธ์ ์ ์ ์ฐพ์๋ณด์.
public class Ladder {
private Lines lines;
private final int numberOfWalls;
private final Height height;
public Ladder(int numberOfWalls, Height height, LineGenerator lineGenerator) {
this.numberOfWalls = numberOfWalls;
this.height = height;
this.lines = new Lines(numberOfWalls, height, lineGenerator);
}
}
public class Lines {
private List<Line> lines;
public Lines(int numberOfWalls, Height height, LineGenerator lineGenerator) {
makeLines(numberOfWalls, height, lineGenerator);
}
public void makeLines(int numberOfWalls, Height height, LineGenerator lineGenerator) {
this.lines = new ArrayList<>();
for (int i = 0; i < height.getHeight(); i++) {
lines.add(new Line(numberOfWalls - 1, lineGenerator));
}
}
}
public class Line {
private List<LineStatus> line = new ArrayList<>();
public Line(int numberOfLine, LineGenerator lineGenerator) {
this.numberOfLine = numberOfLine;
makeLine(numberOfLine, lineGenerator);
}
private void makeLine(int numberOfLine, LineGenerator lineGenerator) {
// ๋ก์ง ์ผ๋ถ๋ถ
for (int i = 1; i < this.numberOfLine; i++) {
int leftIndex = i - 1;
line.add(LineStatus.findBy(lineGenerator.generate(line.get(leftIndex).getStatus())));
}
}
}
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด Ladder
์์ฑ์์์ Lines
๋ฅผ ์์ฑํ๋ค. Ladder
์์ฑ์์์ ๋ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณ ๋ค๋ฅธ ์ฌ์ฉ ์์ด ๊ทธ๋๋ก Lines
์์ฑ์์ ์ ๋ฌํ๋ค. ๋ Lines
์์ฑ์์์ ๊ทธ ๋งค๊ฐ๋ณ์๋ฅผ Line
์์ฑ์์ ์ ๋ฌํ๋ค.
์ด๋ Ladder
๊ฐ Lines
์ ์์กดํ๋ค๋ผ๊ณ ํ๋ค. ๋ Lines
๋ Line
์ ์์กดํ๋ค๋ผ๊ณ ํ๋ค.
Ladder
์์ ๋ถํฐ ์ ๋ฌ๋ numberOfWall
๊ณผ lineGenerator
์ ์ฌ์ฉ์ ์ค์ง์ ์ผ๋ก ๊ฐ์ฅ ํ์ ๊ฐ์ฒด์ธ Line
์์ ์ฌ์ฉํ๋ค.
1.3. ๋ฌธ์ ์
์ฌ๊ธฐ์ ๋ฌด์จ ๋ฌธ์ ์ ์ด ์์๊น?
๋ง์ฝ Line
์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ๋ณ๊ฒฝ๋์ด ์์ฑ์์ ํ๋ผ๋ฏธํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น??
Line
์ ์์ ์ผ๋ก ์ธํด Lines
์ Ladder
๋ชจ๋ ์์ ์ ํด์ผํ๋ ์ํฅ์ ๋ผ์น๋ค.
๋ ์ธ๋ถ์์ Ladder
๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ดค์ ๋, ์ numberOfWall
๊ณผ lineGenerator
๋ฅผ ๊ฐ์ ธ์ผ ํ๋์ง ์๋ฌธ์ด ๋ค ๊ฒ ๊ฐ๋ค.
2. ํด๊ฒฐ๋ฐฉ๋ฒ
์ด๋ฌํ ์์กด๊ด๊ณ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ธ๋ถ์์ ์ฃผ์ ํด์ฃผ๋ ๋ฐฉ์์ด ์๋ค!
2.1. ๋ฆฌํฉํ ๋ง ํ
public class Line {
private final List<LineStatus> lineStatuses;
public Line(List<LineStatus> lineStatuses) {
validateEmptyLineStatus(lineStatuses);
this.lineStatuses = lineStatuses;
}
// ์๋ต ..
}
Line
์์ LineStatus
๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ , Line
์์ฑ์ ์ธ๋ถ์์ ์ฃผ์
ํด์ค๋ค.
public class Lines {
private final List<Line> lines;
public Lines(List<Line> lines) {
this.lines = new ArrayList<>(lines);
}
// ์๋ต ..
}
๋ง๋ค์ด์ง Line
๋ค๋ก Lines
์์ฑ์ ์ธ๋ถ์์ ์ฃผ์
ํด์ค๋ค.
public class Ladder {
private final Lines ladder;
private final Height height;
public Ladder(Lines ladder, Height height) {
this.ladder = ladder;
this.height = height;
}
// ์๋ต ..
}
๋ง๋ค์ด์ง Lines
๋ฅผ ์ต์ข
์ ์ผ๋ก Ladder
์์ฑ์ ์ธ๋ถ์์ ์ฃผ์
ํด์ค๋ค!
์ธ๋ถ์์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณผ ๋๋,
- Ladder๋ Lines์ Height๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- Lines๋ Line๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- Line์ LineStatus๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
๋ผ๊ณ ์์ฐ์ค๋ฝ๊ฒ ํด์ํ ์ ์๋ค.
๋ ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ์ด ๋์ด๋, ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ ํ ํ์๋ ์๋ค.
2.2. ๊ฐ์ฒด ์์ฑ ํด๋์ค
์ถ๊ฐ์ ์ผ๋ก LineStatus
๋ฅผ ๋ง๋๋ ์ญํ ์ ๋๊ฐ ํด์ฃผ๋ ๊ฒ ์ข์๊น?
LineStatus
๋ LineGenerator
๋ฅผ ์ด์ฉํด ๋๋ค์ผ๋ก boolean๊ฐ์ ๋ฐ์์ ์์ฑํ๋ค. ๊ทธ ์ญํ ์ ํ๋ ๊ฐ์ฒด๋ ๋๊ฐ์ข์๊น?
public class LineMaker {
private final LineGenerator lineGenerator;
public LineMaker(LineGenerator lineGenerator) {
this.lineGenerator = lineGenerator;
}
public List<LineStatus> makeLineStatus(int numberOfLine) {
List<LineStatus> lineStatuses = new ArrayList<>();
makeFirstLineStatus(lineStatuses);
makeElseLineStatus(lineStatuses, numberOfLine);
return lineStatuses;
}
// ์๋ต ..
}
LineMaker
๋ผ๋ ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค์๋ค.
Line
์ ๋ง๋ค๊ธฐ ์ํด ํ์ํ LineGenerator
๋ฅผ ์์ฑ์์ ์ฃผ์
ํด์ค๋ค.
๋งจ ์ฒ์ ๊ตฌํํ ์ฝ๋์์ Ladder
์์๋ถํฐ ๋ฐ๋ผ๋ค๋๋ LineGenerator
๋ฅผ LineMaker
์๋ง ์ ๋ฌํด์ฃผ๋๋ก ํ์ฌ ์กฐ๊ธ ๋ ๊น๋ํ๊ณ ๊ฐ๋
์ฑ ์ข์ ์ฝ๋๊ฐ ๋์๋ค!
์ฐธ๊ณ ์๋ฃ - ์์กด๊ด๊ณ ์ฃผ์ (Dependency Injection) ์ฝ๊ฒ์ดํดํ๊ธฐ
์ฐ์ํํ ํฌ์ฝ์ค ์ฌ๋ค๋ฆฌ ๊ฒ์ ๋ฏธ์ ์ ์งํํ๋ฉฐ ๊ฐ์ฅ ๋ง์ด ๊ณ ๋ฏผํ๋ ๋ด์ฉ์ ๊ณต์ ํ๋ ค๊ณ ํ๋ค.
1. ๊ณ ๋ฏผ
์ฌ๋ค๋ฆฌ ๊ฒ์ ๋ฏธ์ ์ ๊ตฌํํ๋ฉด์ ๊ฐ์ฅ ๋ง์ด ๊ณ ๋ฏผํ ๋ถ๋ถ์ โ๊ฐ์ฒด๊ฐ ํ๋๋ก ๊ฐ๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ์ด๋์์ ์์ฑํด์ฃผ์ด์ผ ํ ์งโ ์ด๋ค.
ํ๋์ ์์ฑ๋ '์ฌ๋ค๋ฆฌ'๋ผ๋ ๊ฐ์ฒด๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋ง์ ๋ถํ๋ค์ด ํ์ํ๋ค. (์์ง 2์ฃผ์ฐจ ๋ณ์๋ฆฌ์ด๊ธฐ ๋๋ฌธ์..) ์ด๋ฌํ ๊ฐ์ฒด๋ฅผ ์ด๋์ ์์ฑํด์ผ ํ ์ง ์กฐ์ฐจ ํ์คํ๊ฒ ๋ต์ ๋ด๋ฆฌ๊ธฐ ์ด๋ ค์ ๋ค.
๋จผ์ ์ฌ๋ค๋ฆฌ๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๋์ง ๋ถํฐ ์ดํด๋ณด์.
1.1. ์ฌ๋ค๋ฆฌ ๊ตฌ์ฑ
์ฌ๋ค๋ฆฌ(Ladder
) ํ๋๋ ๋๋ค๋๋ค(Lines
)์ด ๋ชจ์ฌ์ ๋ง๋ค์ด์ง๋ค.
๋๋ค๋ ํ๋(Line
)๋ ๋๋ค๋ ์กด์ฌ ์ ๋ฌด์ ์ํ๋ค(List<LineStatus>
)์ด ๋ชจ์ฌ์ ๋ง๋ค์ด์ง๋ค. (LineStatus
๋ boolean ๊ฐ์ด๋ค.)
๊ทธ๋ ๋ค๋ฉด ์ฌ๋ค๋ฆฌ ํ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋
1๏ธโฃ ๋๋ค๋ ์กด์ฌ ์ ๋ฌด์ ์ํ๋ค์ด ๋ชจ์ฌ ๋๋ค๋ ํ๋๋ฅผ ๋ง๋ค๊ณ
2๏ธโฃ ๊ทธ๊ฒ์ ์ฌ๋ค๋ฆฌ์ ํค(Height
)๋งํผ ๋ฐ๋ณตํ์ฌ
3๏ธโฃ ๋๋ค๋๋ค์ ๋ง๋ค์ด ์ฌ๋ค๋ฆฌ๊ฐ ๊ฐ๊ณ ์๋๊ฒ์ด๋ค.
1.2. ๋ฆฌํฉํ ๋ง ์
์ฒ์ ๊ตฌํ์ ํ ๋, ๊ฐ ๊ฐ์ฒด๊ฐ์ ๊ด๊ณ๋ ์์กด์ ์ผ ์ ๋ฐ์ ์๋ค๊ณ ์๊ฐํ๋ค. Ladder
๊ฐ ์์ผ๋ ค๋ฉด Lines
๊ฐ ์์ด์ผ ํ๋๊น ๊ทธ๊ฑธ Ladder
๊ฐ ๋ง๋ค์ด์ผ ๋๋ ๊ฑฐ ์๋๊ฐ? ๋ผ๋ ์๊ฐ..
๊ทธ๋์ Ladder
์์ Lines
๋ฅผ ์์ฑํ๊ณ , Lines
์์์ Line
์ ์์ฑํ๊ณ , Line
์์์ LineStatus
๋ฅผ ์์ฑํ๋๋ก (์์ฃผ์์ฃผ ์์กด์ ์ด๊ฒ) ๊ตฌํ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ๋ถ์์ new Ladder()
๋ง ํ๋ฉด ๊ฐ๋จํ ์ผ ์๋๊ฐ! ๋ผ๊ณ ์๊ฐํ๋ค.
์ฒ์ ๊ตฌํํ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ๋ฌธ์ ์ ์ ์ฐพ์๋ณด์.
public class Ladder {
private Lines lines;
private final int numberOfWalls;
private final Height height;
public Ladder(int numberOfWalls, Height height, LineGenerator lineGenerator) {
this.numberOfWalls = numberOfWalls;
this.height = height;
this.lines = new Lines(numberOfWalls, height, lineGenerator);
}
}
public class Lines {
private List<Line> lines;
public Lines(int numberOfWalls, Height height, LineGenerator lineGenerator) {
makeLines(numberOfWalls, height, lineGenerator);
}
public void makeLines(int numberOfWalls, Height height, LineGenerator lineGenerator) {
this.lines = new ArrayList<>();
for (int i = 0; i < height.getHeight(); i++) {
lines.add(new Line(numberOfWalls - 1, lineGenerator));
}
}
}
public class Line {
private List<LineStatus> line = new ArrayList<>();
public Line(int numberOfLine, LineGenerator lineGenerator) {
this.numberOfLine = numberOfLine;
makeLine(numberOfLine, lineGenerator);
}
private void makeLine(int numberOfLine, LineGenerator lineGenerator) {
// ๋ก์ง ์ผ๋ถ๋ถ
for (int i = 1; i < this.numberOfLine; i++) {
int leftIndex = i - 1;
line.add(LineStatus.findBy(lineGenerator.generate(line.get(leftIndex).getStatus())));
}
}
}
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด Ladder
์์ฑ์์์ Lines
๋ฅผ ์์ฑํ๋ค. Ladder
์์ฑ์์์ ๋ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณ ๋ค๋ฅธ ์ฌ์ฉ ์์ด ๊ทธ๋๋ก Lines
์์ฑ์์ ์ ๋ฌํ๋ค. ๋ Lines
์์ฑ์์์ ๊ทธ ๋งค๊ฐ๋ณ์๋ฅผ Line
์์ฑ์์ ์ ๋ฌํ๋ค.
์ด๋ Ladder
๊ฐ Lines
์ ์์กดํ๋ค๋ผ๊ณ ํ๋ค. ๋ Lines
๋ Line
์ ์์กดํ๋ค๋ผ๊ณ ํ๋ค.
Ladder
์์ ๋ถํฐ ์ ๋ฌ๋ numberOfWall
๊ณผ lineGenerator
์ ์ฌ์ฉ์ ์ค์ง์ ์ผ๋ก ๊ฐ์ฅ ํ์ ๊ฐ์ฒด์ธ Line
์์ ์ฌ์ฉํ๋ค.
1.3. ๋ฌธ์ ์
์ฌ๊ธฐ์ ๋ฌด์จ ๋ฌธ์ ์ ์ด ์์๊น?
๋ง์ฝ Line
์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ๋ณ๊ฒฝ๋์ด ์์ฑ์์ ํ๋ผ๋ฏธํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น??
Line
์ ์์ ์ผ๋ก ์ธํด Lines
์ Ladder
๋ชจ๋ ์์ ์ ํด์ผํ๋ ์ํฅ์ ๋ผ์น๋ค.
๋ ์ธ๋ถ์์ Ladder
๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ดค์ ๋, ์ numberOfWall
๊ณผ lineGenerator
๋ฅผ ๊ฐ์ ธ์ผ ํ๋์ง ์๋ฌธ์ด ๋ค ๊ฒ ๊ฐ๋ค.
2. ํด๊ฒฐ๋ฐฉ๋ฒ
์ด๋ฌํ ์์กด๊ด๊ณ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ธ๋ถ์์ ์ฃผ์ ํด์ฃผ๋ ๋ฐฉ์์ด ์๋ค!
2.1. ๋ฆฌํฉํ ๋ง ํ
public class Line {
private final List<LineStatus> lineStatuses;
public Line(List<LineStatus> lineStatuses) {
validateEmptyLineStatus(lineStatuses);
this.lineStatuses = lineStatuses;
}
// ์๋ต ..
}
Line
์์ LineStatus
๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ , Line
์์ฑ์ ์ธ๋ถ์์ ์ฃผ์
ํด์ค๋ค.
public class Lines {
private final List<Line> lines;
public Lines(List<Line> lines) {
this.lines = new ArrayList<>(lines);
}
// ์๋ต ..
}
๋ง๋ค์ด์ง Line
๋ค๋ก Lines
์์ฑ์ ์ธ๋ถ์์ ์ฃผ์
ํด์ค๋ค.
public class Ladder {
private final Lines ladder;
private final Height height;
public Ladder(Lines ladder, Height height) {
this.ladder = ladder;
this.height = height;
}
// ์๋ต ..
}
๋ง๋ค์ด์ง Lines
๋ฅผ ์ต์ข
์ ์ผ๋ก Ladder
์์ฑ์ ์ธ๋ถ์์ ์ฃผ์
ํด์ค๋ค!
์ธ๋ถ์์ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณผ ๋๋,
- Ladder๋ Lines์ Height๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- Lines๋ Line๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- Line์ LineStatus๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
๋ผ๊ณ ์์ฐ์ค๋ฝ๊ฒ ํด์ํ ์ ์๋ค.
๋ ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ์ด ๋์ด๋, ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ ํ ํ์๋ ์๋ค.
2.2. ๊ฐ์ฒด ์์ฑ ํด๋์ค
์ถ๊ฐ์ ์ผ๋ก LineStatus
๋ฅผ ๋ง๋๋ ์ญํ ์ ๋๊ฐ ํด์ฃผ๋ ๊ฒ ์ข์๊น?
LineStatus
๋ LineGenerator
๋ฅผ ์ด์ฉํด ๋๋ค์ผ๋ก boolean๊ฐ์ ๋ฐ์์ ์์ฑํ๋ค. ๊ทธ ์ญํ ์ ํ๋ ๊ฐ์ฒด๋ ๋๊ฐ์ข์๊น?
public class LineMaker {
private final LineGenerator lineGenerator;
public LineMaker(LineGenerator lineGenerator) {
this.lineGenerator = lineGenerator;
}
public List<LineStatus> makeLineStatus(int numberOfLine) {
List<LineStatus> lineStatuses = new ArrayList<>();
makeFirstLineStatus(lineStatuses);
makeElseLineStatus(lineStatuses, numberOfLine);
return lineStatuses;
}
// ์๋ต ..
}
LineMaker
๋ผ๋ ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค์๋ค.
Line
์ ๋ง๋ค๊ธฐ ์ํด ํ์ํ LineGenerator
๋ฅผ ์์ฑ์์ ์ฃผ์
ํด์ค๋ค.
๋งจ ์ฒ์ ๊ตฌํํ ์ฝ๋์์ Ladder
์์๋ถํฐ ๋ฐ๋ผ๋ค๋๋ LineGenerator
๋ฅผ LineMaker
์๋ง ์ ๋ฌํด์ฃผ๋๋ก ํ์ฌ ์กฐ๊ธ ๋ ๊น๋ํ๊ณ ๊ฐ๋
์ฑ ์ข์ ์ฝ๋๊ฐ ๋์๋ค!
์ฐธ๊ณ ์๋ฃ - ์์กด๊ด๊ณ ์ฃผ์ (Dependency Injection) ์ฝ๊ฒ์ดํดํ๊ธฐ