오늘 코드리뷰할 소스 코드는 로또 구현하는 과정에서 나온 코드를 기반으로 한다.
프로그래밍을 구현하다보면 enum을 사용하는 경우가 종종 있다. enum은 값을 가질 수 있으며, 해당 값과 일치하는 enum을 찾는 메소드를 자주 구현하게 된다.
다음 코드를 값에 해당하는 enum을 찾기 위해 switch/case 문을 사용하고 있다. 다음 코드의 valueOf 메소드를 switch/case문을 사용하지 않고 구현하도록 리팩토링한다.
public enum WinValue {
FIFTH(3, 5000, "5등"),
FOURTH(4, 50000, "4등"),
THIRD(5, 1500000, "3등"),
SECOND(5, 30000000, "2등(보너스 볼 일치)"),
FIRST(6, 2000000000, "1등");
private int matchNum;
[...]
WinValue(int matchNum, int price, String rankString) {
this.matchNum = matchNum;
this.price = price;
this.rankString = rankString;
}
public WinValue valueOf(int matchNum, boolean bonusBall) {
WinValue winValue = null;
switch (matchNum) {
case 3:
winValue = WinValue.FIFTH;
break;
case 4:
winValue = WinValue.FOURTH;
break;
case 5:
winValue = checkBonusBall(bonusBall);
break;
case 6:
winValue = WinValue.FIRST;
break;
default:
break;
}
return winValue;
}
}
위 샘플 예제는 코드스쿼드 에서 새롭게 진행 중인 마스터즈 코스에서 발췌한 코드입니다. 코드스쿼드의 마스터즈 코스는 코드 리뷰 방식의 개인별 맞춤 학습 방법입니다.
0개의 의견 from FB
3개의 의견 from SLiPP
enum의 경우 대부분의 stream은 다음과 같이 구현할 수 있겠네요.
본문의 enum 코드는 bonus ball을 체크하는 로직이 있어 다른 듯 하지만 위 Expression.of() 메소드에서 filter 부분만 수정해 준다면 똑같은 방식으로 구현할 수 있다.
프로그램에서는 expression에 대한 유일성을 보장하지 않으니 그 처리를 해야 한다는 것은 너무 과한가요
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.