특정 값을 증가시키는 로직 구현을 리팩토링해라.

2017-11-08 08:33

오늘 리뷰할 코드는 로또 기능을 구현하는 과정에서 나온 코드이다.

요구사항은 다음과 같다. n장의 로또를 구매했다. 당첨 번호와 일치하는 갯수가 3개 이상인 경우 일치하는 갯수별로 로또 수를 구하는 것이다.

예를 들어 100장을 구매한 결과를 다음과 같이 얻고 싶다. * 3개 일치 - 5장 * 4개 일치 - 2장 * 5개 일치 - 0장 * 5앨 일치, 보너스 볼 일치 - 0장 * 6개 일치 - 0장

이와 같이 구현하려면 로또 등수에 따라 일치하는 갯수를 관리해야 한다. 이 요구사항을 다음과 같이 구현했다. 다음 코드에서 WinValue는 로또 등수를 관리하는 enum이다.

다음 코드를 리팩토링한다면 어떻게 하겠는가?

public class WinPrice {
    private HashMap<WinValue, Integer> winPrices = new LinkedHashMap<WinValue, Integer>();

    public WinPrice() {
        winPrices.put(WinValue.FIFTH, 0);
        winPrices.put(WinValue.FOURTH, 0);
        winPrices.put(WinValue.THIRD, 0);
        winPrices.put(WinValue.SECOND, 0);
        winPrices.put(WinValue.FIRST, 0);
    }

    public void addMatchCount(int matchNum, boolean bonusBall) {
        if (matchNum >= 3) {
            WinValue winValue = valueOf(matchNum, bonusBall);
            int matchCount = winPrices.get(winValue);
            matchCount++;
            winPrices.put(winValue, matchCount);
        }
    }
}

위 샘플 예제는 코드스쿼드 에서 새롭게 진행 중인 마스터즈 코스에서 발췌한 코드입니다. 코드스쿼드의 마스터즈 코스는 코드 리뷰 방식의 개인별 맞춤 학습 방법입니다.

3개의 의견 from FB

0개의 의견 from SLiPP

의견 추가하기

연관태그

← 목록으로