Count VO 포장 과정(로또)
돌아가면서 횟수가 줄어드는 VO포장 및 사용
📜 제목으로 보기
- Count VO 포장
- 줄어드는 횟수Count VO의 포장
- 미리 원시값도 줄어들 때 hasNext패턴을 만들어두었다.
- 메서드에서부터 파라미터로 전해지도록 Count 포장 (포장은 테매 인자에서부터~ )
- VO는 equals/hC부터
- count VO는 0까지는 허용해주도록 검증을 만든다. (for while문에서 0까지 간 뒤 0에서 탈출시킴)
- 새기준메서드 새로 만들어, 기존메서드 위로 위치이동후, 내용복붙후, 처리
- 값자리에는 포장.getter()를 -> 연산이 할만하면 바로 메세지를
- 값의 연산 -> 포장 안으로 잘라들고가서 this.값으로 연산
- 값의 재할당 -> VO에서는 연산만 들고 들어가면서 메서드를 만들고, 포장 = 는 그대로 둔다. -> 내부에서는this.값으로 연산한 뒤 =에 대해 새VO로 응답하는 [메세지]로 작성한다.
- 연산을 들고들어갔더라도 바깥에서는 포장변수 = 이 새 VO응답을 기다리고 있으므로 내부연산 결과를 포장해서 응답해준다.
- 포장전 기존메서드가 사용중이면 찾아가서, 수정해준다.
- 새 기준메서드 완성시, 포장검증을 메서드로 퉁치는 테스트(-1이하에서 에러)
- 자체 도메인Test생성후 Count VO 검사
- 줄어드는 횟수Count VO의 포장
Count VO 포장
줄어드는 횟수Count VO의 포장
미리 원시값도 줄어들 때 hasNext패턴을 만들어두었다.
- 내 패턴으로는 0을 허용하면서
더 큰 n부터 줄어들되 0이 아닐때까지, 즉, 1까지
도는 것이다.
public static List<Lotto> issueLottoByCount(int count) {
final List<Lotto> lottos = new ArrayList<>();
while (count != 0) {
count -= 1;
lottos.add(LottoFactory.issueLotto());
}
return lottos;
}
메서드에서부터 파라미터로 전해지도록 Count 포장 (포장은 테매 인자에서부터~ )
-
이름은 도메인Count로 만들어야한다. 포장하는 순간, 대명사가 아니다.
-
포장하기
public class LottoCount { private final int value; public LottoCount(final int value) { this.value = value; } }
VO는 equals/hC부터
count VO는 0까지는 허용해주도록 검증을 만든다. (for while문에서 0까지 간 뒤 0에서 탈출시킴)
public LottoCount(final int value) {
if (value < 0) {
throw new IllegalArgumentException("0보다 작을 수 없습니다.");
}
this.value = value;
}
새기준메서드 새로 만들어, 기존메서드 위로 위치이동후, 내용복붙후, 처리
값자리에는 포장.getter()를 -> 연산이 할만하면 바로 메세지를
잘라들고가서 this.값으로 연산
값의 연산 -> 포장 안으로 - getter지우고 메세지보내기
- 만약, 지우고 빨간메서드가 남아있다면 그대로 정의해도 된다.
- 여기선 연산
!=0
이 남아있으니,그에 맞는 의미있는 메서드
를 지어준다.0
=Finish가!=
아직 Not이냐 - 남은 연산을 잘라내서 -> 메서드만들고 -> 내부에서
this.값으로 잘라낸 연산 처리
연산만 들고 들어가면서 메서드를 만들
고, 포장 =
는 그대로 둔다. -> 내부에서는this.값으로 연산
한 뒤 =
에 대해 새VO로 응답
하는 [메세지]로 작성한다.
값의 재할당 -> VO에서는 -
-= 1
을 포장 처리하려면-
-1
을 내부로 들고 들어가서this.값 -1
으로 연산 -
=
은 새 VO를 반환
-
-
=
놓아두고,-1
만 들고 들어가면서,연산과 관련된 메서드명
으로 메세지를 보낸다.
바깥
에서는 포장변수 =
이 새 VO응답을 기다리고 있으므로 내부연산 결과를 포장해서 응답
해준다.
연산을 들고들어갔더라도 - final을 풀어 재할당 가능하게 해준다.
public static List<Lotto> issueLottoByCount(LottoCount lottoCount) {
final List<Lotto> lottos = new ArrayList<>();
while (lottoCount.isNotFinish()) {
lottoCount = lottoCount.decrease();
lottos.add(LottoFactory.issueLotto());
}
return lottos;
}
포장전 기존메서드가 사용중이면 찾아가서, 수정해준다.
-
count가 사용중인데, 일단
money.getCount()
의 반환값도 원시count으로 바꿔준다.public int getCount() { return this.money / 1000; }
public LottoCount getCount() { return new LottoCount(this.money / 1000); }
public static List<Lotto> issueByMoney(final Money money) { final LottoCount count = money.getCount(); return LottoFactory.issueLottoByCount(count); }
새 기준메서드 완성시, 포장검증을 메서드로 퉁치는 테스트(-1이하에서 에러)
자체 도메인Test생성후 Count VO 검사
- 0까지 허용하여 음수 생성자 에러
@Test
void create() {
assertAll(
() -> {
assertDoesNotThrow(() -> new LottoCount(1));
assertDoesNotThrow(() -> new LottoCount(0));
assertThatThrownBy(() -> new LottoCount(-1));
}
);
}
- 1개 뽑 + 감소된 것 뽑 -> 감소된 로직후 동일한지 비교
@Test
void decrease() {
final LottoCount lottoCount = new LottoCount(1);
final LottoCount expected = new LottoCount(0); // 감소된 것 미리 뽑기
final LottoCount actual = lottoCount.decrease();
assertThat(actual).isEqualTo(expected);
}