Lotto Game


기본 템플릿: https://github.com/hyerin6/java-lotto/tree/master
내가 구현중인 코드: https://github.com/hyerin6/java-lotto


로또 게임을 만들어보자




1. 일급 컬렉션

Collection을 Wrapping하면서 Wrapping한 Collection 외 다른 멤버변수가 없는 상태를 일급 컬렉션이라 한다.

Wrapping 함으로써 다음과 같은 이점을 갖는다.
(1) 비즈니스에 종속적인 자료구조
(2) Collection의 불변성을 보장
(3) 상태와 행위를 한 곳에서 관리
(4) 이름이 있는 컬렉션

자세한 설명은 아래 두 글을 참고
https://jojoldu.tistory.com/412
https://woowacourse.github.io/javable/2020-05-08/First-Class-Collection




2. getter 줄이기

지금까지 거의 모든 프로젝트에서 멤버 변수 접근 제한자를 private로 설정하고
getter/setter을 이용해서만 접근이 가능하도록 했다.

모든 멤버 변수에 lombok을 사용해 getter/settter을 사용했었다.
무조건 모든 멤버 변수에 getter을 사용하는 게 좋은 건 아니라고 해서 공부해보려고 한다.

객체에 메시지를 보내 객체가 로직을 수행하도록 하자

객체는 메시지를 받으면 그에 따른 로직을 수행한다.
-> 객체지향 프로그래밍은 객체가 스스로 일을 하도록 하는 프로그래밍이다.

getter을 사용해 상태값을 꺼내 객체 외부에서 로직을 수행하거나 상태를 바꾸면
이는 객체스럽지 못한 것!
(Collection 인터페이스를 사용하는 경우 외부에서 getter메서드로 얻은 값을 통해 상태값을 변경할 수 있다.)

참고: https://woowacourse.github.io/javable/2020-04-28/ask-instead-of-getter




3. stream 사용

lotto game 구현에서 반복문은 전부 for문을 사용했는데
stream을 사용해보기로 했다.

우선 아래 부분만 수정해보자.


for(int i = 0; i < size; ++i) {  
    profit += ranks.get(i).getWinningMoney();  
}  


private static double getProfit(List<Rank> ranks) {             
    int profit = ranks.stream().mapToInt(Rank::getWinningMoney).sum();           
	return profit;           
}