문제 사항
배너의 타입이 있고, 배너의 타입들은 다음과 같이 구성되어 있습니다.
- 이벤트1
- 이벤트2
- 이벤트3
- 이벤트4
- 이벤트5
- 광고1
- 광고2
- 광고3
- 광고4
- 광고5
- …
여기에 하위 타입이 추가되며, 이벤트 타입 배너에만 하위 타입을 추가해야 합니다.
해결 방법
기존에 배너 타입을 별도로 정의하지 않아, ENUM 클래스로 추가했습니다. 또한 배너 타입을 ‘이벤트’, ‘광고’ 등으로 묶기 위해 *Group
ENUM 클래스를 추가했습니다.
BannerType Eunm
@Getter
public enum BannerType {
EVENT_1("이벤트1"),
EVENT_2("이벤트2"),
EVENT_3("이벤트3"),
EVENT_4("이벤트4"),
EVENT_5("이벤트5"),
AD_1("광고1"),
AD_2("광고2"),
AD_3("광고3"),
AD_4("광고4"),
AD_5("광고5"),
;
private String type;
BannerType(String type) {
this.type = type;
}
public static boolean isBannerType(String type) {
return Arrays.stream(BannerType.values())
.anyMatch(bannerType -> bannerType.getType().equals(type));
}
public static BannerType getBannerType(String type) {
return Arrays.stream(BannerType.values())
.filter(bannerType -> bannerType.getType().equals(type))
.findAny()
.orElse(null);
}
}
BannerTypeGroup Enum
@Getter
public enum BannerTypeGroup {
EVENT("이벤트", Arrays.asList(
BannerType.EVENT_1,
BannerType.EVENT_2,
BannerType.EVENT_3,
BannerType.EVENT_4,
BannerType.EVENT_5
)),
AD("광고", Arrays.asList(
BannerType.AD_1,
BannerType.AD_2,
BannerType.AD_3,
BannerType.AD_4,
BannerType.AD_5
));
private String type;
private List<BannerType> banners;
BannerTypeGroup(String type, List<BannerType> banners) {
this.type = type;
this.banners = banners;
}
public boolean isBannerType(BannerType bannerType) {
return banners.stream()
.anyMatch(banner -> banner == bannerType);
}
public static BannerTypeGroup findByBannerType(BannerType bannerType) {
return Arrays.stream(BannerTypeGroup.values())
.filter(bannerTypeGroup -> bannerTypeGroup.isBannerType(bannerType))
.findAny()
.orElse(null);
}
}
서비스에서 사용
BannerType bannerType = BannerType.getBannerType(banner_type);
BannerTypeGroup requestBannerType = BannerTypeGroup.findByBannerType(bannerType);
String eventTypeName = BannerTypeGroup.EVENT.name();
if (requestBannerType.name().equals(eventTypeName)) {
// 이벤트 배너인 경우만 하위 타입 저장
}