[자바] enum 하나가 if 문 여러개 보다 낫다.
최근 자바 개발을 하면서 enum을 정말 편하고 안전하게 사용했던 경험 이있습니다.
1. 예시
실제랑 전혀 관련 없도록 포켓몬으로 예를 들면
- 타입: 풀, 번호 1 - 이상해씨
- 타입: 불, 번호 4 - 파이리
- 타입: 물, 번호 7 - 꼬부기
타입, 번호 정보를 가지고 포켓몬의 이름을 구분하는 메서드를 작성했습니다.
그런데, 이렇게 하다보니 쓸데없이 if문 중첩만 늘어났습니다.
그리고, 어딘가에서 누군가는 if문 다르게 사용할것 같은 불안감이 들었습니다.
마지막으로, 코드 많이 작성하는거 안좋아해서 정말 정말 줄이고 싶었습니다.
public String getPokemonName (Pokemon pokemon) {
String name = "";
if(pokemon.getType().equals("grass") && pokemon.getNumber() == 1) {
name = "이상해씨";
}
else if(pokemon.getType().equals("fire") && pokemon.getNumber() == 4) {
name = "파이리";
}
lse if(pokemon.getType().equals("water") && pokemon.getNumber() == 7) {
name = "꼬부기";
}
return name;
}
class Pokemon {
private String type;
private int number;
}
2. enum 을 사용하자
비슷한 고민을 하신분들이 있을것이라 생각하고 찾아보았습니다. 우아한 형제들 블로그의 Java Enum 활용기 을 적극 참고했습니다.
- enum 클래스에 식별자 작성
- 스트림, 람다를 통해 식별자 필터링
- 식별자에서 이름 반환
import java.util.Arrays;
enum Pokemon {
bulbasaur("이상해씨", "grass", 1),
charmander("파이리", "fire", 4),
squirtle("꼬부기", "water", 7),
missingno("미씽노", "normal", 0);
private String name;
private String type;
private int number;
Pokemon(String name, String type, int number) {
this.name = name;
this.type = type;
this.number = number;
}
// 타입, 번호를 기준으로 식별자 필터링
public static Pokemon getPokemon (String type, int number) {
return Arrays.stream(Pokemon.values())
.filter(x -> x.type.equals(type) && x.number == number)
.findAny()
.orElse(missingno);
}
// 필터링된 식별자의 이름 반환
public static String getPokemonName (String type, int number) {
return getPokemon(type, number).getName();
}
public String getName() {
return this.name;
}
}
class Main {
public static void main(String[] args) {
String name = Pokemon.getPokemonName("grass", 1);
System.out.println("name " + name);
}
}
3. 장점
개인적으로 느낀 장점은
1) 람다 필터링이 if 문보다 안전하다.
2) 시간 복잡도는 유사하다.
3) enum 자체가 싱글톤이기 때문에 어디에서나 불러서 사용가능하다.
4) lombok을 사용하면 코드가 정말 더 줄어든다.
5) 유지보수 하기 쉽다. 식별자 하나만 더 넣으면 된다.
4. 참고
Author And Source
이 문제에 관하여([자바] enum 하나가 if 문 여러개 보다 낫다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@skyepodium/enum-하나가-if-문-여러개-보다-낫다저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)