- woowacourse/java-lotto#473 (comment)
- 수동로또와 자동로또를 만들어서 두 로또를 더하는(합치는) 메소드를 만들어야 하는 상황
-
static 메소드는 인스턴스에서 호출되는 메소드가 아니다보니 사용자가 Lottos 코드나 별도의 API 문서를 찾아보지 않는 이상 그 존재를 눈치채지 못할 수 있다. 주관적이긴 하지만, Instance 메소드가 의미를 이해하기에도 더 직관적이다.
-
static method는 객체 지향에서 멀어진다.
-
static 멤버는 사용을 하던 사용하지 않던 프로그램의 시작과 끝까지 메모리 내에 존재한다.
-
static 메소드는 오버라이딩이 불가능하다.
-
static 메소드는 속도가 빨라지고, 반복적인 사용에는 효율적이다. 정적 팩토리 메소드 등은 판단에 따라 활용할 수 있다.
https://kellis.tistory.com/127
https://tecoble.techcourse.co.kr/post/2020-07-16-static-method/
- woowacourse/java-lotto#473 (comment)
- 내부 동작과 관련된 이름으로 짓는다.
- 이름은 구체적이어야한다.
- 모호하거나 하나 이상의 목적으로 사용될 수 있는 이름 X
- 보편적으로 쓰이는 단어를 사용하는 것이 직관적
- woowacourse/java-lotto#473 (comment)
- 메소드 명에 and가 들어간다는 것은 메서드가 너무 많은 일을 하고 있다는 의미이므로 메소드명을 더 적절한 이름으로 바꾸거나, 메서드를 분리해야한다.
- woowacourse/java-lotto#473 (comment)
- 컨트롤러에서 숫자 검증, split 등을 처리해주었는데, 뷰나 모델에 있어야할 책임이 컨트롤러에 있는 것은 아닌지 고민해 보아야한다.
- 뷰가 바뀌어도 숫자 검증, split 작업이 동일하게 필요하다면, controller의 관심사이므로 controller의 역할이다.
- 뷰가 바뀌어도 위와 같은 작업이 필요하지 않을 수 있다면, 이는 view에서 해야하는 역할이다.
- woowacourse/java-lotto#473 (comment)
- 처음에는 LottoMachine의 생성자로 Money, LottoCount 등을 받아 LottoMachine 안의 필드로 로또를 생성해주었다. 생성자로 로또를 구입하게 되면 LottoMachine 클래스는 로또를 한번 구입하면 새 로또를 구입할 수 없고, 수명이 다하게 된다.
- 생성자 대신 메소드를 이용하면 여러 번의 로또 구입을 처리할 수 있게 되었다. -> 재사용 용이
- https://github.com/woowacourse/java-lotto/pull/473/files/634f060878769b0cf29be0601ecbd823f87db7fd#r820221526
- 방어적 복사, unmodifiable collection을 활용해서 외부에서 값이 바뀌는 것을 막을 수 있다.
- https://github.com/woowacourse/java-lotto/pull/473/files/634f060878769b0cf29be0601ecbd823f87db7fd#r820221504
- Map<Rank, Integer> 을 포장한 일급컬렉션 RankCount를 만들었다. 이 일급컬렉션에서 해당 랭크의 갯수의 값을 불러오는 메소드 getEachRankCount(rank)를 사용한다. 이 클래스 외부에서 null 값이 나오지 않도록 Map을 코드로 작성하여 일급컬렉션을 만들어주었지만, 다른 Map이 들어올 경우를 대비하여 null 일 경우를 따로 처리해주는 것이 안전하다.
- controller test에 관한 피드백1
- controller test에 관한 피드백2
- 단위 테스트는 가능한 모든 코드에서 하는 것이 좋다.
- 테스트 커버리지(프로덕션 코드에서 테스트가 이루어지는 비율)를 코드 퀄리티의 지표로 삼기도 하기 때문에, 컨트롤러에서도 테스트 해주는 편이 좋다.