ํฉ๊ฒฉ๋ ๋์ง ์์์ผ๋ฉด์ ์ฐ์ํํ
ํฌ์ฝ์ค 6๊ธฐ ์นดํ
๊ณ ๋ฆฌ๋ฅผ ๋ง๋๋ ๊ฒ ์กฐ๊ธ ์๊ธฐ์ง๋ง.. ํ๋ฆฌ์ฝ์ค๋ฅผ ํ๋ฉด์ ์ด๋ค ๊ฒ๋ค์ ๋ฐฐ์ ๊ณ ๊ณ ๋ฏผํ์๋์ง ๋จ๊ธฐ๊ธฐ ์ํด ๋ธ๋ก๊ทธ์ ์ ์ด๋ด
๋๋ค.
์ฌ์ค 1์ฃผ์ฐจ๋ ์ด๋ฏธ ๋ฒจ๋ก๊ทธ์ ์์ฑํ์ด์, ๊ทธ๋๋ก ๋ณต๋ถ์ด ๋ ๊ฒ ๊ฐ๋ค์.
ํด๋ฆฐ ์ฝ๋ ์ฑ ๋ด์ฉ๋ง์ด ๋ฌด์กฐ๊ฑด ์ ๋ต์ด๋ผ๊ณ ์๊ฐํ์ง ๋ง์.
์ฝ๋๋ฅผ ๊ทธ๋ ๊ฒ ์๋ฒฝํ ์์ฑํ์ง ๋ชปํ๊ธฐ๋ ํด์ ๊ณผ๊ฐํ ๋ง์ผ ์๋ ์์ง๋ง, ํด๋ฆฐ ์ฝ๋์์๋ ์ด์ ๋น์ทํ ๋ด์ฉ์ด ์์ฑ๋์ด ์์ต๋๋ค.
์ค์ ๋ก๋ ์ด ์ฑ ์์ ์ฃผ์ฅํ๋ ๊ธฐ๋ฒ ๋ค์๋ ๋ ผ์์ ์ฌ์ง๊ฐ ์๋ค. ์ฌ๋ฌ๋ถ๋ ๋ชจ๋ ๊ธฐ๋ฒ์ ๋์ํ์ง ์์ผ๋ฆฌ๋ผ. ์ด๋ค ๊ธฐ๋ฒ์ ๊ฒฉ๋ ฌํ ๋ฐ๋ํ๋ฆฌ๋ผ. ๊ทธ๋๋ ๊ด์ฐฎ๋ค. ์ฐ๋ฆฌ ์๊ฐ์ด ๋ฌด์กฐ๊ฑด ์ณ๋ค๊ณ ์ฃผ์ฅํ ์๋๋ ์์ผ๋๊น. ํ์ง๋ง ๋ค๋ฅธ ํํธ์ผ๋ก ์ด ์ฑ ์ ์ฐ๋ฆฌ๊ฐ ์ค๋ซ๋์ ๊ณ ๋ฏผํ๊ณ ์๊ณ ํ ๊ตํ๊ณผ ๊ธฐ๋ฒ์ ๊ถ๊ณ ํ๋ค. - Clean Code, 17p
๊ฐ๋ฐ์ ํ๋ฉฐ ๋๋ ์ ์, ๊ทธ๊ฐ ํด๋ฆฐ ์ฝ๋ ๋ฑ๊ณผ ๊ฐ์ด ๋งค์ฐ ๊ถ์์ ์ธ ์ฑ
๋ค์ ์ฌ๊ธฐ์ ์ ํ ๋ด์ฉ์ด ๋ฌด์กฐ๊ฑด ์ ๋ต์ด๋ผ๋ ์์ผ๋ก ๊ณต๋ถํ์๋ค๋ ์ ์
๋๋ค.
์ง์ ํ ์ฑ์ฅ์ ํ๋ ค๋ฉด, ๊ผญ ์ด๊ฒ ์ ๋ต์ธ ๋ด์ฉ์ผ์ง ๋๋์ด๋ณด๋ ์๊ฐ์ด ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ์ ์ธ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ง๋์น ํจ์ ๋ถํ ์ ์คํ๋ ค ๊ฐ๋ ์ฑ์ ํด์น๋ค.
ํด๋ฆฐ ์ฝ๋์์ ์ ๊ณต๋ ์ฝ๋ ์ค ์ผ๋ถ์ ๋๋ค.
private String render(boolean isSuite) throws Exception {
this.isSuite = isSuite;
if (isTestPage())
includeSetupAndTeardownPages();
return pageData.getHtml();
}
private boolean isTestPage() throws Exception {
return pageData.hasAttribute("Test");
}
์ด๋ ๊ฒ ๋ถํ ํ ์๋๋ ์ดํด๊ฐ ๋ฉ๋๋ค. ๊ฐ ํจ์์ ์ถ์ํ ์์ค์ ๋ง์ถ๊ธฐ ์ํด์์
๋๋ค.
์ด์ ๋น์ทํ ๋ฐฉ์์ผ๋ก, ์ด๋ฒ ๋ฏธ์
์ ํ๋ฉฐ ์ ๋ ์ฒ์์ ์๋์ฒ๋ผ ์์ฑํ์์ต๋๋ค.
private void play() {
int computerNumber = RandomNumber.pickNumber();
while (true) {
...
int strike = countGameStrike();
...
}
printGameEnd();
askResumeInput();
}
private int countGameStrike() {
return umpire.countStrike();
}
private static void printGameEnd() {
EndView.end();
}
private static void askResumeInput() {
AskController.askResumeInput();
}
์ด ์ฝ๋๋ ๊ณผ์ฐ ์ข๊ฒ ์์ฑ๋ ์ฝ๋์ผ๊น์?
์ด ๋ฐฉ์์ ๋จ์ ์ผ๋ก๋ ํด๋์ค์ ๋๋ฌด ๋ง์ ํจ์๊ฐ ์กด์ฌํจ์ ๋ฐ๋ผ ํจ์๊ฐ ํ์ ์ด์์ผ๋ก ๋ง์์ ธ, ์คํ๋ ค ๊ฐ๋
์ฑ์ด ๋ถํธํด์ง ์ ์๋ค๋ ์ ์
๋๋ค.
๋ฐ๋ผ์ ์ ๋ ์ด๋ ๊ฒ ๋ฐ๊พธ์์ต๋๋ค.
private void play() {
int computerNumber = RandomNumber.pickNumber();
while (true) {
...
int strike = umpire.countStrike();
...
}
EndView.end();
AskController.askResumeInput();
}
์ ํํ ๋งํ๋ฉด, ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ๋ฉ์๋๋ฅผ ์คํํด ๋ฌ๋ผ๊ณ ์์ฒญํ๋ ๋ถ๋ถ์ ๊ทธ ๋ฉ์๋์ ์ด๋ฆ์ผ๋ก ์ถฉ๋ถํ ์ ์ถํ ์ ์๋ค๋ฉด ๊ตณ์ด ๋ณ๋์ ํจ์๋ก ๊ฐ์ธ์ง ์์๋ ๋ ๊ฒ ๊ฐ๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ์ต๋๋ค. ํจ์๊ฐ ํ๋์ ๊ธฐ๋ฅ์ ํจ์ ์์ด ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ๋ฉ์๋๋ก ์์ฒญ์ ํ๋ ๊ฒ์ ์์ฐ์ค๋ฌ์ด ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋ฌ๋, ํจ์ํ๋ฅผ ํตํด ์ฝ๊ฒ ์ฝ๋ ํํ์ ์ค์ผ ์ ์๋ค๋ฉด ๊ทธ๋๋ ํจ์ํ๋ฅผ ์งํํด๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ ๋ ๋ค๋ฅธ ํด๋ฆฐ ์ฝ๋์ ์์๊ฐ ๊ทธ ์์
๋๋ค.
// includeSetupAndTeardownPages ํจ์๋ฅผ ํตํด ์๋ ๋ค ๊ฐ์ ์์
์ด ๋จ์ถ๋๋ค
private void includeSetupAndTeardownPages() throws Exception {
includeSetupPages();
includePageContent();
includeTeardownPages();
updatePageContent();
}
๋ ๋ค๋ฅธ ์๋ก๋, ์๋์ ๊ฐ์ด ๋ฐ๊ฟ ์๋ ์์ต๋๋ค.
// BEFORE
public static void assertNumberValue(final String input) {
if (!isInputValidPositiveNumber(input)) {
throw new IllegalArgumentException();
}
}
private static boolean isInputInvalidPositiveNumber(final String input) {
return input.matches("^[1-9]+$");
}
// AFTER
public static void assertNumberValue(final String input) {
if (!input.matches("^[1-9]+$")) {
throw new IllegalArgumentException();
}
}
ํ์ง๋ง ์๋ ๊ฒฝ์ฐ๋ ๋ถ๋ฆฌํ ํ์๊ฐ ์์ด ๋ณด์ ๋๋ค. ํจ์ ํธ์ถ์ ๋์ด ํน์ ์์ ์ ์คํํ ๊ฒฝ์ฐ์ ๋๋ค.
public static int pickNumber() {
StringBuilder numberBuilder = new StringBuilder();
while (!isBuilderEnoughPicked(numberBuilder)) {
saveNewNumber(numberBuilder);
}
...
}
// ๊ฐ์ด ๊ฐ์์ง "๋น๊ต" ํ์๋ฅผ ํ๋ค.
private static boolean isBuilderEnoughPicked(final StringBuilder numberBuilder) {
return numberBuilder.length() == PLAY_NUMBER_DIGIT.getValue();
}
์ด๋จ ๋ ํจ์ ๋ถํ ์ ํด์ผ ํ ๊น์ ๋ํ ๊ณ ๋ฏผ์ ๊ณ์๋์ด์ผ ํ ๋ด์ฉ ๊ฐ์ต๋๋ค. ํจ์๋ ํ ๊ฐ์ง๋ง์ ์ํด์ผ ํ๋ฉด์๋, ๋๋ฌด ์ง๋์น ๋ถํ ๋ก ์ธํด ๊ฐ๋ ์ฑ์ ํด์น๋ฉด ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ๋ ์ฌ์ด์ ์ ์ ํ ์กฐํ๋ฅผ ์ฐพ์ ์ ์์ ๋๊น์ง ์ฐ๋งํด์ผ๊ฒ ์ต๋๋ค.
์ง๋์น ํด๋์ค ๋ถํ ์ ํ์ง ๋ง์.
ํด๋ฆฐ ์ฝ๋๋ฅผ ์๋ชป ํด์ํด์์ธ์ง, ์ฌ๋ฌ converter๋ค์ ๋ง๋ค๊ณค ํ์์ต๋๋ค. ํ ๋ณํ๊ณผ ๊ฐ์ ๊ฒ๋ค์กฐ์ฐจ ํ๋์ ๊ธฐ๋ฅ์ผ๋ก ๋ฐ๋ผ๋ดค์์ต๋๋ค.
public class StringInputConverter {
public static String[] toArray(final String input) {
return input.split("");
}
}
public class IntegerInputConverter {
public static toString(final int number) {
return String.valueOf(number);
}
}
์ด๋ ๊ฒ ํ๋ค ๋ณด๋, ์๋์ ๊ฐ์ ๊ดด์ํ ์ฝ๋๊ฐ ๋์ค๊ธฐ๋ ํ์ต๋๋ค.
public class BallRule implements GameRule {
@Override
public int calculate(final int hitter, final int pitcher) {
String[] origin = StringInputConverter.toArray(IntegerInputConverter.toString(hitter));
String[] test = StringInputConverter.toArray(IntegerInputConverter.toString(pitcher));
boolean[] match = recordMatchedPositions(origin, test);
...
}
}
๋๋์ฒด ์ด๊ฒ์ ๋ฐ๋ก ๋ง๋ค์ด๋์ ๊ฒ ์ด๋ค ์ด์ ์ด ์๋ ๊ฒ์ผ๊น์? ์ง๊ธ ๋ค์ ๋ณด๋ฉด ์คํ๋ ค ์ธ๋ฐ์์ด ์์กด์ฑ์ด ๋์ด๋๋ค๋ ๋ฌธ์ ๊ฐ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ์ง๊ณ ๋ณด๋ฉด String์ String [] ๋ฐฐ์ด๋ก ๋ง๋๋ ๊ฒ์ String ๊ฐ์ฒด์๊ฒ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฒญํ ์ ์๋ ๊ฒ์ด๋ฉฐ, int๋ฅผ String์ผ๋ก ๋ง๋๋ ๊ฒ ๋ํ ๊ฐ๋ฅํฉ๋๋ค. ์ฆ, ์ด๋ฌํ ํด๋์ค๋ ์์ฑํ์ง ์๊ธฐ๋ก ํ์์ต๋๋ค.
public class BallRule implements GameRule {
@Override
public int calculate(final int hitter, final int pitcher) {
// ํํ์ด ์กฐ๊ธ ๋นํจ์จ์ ์ผ์๋ ์์ต๋๋ค.
// ๋งํ๊ณ ์ถ์ ๊ฒ์ ๊ธฐ๋ณธ ๋ฉ์๋๋ก ์ ์ฝํ ์ ์๋ ๊ฒ๋ค์ ์ ์ฝํ์๋ ๊ฒ์ด๋ ์ฝ๋ ํจ์จ์ ์ฐจ์นํด์ฃผ์ธ์.
String hitterValue = String.valueOf(hitter);
String pitcherValue = String.valueOf(pitcher);
String[] hitterNumbers = hitterValue.split("");
String[] pitcherNumbers = pitcherValue.split("");
boolean[] match = recordMatchedPositions(hitterNumbers, pitcherNumbers);
...
}
}
๋ค๋ฅธ ์ฌ๋์ด ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์ด๋ฆ์ ์ฐ์.
์ด๋ฆ ์ง๊ธฐ๋ ์ง์ง ์ด๋ ค์ด ๊ฒ ๊ฐ์ต๋๋ค.
์ฒ์์๋ ์ซ์ ์ผ๊ตฌ์ ๊ด๋ จํ์ฌ ์ผ๊ตฌ๋ค ๋ณด๋, ์ฌํ ๊ฐ์ฒด ์ด๋ฆ์ ์ผ๊ตฌ + ์ฌํ์ ๋ํ๋ด๋ Umpire๋ฅผ ์ผ์์ต๋๋ค.
๊ทธ๋์ Referee๋ ๋ค์ด๋ดค์ด๋, Umpire์ ๋ํด์๋ ์ฒ์ ๋ค์์ต๋๋ค. ๊ทธ๋ผ์๋ ์ฌ์ ์ ์๋ฏธ์ ๋ ์ง์คํ๊ธฐ ์ํด Umpire๋ก ์ฌ์ฉํ์์ต๋๋ค.
๊ทธ๋ฌ๋ค ํด๋ฆฐ ์ฝ๋์ ์๋ ๋ค์ ๋ด์ฉ์ ๋ ์ฌ๋ ธ์ต๋๋ค.
ํด๋ฒ ์์ญ์์ ๊ฐ์ ธ์จ ์ด๋ฆ์ ์ฌ์ฉํ๋ผ
๋ชจ๋ ์ด๋ฆ์ ๋ฌธ์ ์์ญ (๋๋ฉ์ธ)์์ ๊ฐ์ ธ์ค๋ ์ ์ฑ ์ ํ๋ช ํ์ง ๋ชปํ๋ค. ๊ฐ์ ๊ฐ๋ ์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ดํดํ๋ ๋๋ฃ๋ค์ด ๋งค๋ฒ ๊ณ ๊ฐ์๊ฒ ์๋ฏธ๋ฅผ ๋ฌผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ ๋๊ตฌ๋ ์ฝ๊ฒ ์ฝ์ ์ ์๋๋ก ํ๋ ค๋ฉด ํด๋ฆฐ ์ฝ๋์ ์๋ ๋ด์ฉ์ฒ๋ผ ๊ฐ์ ๊ฐ๋ ์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ดํดํ์ง ์๋๋ก ๋ ๋ณดํธ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํด์ผ๊ฒ ๋ค๊ณ ๊ฒฐ๋ก ๋ด๋ ธ์ต๋๋ค. ํฅํ ์ค๋ฌด ๊ฐ๋ฐ์ ํ๋ฉด์ ๋ค๋ฅธ ์ฌ๋๊ณผ์ ํ์ ์ ํ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง ํ ๋ฐ, ๊ทธ๋ ๋ค๋ฅธ ๋ถ์ด ์ฝ์ ๋ ์คํด๊ฐ ์๋๋ก ํด์ผ ํ ํ ๋๊น์.
์์๊ฐ ํฌ์ฅ ๊ฐ์ฒด์ ๊ฒ์ฆ ๋ก์ง์ ์์๊ฐ ํฌ์ฅ ๊ฐ์ฒด์๊ฒ ๋งก๊ธฐ์.
์ด์ ์ ๋ฏธ์
์ ์ฐ์ต ์ผ์ ๋ฏธ๋ฆฌ ํด ๋ณด๋ฉฐ ์์๊ฐ ํฌ์ฅ์ ๋ํด ์์๋ดค์์ต๋๋ค.
์์๊ฐ ํฌ์ฅ์ ์ฅ์ ์ค ํ๋๋ ์ผ๋ฐ์ ์ธ ์์๊ฐ์ผ๋ก ์ผ์ ๋๋ณด๋ค ์์ธ์ฒ๋ฆฌ๋ฅผ ํด๋น ๊ฐ์ฒด์์ ํด ์ฃผ์ด, ์ฌ์ฉ๋๋ ํด๋์ค (ex: Name๊ณผ User๊ฐ ์๋ค๋ฉด User)์์๋ ์์๊ฐ์ ๋ํ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์์๋ ๋๋ค๋ ๊ฒ์
๋๋ค.
๊ทธ๋ฐ๋ฐ ์ ๋ ์ฑ
์์ ๋ถํ ํด์ผ ํ๋ค๋ ๊ฒ์ ์ง์ฐฉํด์, ์ฒ์์๋ Validator๋ฅผ ๋ง๋ค๊ณค ํ์์ต๋๋ค.
public class NumberValidator {
public static void assertInputNumberWithLength(final String input, final int length) {
assertNumberValue(input);
aasertDigitLength(input, length);
assertEachNumberUnique(input);
}
private static void assertNumberValue(final String input) {
...
}
...
}
์ค์ ์ฌ์ฉ์ ์ด๋ ์ต๋๋ค. ์ด ๋๋ ์์๊ฐ์ ํฌ์ฅํ์ง ์์์ผ๋ฉฐ (๋ง๋ค์์ด๋ ๊ฒ์ฆ์ Validator์๊ฒ ๋งก๊ฒผ์ ๊ฒ ๊ฐ์ต๋๋ค.), ์ง์ ์ ์ผ๋ก ์ ๋ ฅ์ ๋ฐ์์ ๋ ๋งค๋ฒ ๊ฒ์ฆ์ด ์ผ์ด๋๋๋ก ์ค์ ํ์ต๋๋ค.
public class ConsoleInputView implements InputView {
@Override
public int readPlayNumber() {
String number = Console.readLine();
NumberValidator.assertInputNumberWithLength(number, PLAY_NUMBER_DIGIT.getValue());
return Integer.parseInt(number);
}
}
ํ์ง๋ง PlayNumber๋ฅผ ์์๊ฐ ํฌ์ฅ ๊ฐ์ฒด๋ก ๋ง๋ค๊ณ , ์์ธ์ฒ๋ฆฌ๋ฅผ PlayNumber์์ ์ง์ ํ๋๋ก ๋ฐ๊ฟจ์ต๋๋ค.
public class PlayNumber {
private final int number;
private PlayNumber(final String number) {
validateNumber(number);
this.number = Integer.parseInt(number);
}
}
NumberValidator๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ง์ ์์๊ฐ ํฌ์ฅ ๋ฐ ํด๋น ๊ฐ์ฒด์์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ๋๋ก ํ๋ฉด, ์์ง๋๊ฐ ์ฌ๋ผ๊ฐ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
์ด๋ ์ค๋ธ์ ํธ (Object) ์ฑ
์๋ ์๋ ๋ด์ฉ์
๋๋ค.
๋ฐ์ ํ๊ฒ ์ฐ๊ด๋ ์์ ๋ง์ ์ํํ๊ณ ์ฐ๊ด์ฑ ์๋ ์์ ์ ๋ค๋ฅธ ๊ฐ์ฒด์๊ฒ ์์ํ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌ์ผ ์์ง๋ (cohension)๊ฐ ๋๋ค๊ณ ๋งํ๋ค. ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์ค์ค๋ก ์ฒ๋ฆฌํ๋ ์์จ์ ์ธ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์์๋ฟ๋๋ฌ ์์ง๋๋ฅผ ๋์ผ ์ ์๋ค.
๊ฐ์ฒด์ ์์ง๋๋ฅผ ๋์ด๊ธฐ ์ํด์๋ ๊ฐ์ฒด ์ค์ค๋ก ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฑ ์์ ธ์ผ ํ๋ค. - ์ค๋ธ์ ํธ (Object), 26p
๋ง์ฝ ๊ตณ์ด NumberValidator๋ฅผ ๋ง๋ค์๋ค๋ฉด PlayNumber ๊ฐ์ฒด ์
์ฅ์์๋ ์์ ์ ๋ฐ์ดํฐ์ ๊ดํด ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๊ด์ฌํ๊ฒ ๋๋ ๊ฒ์
๋๋ค.
PlayNumber์์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ํ๋ฉด, ํ
์คํธ ์ฝ๋๋ ๋ ๋ช
๋ฃํ๊ฒ ์์ฑํ ์ ์๊ฒ ๋ฉ๋๋ค.
@Test
void ํ๋ ์ด_์ซ์๋_์ธ์๋ฆฌ์ฌ์ผ๋ง_ํ๋ค() {
Assertions.assertThrows(IllegalArgumentException.class, () -> {
PlayNumber playNumber = PlayNumber.from("1234");
});
}
๋ง์ฝ NumberValidator๋ฅผ ๋ง๋ค์๋ค๋ฉด PlayNumber์ ๋ํ ํ ์คํธ๊ฐ ์๋๋ผ NumberValidator์ ๋ํ ํ ์คํธ์๊ฒ ์ฃ ?
๊ณต์ฉ ์์๋ ์ ์ฉ ํด๋์ค์ ๋ด๊ธฐ๋ณด๋ค๋ Enum์ผ๋ก ๊ด๋ฆฌํ์.
๊ฐ์ฒด์ private ํ๊ฒ ์ฌ์ฉ๋๋ ์์๋ ์ ์ธํ๊ณ , ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉ๋๋ ์์๋ค์ ์์ ์ ์ฉ ํด๋์ค (ex: Constants ๋ฑ)์ ๋ด๊ธฐ๋ณด๋ค๋ Enum์ ์ฐ๋ ๊ฒ์ด ๋ ์ข์์ ์๊ฒ ๋์์ต๋๋ค. ์ด๋ ์ดํํฐ๋ธ ์๋ฐ์๋ ์๋ ๋ด์ฉ์
๋๋ค.
Enum์ ์ฌ์ฉํจ์ ๋ฐ๋ผ ์ป์ ์ ์๋ ์ฅ์ ๋ฐ ์ด์ ์ ๋จ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ ์ ์์๋ ๋ฌธ์์ด๋ก ์ถ๋ ฅํด๋ ์๋ฏธ๊ฐ ์๋ ๋จ์ง ์ซ์๋ก๋ง ๋ณด์ ๋๋ค.
- ๊ฐ์ ์ ์ ์ด๊ฑฐ ๊ทธ๋ฃน์ ์ํ ๋ชจ๋ ์์๋ฅผ ์ํํ ์๋ ์์ต๋๋ค. ๊ฐ์ ๋ํ ํ์ ํ ์ ์์ต๋๋ค.
- ์ด๊ฑฐ ํ์ ์ผ๋ก ํ๋ฉด ํ์ ์์ ์ฑ์ด ๋ณด์ฅ๋ฉ๋๋ค. ํน์ ์ด๊ฑฐ ํ์ ์ ์ธ์คํด์ค๋ฅผ ์์กดํ๋ ๋ฉ์๋๋ ๊ทธ์ ๋ค๋ฅธ ์ด๊ฑฐ ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ฐ์์ ์ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ๋์ง๋๋ค.
- ์ด๊ฑฐ ํ์ ์ผ๋ก ํ๋ฉด ์์์ ๋ฉ์๋๋ ํ๋๋ฅผ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, ์์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์๋ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด์ ์๋ ์๋์ ๊ฐ์ด ์ฌ์ฉํ์์ง๋ง,
public class Constants {
public static final int PLAY_NUMBER_DIGIT = 3;
public static final int RESTART = 1;
public static final int END = 2;
}
์ดํ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊พธ์์ต๋๋ค.
public enum Constant {
PLAY_NUMBER_DIGIT(3),
PLAY_WANT(1),
END_WANT(2);
private final int value;
Constant(final int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
}
Enum์ ๋ํด์๋ ์ฐ์ํ ํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ ๋ฑ์ ๋ณด๋ฉด์ ๋ ์ตํ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ปค๋ฐ ์ปจ๋ฒค์ ์ค์
์ปค๋ฐ ์ปจ๋ฒค์
์ ์ ๋ฆฌํ๋ฉด์ ๊ทธ๋์๊ณผ ๋ค๋ฅด๊ฒ ์์์ ์ผ๋ก ์ปค๋ฐ ์ปจ๋ฒค์
์ ์งํค๋ ค๋ ๋
ธ๋ ฅ์ ํ ์ ์์์ต๋๋ค.
๋ฟ๋ง ์๋๋ผ ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ๋ฐ๋ฅด๊ธฐ๋ณด๋ค๋, ์ ์๊ฐ์ ๋ง์ถฐ ์ผ๋ถ ์์ ํ ๋ถ๋ถ์ด ์๊ธฐ๋ ํฉ๋๋ค. (์์ฐ์ค๋ฝ๊ฒ ์ฝํ ์ ์๋๋ก ํ๋ ๊ฒ ๋ฑ)
๋ฌผ๋ก ํ ์ปจ๋ฒค์
์ด ์๋ค๋ฉด ๊ทธ๊ฒ์ ์งํค๋ ๊ฒ ์ต์ฐ์ ์ด์ง๋ง, ์ผ๋จ์ ๋ง์ ์ฌ๋๋ค์ด ๋ณดํธ์ ์ผ๋ก ์๊ณ ์๋ ์ปค๋ฐ ์ปจ๋ฒค์
์ด ์ต๊ด์ ๋ฐฐ์ด๊ฒ ๋ ๊ฒ ๊ฐ์ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฒฐ๋ก
๊ณตํต์ ์ผ๋ก ๋๋ ๊ฒ์, ์ค์ ์ง์์ ํ๊ณ ๋ฏธ์
์ ์ค์ค๋ก ํ๋ ์ ์ฃผ๊ด์ ๋ง๊ฒ ์ด ์ง์์ด ์ ๊ทธ๋ฐ์ง ํ๊ตฌํด ๋ณด๋ ํ๋ จ์ ํ ์ ์์๋ค๋ ์ ์
๋๋ค.
1์ฃผ ์ฐจ๋ง ํด๋ ์ด๋ ๊ฒ ๋ฐฐ์ฐ๊ณ ๋๋ ๊ฒ ๋ง์๋๋ฐ, ๋๋จธ์ง ์ฃผ์ฐจ๋ค์๋ ์ด๋ค ๊ฒ๋ค์ ๋ฐฐ์ธ ์ ์๋์ง ๋ฑ์ ๋ํด์๋ ๊ธฐ๋๊ฐ ๋ฉ๋๋ค.
ํํธ์ผ๋ก๋ ์๋ก์ด ๋ฏธ์
์ด ์ฃผ์ด์ก์ ๋ ๋ ๋๊ฐ์ ์ค์๋ฅผ ํ๊ฒ ๋๋ ๊ฑด ์๋์ง ๊ฑฑ์ ์ด ๋ค๊ธฐ๋ ํฉ๋๋ค. ๊ทธ๋ด ๋๋ง๋ค ์ด๋ ๋๋ผ๊ณ ๋ฐฐ์ด ์ ๋ค์ ๋ณต๊ธฐํด ๋ณด๊ณ , ๊ฐ์ ์ค์๋ฅผ ๋ฐ๋ณตํ์ง ์๋๋ก ๋ ์ ๊ฒํด์ผ๊ฒ ์ต๋๋ค.
ํฅํ ์์ ๊ณตํต ํผ๋๋ฐฑ์์๋ ์ ๊ฐ ์ด๋ค ์ ์ ๋์ณค์๋์ง ์ ๊ฒํด๋ณด๊ธฐ๋ ํ ์๊ฐ์
๋๋ค.
์ต์ข ์ ์ถ
์ด๊ณณ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.