[3주차] 블랙잭 본문

우아한테크코스 4기/코드리뷰

[3주차] 블랙잭

giron 2022. 3. 18. 10:35
728x90

1. 자료구조를 사용하자

Queue!

여러 값들을 담을 때 생각없이 매번 List를 쓰는 버릇을 고쳐야겠다. 적절한 자료구조를 사용하면 코드가 많이 줄여지고 깔끔해진다.

2. 정적 팩토리 매서드 네이밍

Um..

정적 팩토리 메서드 명명 규칙

  • from : 매개변수 하나를 받아서 해당 타입의 인스턴스를 반환하는 형변환 메서드
    ex) Date date = Date.from(instant);
  • of : 매개변수 여러개를 받아서 적합한 타입의 인스턴스를 반환하는 집계 메서드
    ex) Set<Rank> cards = EnumSet.of(JACK, QUEEN, KING);
  • valueOf : from과 of의 더 자세한 버전
    ex) BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE);
  • instance or getInstance : 동일한 인스턴스를 반환하는 메서드 (Singleton)
    ex) StackWalker luke = StackWalker.getInstance(option);
  • create or newInstance : 새로운 인스턴스를 반환하는 메서드
    ex) Object array = Array.newInstance(classObject, length);
  • getType : getInstance와 같으나, 해당 클래스의 타입이 아닌 정의한 타입을 반환하는 메서드
    ex) FileStore fs = Files.getFileStore(path);
  • newType : newInstance와 같으나, 해당 클래스의 타입이 아닌 정의한 타입을 반환하는 메서드
    ex) BufferedReader br = Files.newBufferedReader(path);
  • type : getType과 newType의 간결한 버전
    ex) List litany = Collections.list(legacyLitany);

3. Stream.forEach() 보다 for-loop를 사용하자.

Stream.forEach()는 for-loop에 비해 성능이 안좋다.  단순히 `System.out.println()`을 하지 않은 이상은 사용하지 않는게 좋다.
왜냐하면 내부 반복(Internal iteration)을 사용하면 겉으로는 드러나지 않지만, 내부적으로 JVM과 라이브러리가 할 일이 많아지기 때문이다.

 

4. 내부 매서드를 재사용하자

https://github.com/woowacourse/java-blackjack/pull/226#discussion_r826117846

&nbsp;매서드&nbsp;재사용
내 질문!

리뷰어 또링의 명쾌한 답변으로 바로 납득을 해버렸다.😲

initCards()는 카드 초기화를 위해 두 장의 카드를 뽑는 메서드고, drawOneCard()는 한 장의 카드를 뽑는 메서드니, drawOneCard()의 내부 로직이 변경되면 initCards()또한 변경되는 것이 맞지 않을까요?만약 뽑고 카드를 다시 반납하도록(deck에서 삭제가 되지 않도록) 요구사항이 변경된다면 drawOneCard()만 변경해주면 되는 이점이 있을 것 같아요. 이게 바로 중복을 제거함으로써 유지보수가 편해지는 것이구요. 😃

5. 정적 팩토리 매서드를 만들면 생성자는 항상 private으로 바꾸자!

public Card()로 되어있다..

생성자를 private으로 막아줌으로써 다른 개발자들이 접근하지 못하게 하여 정적팩토리매서드와 생성자의 혼용을 막자.

(자꾸 까먹어서 다시 한번 상기한다는 생각으로 적어둔다.)

6. DTO의 위치?

https://tecoble.techcourse.co.kr/post/2021-04-25-dto-layer-scope/

정답은 역시 없는것 같다. 

Reference

 

728x90

'우아한테크코스 4기 > 코드리뷰' 카테고리의 다른 글

레벨2 - 지하철 노선도  (0) 2022.05.16
레벨2 - 체스  (0) 2022.05.02
[4주차] 체스 - level1 마지막 미션  (0) 2022.04.08
[2주차] 로또  (0) 2022.03.08
[1주차] 자동차 구현  (0) 2022.02.26
Comments