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?