JAVA

[Java] Enum ํ™œ์šฉ ๋ฐ ๊ฐœ์„ 

YeopJu 2024. 7. 9. 23:57
๋ฐ˜์‘ํ˜•

์ง€๊ธˆ๊นŒ์ง€ Enum๋ฅผ ๊ฝค๋‚˜ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์™”์ง€๋งŒ, ๊ทธ์ € ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ์ œํ•œํ•˜๊ณ  ์ฝ”๋“œ ๋‚ด์˜ ๋งค์ง ๋„˜๋ฒ„๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ์šฉ๋„ ์ •๋„๋กœ๋งŒ ์ƒ๊ฐํ•˜๊ณ  ์‚ฌ์šฉํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์ตœ๊ทผ ์ •์  ํŽ™ํ† ๋ฆฌ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๊ณต๋ถ€ ์ค‘, ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด์ง์„ ๋ณด์žฅํ•œ๋‹ค๋Š” ์ธก๋ฉด์—์„œ Enum์— ๋Œ€ํ•œ ์–ธ๊ธ‰์ด ์žˆ์—ˆ๋‹ค. ์ด์— ์ด๋ฒˆ ๊ธฐํšŒ์— Enum์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ณ  ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์˜ Enum ํŒŒํŠธ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋งํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 


 

 

โ˜‘๏ธ Enum ํ™œ์šฉ

1. ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌ

์ด๋Š” Enum ๋ฆฌํŒฉํ„ฐ๋ง์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ ๊ฐ€์žฅ ํฐ ์›์ธ์ด๋‹ค. ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์˜ ์•Œ๋ฆผ ํŒŒํŠธ๋Š” ๋ฉ”์‹œ์ง€ Content๋ฅผ Dto์— ํฌํ•จ์‹œํ‚ค๊ณ ์ž Dto์˜ ์ƒ์„ฑ์ž์—์„œ NotificationTopic์ด๋ผ๋Š” Enum ๊ฐ’์— ๋”ฐ๋ผ Content๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์—ˆ๋‹ค.ํ•˜์ง€๋งŒ ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์ƒ์„ฑ์ž๊ฐ€ ๋งŽ์€ ์ผ์„ ํ•˜๋Š” ๊ฒƒ์€ ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ๊ฐ€๋…์„ฑ ์ธก๋ฉด์—์„œ ์ข‹์ง€ ์•Š๊ณ  ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ๊ฐ์ฒด ์ƒ์„ฑ์˜ ์ฑ…์ž„์„ ๋ฒ—์–ด๋‚œ ๋…ผ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๊ฒŒ ๋œ๋‹ค.

๋ฆฌํŒฉํ„ฐ๋ง ์ „ ์ฝ”๋“œ

 

๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด NotificationDto์˜ ์ƒ์„ฑ์ž๋Š” ์ดˆ๊ธฐํ™”์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ง€๊ณ , Enum ๊ฐ’์— ๋Œ€ํ•œ ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ Enum์— ์‘์ง‘์‹œํ‚จ๋‹ค๋ฉด Enum์˜ ์ƒํƒœ๊ฐ€ ์ˆ˜์ •, ์ถ”๊ฐ€๋  ๋•Œ ์ฑ…์ž„์ด ์—†๋Š” ํƒ€ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ์˜ ๋ณ€๊ฒฝ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

ํ–‰์œ„๋ฅผ Enum์— ํฌํ•จ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒ์ˆ˜๋ณ„๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ Function์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Java11์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Function ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํŒฉํ„ฐ๋ง์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ Content ๋ฌธ์ž์—ด์„ message.properties ๋ฆฌ์†Œ์Šค ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค๋ฉด ์œ ์ง€๋ณด์ˆ˜๋‚˜ ๋กœ์ปฌ๋ผ์ด์ฆˆ ํŽธ์˜์„ฑ์ด ๋†’์•„์ง„๋‹ค.

 

 

 

2. ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์—ฐ๊ด€๊ด€๊ณ„ ํ‘œํ˜„

์‚ฌ์‹ค ์ด ๋‘ ๋ฒˆ์งธ ์ด์ ์€ Enum์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹น์—ฐํžˆ ์•Œ์•„์•ผ ํ•  ๋‚ด์šฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์งš๊ณ  ๋„˜์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ๋งค์ง ๋„˜๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด ๋งค์ง ๋„˜๋ฒ„ ์‚ฌ์ด์˜ ์—ฐ๊ด€์„ฑ์„ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๋˜ํ•œ ๋งŒ์•ฝ "Y" ๋ฟ ๋งŒ ์•„๋‹ˆ๋ผ "T", "F"์™€ ๊ฐ™์€ ํ‚ค์›Œ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์ถ”๊ฐ€๋œ๋‹ค๋ฉด ์ถ”๊ฐ€๋˜๋Š” ํ‚ค์›Œ๋“œ ๊ฐœ์ˆ˜๋งŒํผ ๋ถ„๊ธฐ๋ฌธ์ด ๋Š˜์–ด๋‚˜๊ฒŒ ๋˜๋ฉด์„œ ๋ฐ˜๋ณต์„ฑ ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์ง€๊ฒŒ ๋œ๋‹ค.

