14μ₯ μ μ§μ μΈ κ°μ
μΆλ°μ μ’μμΌλ νμ₯μ±μ΄ λΆμ‘±νλ λͺ¨λμ μκ°νκ³ κ·Έ λͺ¨λμ κ°μ νλ©° μ 리νλ λ¨κ³λ‘ μ΄ν΄λ³Ό κ²μ΄λ€.
1. Args
νλ‘κ·Έλ¨μ μ§λ€ 보면 μ’ μ’ λͺ λ Ήν μΈμμ ꡬ문μ λΆμν νμκ° μκΈ΄λ€.
νΈλ¦¬ν μ νΈλ¦¬ν°κ° μλ€λ©΄ main ν¨μλ‘ λμ΄μ€λ λ¬Έμμ΄ λ°°μ΄μ μ§μ λΆμνκ² λλ€.
μλ‘ μ§€ μ νΈλ¦¬ν°λ₯Ό ArgsλΌ λΆλ₯Ό κ²μ΄κ³ μ¬μ©λ²μ κ°λ¨νλ€.
Args μμ±μμ μΈμ λ¬Έμμ΄κ³Ό νμ λ¬Έμμ΄μ λ겨 Args μΈμ€ν΄μ€λ₯Ό μμ±ν ν Args μΈμ€ν΄μ€μλ€ μΈμ κ°μ μ§μνλ€.
public static void main(String[] args) {
try {
Args arg = new Args("l,p#,d*", args);
boolean logging = arg.getBoolean('l');
int port = arg.getInt('p');
String directory = arg.getString('d');
executeAppliocation(logging, port, directory);
} catch (ArgsException e) {
System.out.printf("Argument error: %s\n", e.errorMessage());
}
}
맀κ°λ³μ λ κ°λ‘ Args ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ§λ€μλ€.
- 첫째 맀κ°λ³μλ νμ λλ μ€ν€λ§λ₯Ό μ§μ νλλ°, "l(λΆμΈ), p(μ μ)#, d(λ¬Έμμ΄)*"λ λͺ λ Ήν μΈμ μΈ κ°λ₯Ό μ μνλ€.
- λμ§Έ 맀κ°λ³μλ mainμΌλ‘ λμ΄μ¨ λͺ λ Ήν μΈμ λ°°μ΄ μ체μ΄λ€.
μμ±μμμ ArgsExceptionμ΄ λ°μνμ§ μμλ€λ©΄
λͺ λ Ήν μΈμμ ꡬ문μ μ±κ³΅μ μΌλ‘ λΆμνμΌλ©° Args μΈμ€ν΄μ€μ μ§μλ₯Ό λμ Έλ μ’λ€λ λ§μ΄λ€.
1) Args ꡬν
import static com.objectmentor.utilities.args.ArgsException.ErrorCode.*;
public class Args {
private Map<Character, ArgumentMarshaler> marshalers;
private Set<Character> argsFound;
private ListIterator<String> currentArgument;
public Args(String schema, String[] args) throws ArgsException {
marshalers = new HashMap<Character, ArgumentMarshaler>();
argsFound = new HashSet<Character>();
parseSchema(schema);
parseArgumentStrings(Arrays.asList(args));
}
private void parseSchema(String schema) throws ArgsException {
for (String element : schema.split(","))
if (element.length() > 0)
parseSchemaElement(element.trim());
}
private void parseSchemaElement(String element) throws ArgsException {
char elementId = element.charAt(0);
String elementTail = element.substring(1); validateSchemaElementId(elementId);
if (elementTail.length() == 0)
marshalers.put(elementId, new BooleanArgumentMarshaler());
else if (elementTail.equals("*"))
marshalers.put(elementId, new StringArgumentMarshaler());
else if (elementTail.equals("#"))
marshalers.put(elementId, new IntegerArgumentMarshaler());
else if (elementTail.equals("##"))
marshalers.put(elementId, new DoubleArgumentMarshaler());
else if (elementTail.equals("[*]"))
marshalers.put(elementId, new StringArrayArgumentMarshaler());
else
throw new ArgsException(INVALID_ARGUMENT_FORMAT, elementId, elementTail);
}
private void validateSchemaElementId(char elementId) throws ArgsException {
if (!Character.isLetter(elementId))
throw new ArgsException(INVALID_ARGUMENT_NAME, elementId, null);
}
private void parseArgumentStrings(List<String> argsList) throws ArgsException {
for (currentArgument = argsList.listIterator(); currentArgument.hasNext();) {
String argString = currentArgument.next();
if (argString.startsWith("-")) {
parseArgumentCharacters(argString.substring(1));
} else {
currentArgument.previous();
break;
}
}
}
private void parseArgumentCharacters(String argChars) throws ArgsException {
for (int i = 0; i < argChars.length(); i++)
parseArgumentCharacter(argChars.charAt(i));
}
private void parseArgumentCharacter(char argChar) throws ArgsException {
ArgumentMarshaler m = marshalers.get(argChar);
if (m == null) {
throw new ArgsException(UNEXPECTED_ARGUMENT, argChar, null);
} else {
argsFound.add(argChar);
try {
m.set(currentArgument);
} catch (ArgsException e) {
e.setErrorArgumentId(argChar);
throw e;
}
}
}
public boolean has(char arg) {
return argsFound.contains(arg);
}
public int nextArgument() {
return currentArgument.nextIndex();
}
public boolean getBoolean(char arg) {
return BooleanArgumentMarshaler.getValue(marshalers.get(arg));
}
public String getString(char arg) {
return StringArgumentMarshaler.getValue(marshalers.get(arg));
}
public int getInt(char arg) {
return IntegerArgumentMarshaler.getValue(marshalers.get(arg));
}
public double getDouble(char arg) {
return DoubleArgumentMarshaler.getValue(marshalers.get(arg));
}
public String[] getStringArray(char arg) {
return StringArrayArgumentMarshaler.getValue(marshalers.get(arg));
}
}
μ μ½λλ μμμ μλλ‘ μ½νκ³ μ λ°μ μΌλ‘ κΉλν ꡬ쑰μ μ μ§μΈ νλ‘κ·Έλ¨μΌλ‘ μ¬κ²¨μ§λ€.
μλ₯Ό λ€μ΄ λ μ§ μΈμλ 볡μμ μΈμ λ± μλ‘μ΄ μΈμ μ νμ μΆκ°νλ λ°©λ²μ΄ λͺ λ°±νλ€.
2) κ·Έλ λ€λ©΄ μ΄λ»κ² μ΄λ° μ½λλ₯Ό μ§°μκΉ?
μ νλ‘κ·Έλ¨μ μ²μλΆν° μ λ κ² κ΅¬ννμ§ μμλ€.
κΉ¨λν μ½λλ₯Ό μ§λ €λ©΄ λ¨Όμ μ§μ λΆν μ½λλ₯Ό μ§ λ€μ μ 리ν΄μΌ νλ€.
κ·Έμ λμκ°λ μ½λλ§μΌλ‘λ λΆμ‘±νκ³ λμκ°λ μ½λκ° μ¬νκ² λ§κ°μ§λ μ¬λ‘λ ννλ€.
λ¨μν λμκ°λ μ½λμ λ§μ‘±νλ νλ‘κ·Έλλ¨Έλ μ λ¬Έκ° μ μ μ΄ λΆμ‘±νλ€.
λμ μ½λλ³΄λ€ λ μ€λ«λμ λ μ¬κ°νκ² κ°λ° νλ‘μ νΈμ μ
μν₯μ λ―ΈμΉλ μμΈλ μλ€.
λμ μ½λλ₯Ό κΉ¨λν μ½λλ‘ κ°μ νλ €λ©΄ λΉμ©μ΄ μμ²λκ² λ§μ΄ λ λ€.
μ€λλ μμ‘΄μ±μ μ°Ύμλ΄ κΉ¨λ €λ©΄ μλΉν μκ°κ³Ό μΈλ΄μ¬μ΄ νμνλ€.
λ°λ©΄ μ²μλΆν° μ½λλ₯Ό κΉ¨λνκ² μ μ§νκΈ°λ μλμ μΌλ‘ μ½λ€. μμΉ¨μ μλ§μΌλ‘ λ§λ μ½λλ₯Ό μ€νμ μ 리νκΈ°λ μ΄λ ΅μ§ μλ€. λμ±μ΄ 5λΆ μ μ μλ§μΌλ‘ λ§λ μ½λλ μ§κΈ λΉμ₯ μ 리νκΈ° μμ£Ό μ½λ€.
κ·Έλ¬λ―λ‘ μ½λλ μΈμ λ μ΅λν κΉλνκ³ λ¨μνκ² μ 리ν΄μΌ νλ€.