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