Item 38. Extended Enum
νμ₯ν μ μλ μ΄κ±° νμ μ΄ νμνλ©΄ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλΌ.
μ΄κ±° νμ μ λ¨μ μ€ νλλ νμ₯μ΄ λΆκ°λ₯νλ€λ κ²μ΄λ€. μ΄κ±° νμ μ νμ₯νλ λ°©λ²μ μμ§λ§, μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ©΄ λΉμ·ν ν¨κ³Όλ₯Ό λΌ μ μλ€. λλΆλΆμ μν©μμλ μ΄κ±° νμ μ νμ₯νλ κ²μ΄ μ’μ§ μμ§λ§, νμ₯ν μ μλ μ΄κ±° νμ μ΄ νμνλ€λ©΄ μΈν°νμ΄μ€λ₯Ό μ¬μ©νμ. λνμ μΈ μλ‘ μ°μ° μ½λλ₯Ό λνλ΄λ μ΄κ±° νμ μ΄ μλ€.
interface Operation {
double apply(double x, double y);
}
enum BasicOperation implements Operation {
PLUS("+") {
public double apply(double x, double y) {
return x + y;
}
},
MINUS("-") {
public double apply(double x, double y) {
return x - y;
}
},
TIMES("*") {
public double apply(double x, double y) {
return x * y;
}
},
DIVIDE("/") {
public double apply(double x, double y) {
return x / y;
}
};
private final String symbol;
BasicOperation(String symbol) {
this.symbol = symbol;
}
@Override
public String toString() {
return symbol;
}
}
enum ExtendedOperation implements Operation {
EXP("^") {
public double apply(double x, double y) {
return Math.pow(x, y);
}
},
REMAINDER("%") {
public double apply(double x, double y) {
return x % y;
}
};
private final String symbol;
ExtendedOperation(String symbol) {
this.symbol = symbol;
}
@Override
public String toString() {
return symbol;
}
}μΈν°νμ΄μ€μ Operationμ νμ₯νμ¬, μ΄ μΈν°νμ΄μ€λ₯Ό μ°μ°μ νμ μΌλ‘ μ¬μ©ν μ΄κ±° νμ BasicOperationμ μ μνλ€. μ΄λ κ² νλ©΄ λ€μκ³Ό κ°μ μ΄μ μ μ»μ μ μλ€.
apply λ©μλκ° μΈν°νμ΄μ€μ μ μΈλμ΄ μμ΄ λ³λλ‘ μΆμ λ©μλλ₯Ό μ μΈν νμκ° μμ
μΈν°νμ΄μ€λ₯Ό ꡬνν μ΄κ±° νμ μ λ§λ€μ΄ μ°μ° μ½λλ₯Ό μ½κ² μΆκ° λ° λ체 κ°λ₯
μλ μ½λλ μΈν°νμ΄μ€λ₯Ό νμ₯ν νμ₯λ μ°μ° μ½λλ₯Ό μ μ©ν μμμ΄λ€.
Last updated
Was this helpful?