์ง๊ธ๊น์ง Enum๋ฅผ ๊ฝค๋ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํด์์ง๋ง, ๊ทธ์ ํ์ฉ ๊ฐ๋ฅํ ๊ฐ์ ์ ํํ๊ณ ์ฝ๋ ๋ด์ ๋งค์ง ๋๋ฒ๊ฐ ๋ ธ์ถ๋์ง ์๋๋ก ํ๋ ์ฉ๋ ์ ๋๋ก๋ง ์๊ฐํ๊ณ ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋ค ์ต๊ทผ ์ ์ ํํ ๋ฆฌ ๋ฉ์๋์ ๋ํ ๊ณต๋ถ ์ค, ์ธ์คํด์ค๊ฐ ํ๋๋ง ๋ง๋ค์ด์ง์ ๋ณด์ฅํ๋ค๋ ์ธก๋ฉด์์ Enum์ ๋ํ ์ธ๊ธ์ด ์์๋ค. ์ด์ ์ด๋ฒ ๊ธฐํ์ Enum์ ๋ํด ๊ณต๋ถํ๊ณ ๊ธฐ์กด ํ๋ก์ ํธ์ Enum ํํธ ์ฝ๋๋ฅผ ๋ฆฌํฉํฐ๋งํด๋ณด๊ณ ์ ํ๋ค.
โ๏ธ Enum ํ์ฉ
1. ์ํ์ ํ์๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌ
์ด๋ Enum ๋ฆฌํฉํฐ๋ง์ ์งํํ๊ฒ ๋ ๊ฐ์ฅ ํฐ ์์ธ์ด๋ค. ๊ธฐ์กด ํ๋ก์ ํธ์ ์๋ฆผ ํํธ๋ ๋ฉ์์ง Content๋ฅผ Dto์ ํฌํจ์ํค๊ณ ์ Dto์ ์์ฑ์์์ NotificationTopic์ด๋ผ๋ Enum ๊ฐ์ ๋ฐ๋ผ Content๋ฅผ ์ค์ ํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด ์์๋ค.ํ์ง๋ง ์๋ ์ฝ๋์ ๊ฐ์ด ์์ฑ์๊ฐ ๋ง์ ์ผ์ ํ๋ ๊ฒ์ ์ฝ๋์ ์ ์ง๋ณด์์ฑ๊ณผ ๊ฐ๋ ์ฑ ์ธก๋ฉด์์ ์ข์ง ์๊ณ ์ฝ๋์ ๋ณต์ก์ฑ์ ์ฆ๊ฐ์ํค๋ฉฐ ๊ฐ์ฒด ์์ฑ์ ์ฑ ์์ ๋ฒ์ด๋ ๋ ผ๋ฆฌ๋ฅผ ํฌํจํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์๋์ ๊ฐ์ด NotificationDto์ ์์ฑ์๋ ์ด๊ธฐํ์ ์ฑ ์๋ง ๊ฐ์ง๊ณ , Enum ๊ฐ์ ๋ํ ์ํ์ ํ์๋ฅผ Enum์ ์์ง์ํจ๋ค๋ฉด Enum์ ์ํ๊ฐ ์์ , ์ถ๊ฐ๋ ๋ ์ฑ ์์ด ์๋ ํ ํด๋์ค ๋ฉ์๋์ ๋ณ๊ฒฝ์ ๋ง์ ์ ์์ ๊ฒ์ด๋ค.
ํ์๋ฅผ Enum์ ํฌํจ์ํค๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ถ์ ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ์์๋ณ๋ก ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๊ณผ Function์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ํด๋น ํ๋ก์ ํธ์์๋ Java11์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ Function ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌํฉํฐ๋ง์ ์งํํ๋ค.
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ํ ์ฝ๋์ธ์ง๋ฅผ ์ฒดํฌํ๊ณ ๊ฒฝ๊ณํ๋ ์ต๊ด์ ํ์์ฑ์ ์ฒด๊ฐํ ์ ์์๋ค.