public class Impl{
	public String toIntValue(String origin){
    	if ("Y".equals(origin)) return "1";
    	else return "0";
    }
    public String toBoolValue(String origin){
    	if ("Y".equals(origin)) return true;
        else return false;
    }
}

 

์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด Enum์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด Y, 1, true๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฉ”์„œ๋“œ ๋˜๋Š” ๋ถ„๊ธฐ๋ฌธ์˜ ์ถ”๊ฐ€ ์—†์ด ํ•„๋“œ๊ฐ’๋งŒ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ํ‚ค์›Œ๋“œ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.

@Getter
public enum TempStatus{
    Y("1", true),
    N("0", false);
    
    private String intValue;
    private Boolean boolValue;
    
    TempStatus(String intValue, Boolean boolValue){
    	this.intValue = intValue;
        this.boolValue = boolValue;
    }
}

 

 

3.  ๋ฐ์ดํ„ฐ ๊ทธ๋ฃน ๊ด€๋ฆฌ

5๊ฐ€์ง€๋กœ ์ด๋™์ˆ˜๋‹จ์„ ๋ถ„๋ฅ˜ํ•˜๊ณ  ๊ฐ ์ด๋™์ˆ˜๋‹จ ๋ณ„๋กœ ์—ฌ๋Ÿฌ ํƒ€์ž…์ด ์กด์žฌํ•  ๋•Œ, ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ถ„๊ธฐ๋ฌธ ์‚ฌ์šฉ, DB ์ €์žฅ ํ›„ ์กฐํšŒ ๋“ฑ์˜ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋“ค์€ OCP ์œ„๋ฐ˜, ์กฐํšŒ ์ฟผ๋ฆฌ๋กœ ์ธํ•œ ์†๋„ ์ €ํ•˜ ๋“ฑ์˜ ๋ช…ํ™•ํ•œ ๋‹จ์ ๋“ค์ด ์กด์žฌํ•˜๋Š” ๋ฐ˜๋ฉด, Enum์€ ํšจ์œจ์ ์ด๊ณ  ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

public enum Vehicle {
    CAR(100, List.of(CAR_SEDAN, CAR_COUPE, CAR_SUV)),
    MOTORCYCLE(50, List.of(MOTORCYCLE_SPORTBIKE, MOTORCYCLE_CRUISER, MOTORCYCLE_TOURER)),
    TRUCK(200, List.of(TRUCK_PICKUP, TRUCK_LORRY, TRUCK_TRACTOR)),
    BICYCLE(0, List.of(BICYCLE_MOUNTAIN, BICYCLE_ROAD, BICYCLE_HYBRID)),
    BOAT(300, List.of(BOAT_SAILBOAT, BOAT_MOTORBOAT, BOAT_YACHT));

    private int fuelConsumption;
    private List<VehicleCode> vehicleCodeList;

    Vehicle(int fuelConsumption, List<VehicleCode> vehicleCodeList) {
        this.fuelConsumption = fuelConsumption;
        this.vehicleCodeList = vehicleCodeList;
    }

    public int getFuelConsumption() {
        return fuelConsumption;
    }

    public List<VehicleCode> getVehicleCodeList() {
        return vehicleCodeList;
    }
    
    public static Vehicle findByVehicleCode(VehicleCode code){
    	return Arrays.stream(Vehicle.values())
            .filter(vehicle -> vehicle.hasVehicleCode(code))
            .findAny()
            .orElse(EMPTY);
	}

    public boolean hasVehicleCode(VehicleCode code){
        return VehicleCodeList.stream()
                .anyMatch(vehicle -> vehicle == code));
    }
}

 

 


 

โ˜‘๏ธ ๊ฒฐ๋ก 

์ด๋ฒˆ ๋ฆฌํŒฉํ„ฐ๋ง์—์„œ ์ƒํƒœ์™€ ํ–‰์œ„๋ฅผ ํ•œ ๊ณณ์— ์‘์ง‘์‹œํ‚ด์œผ๋กœ์จ ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ๋‚ฎ์ถ”๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋”ฉ์„ ํ•  ๋•Œ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•˜๊ณ  ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ๊ฐ์ฒด์ง€ํ–ฅ์  ์ฝ”๋“œ์ธ์ง€, ๊ฐ์ฒด์ง€ํ–ฅ ์›์น™์„ ์œ„๋ฐ˜ํ•˜๊ณ  ์žˆ์ง€๋Š” ์•Š์€์ง€, DRYํ•œ ์ฝ”๋“œ์ธ์ง€๋ฅผ ์ฒดํฌํ•˜๊ณ  ๊ฒฝ๊ณ„ํ•˜๋Š” ์Šต๊ด€์˜ ํ•„์š”์„ฑ์„ ์ฒด๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

๋ฐ˜์‘ํ˜•