Skip to content

Latest commit

 

History

History
104 lines (77 loc) · 4.49 KB

[로또 미션] 레넌 최종 리뷰 정리.md

File metadata and controls

104 lines (77 loc) · 4.49 KB

Static method vs Instance method

함수

  1. static 메소드는 인스턴스에서 호출되는 메소드가 아니다보니 사용자가 Lottos 코드나 별도의 API 문서를 찾아보지 않는 이상 그 존재를 눈치채지 못할 수 있다. 주관적이긴 하지만, Instance 메소드가 의미를 이해하기에도 더 직관적이다.

  2. static method는 객체 지향에서 멀어진다.

  3. static 멤버는 사용을 하던 사용하지 않던 프로그램의 시작과 끝까지 메모리 내에 존재한다.

  4. static 메소드는 오버라이딩이 불가능하다.

  5. 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 클래스는 로또를 한번 구입하면 새 로또를 구입할 수 없고, 수명이 다하게 된다.
  • 생성자 대신 메소드를 이용하면 여러 번의 로또 구입을 처리할 수 있게 되었다. -> 재사용 용이




컬렉션(List, Map 등)을 사용할 땐 새 컬렉션으로 넘겨주자

아키텍쳐





Map에서 값을 가져올 때 null 값을 생각하자

Collection

  • https://github.com/woowacourse/java-lotto/pull/473/files/634f060878769b0cf29be0601ecbd823f87db7fd#r820221504
  • Map<Rank, Integer> 을 포장한 일급컬렉션 RankCount를 만들었다. 이 일급컬렉션에서 해당 랭크의 갯수의 값을 불러오는 메소드 getEachRankCount(rank)를 사용한다. 이 클래스 외부에서 null 값이 나오지 않도록 Map을 코드로 작성하여 일급컬렉션을 만들어주었지만, 다른 Map이 들어올 경우를 대비하여 null 일 경우를 따로 처리해주는 것이 안전하다.




컨트롤러의 테스트

Test

input test 하는 법