본문 바로가기
우아한테크코스

우테코 프리코스[BE 7기] 3주차 회고

by CodingMasterLSW 2024. 12. 27.

3주차 미션 : 로또

미션 보기 ( 7기 레포에는 설명이 없어 6기 레포로 대체합니다)

https://github.com/woowacourse-precourse/java-lotto-6

 

GitHub - woowacourse-precourse/java-lotto-6

Contribute to woowacourse-precourse/java-lotto-6 development by creating an account on GitHub.

github.com


3주차는 개인적으로는 너무 만족스러운 한 주 였다. 2주차에서 적용하려고 했지만, 이해도가 부족했던 부분들

  • Dependency Injection
  • 일급컬렉션
  • Factory 패턴

에 대해 이해를 했고, 3주차 미션에 적용했기 때문이다!
다만 Stream의 경우 아직 손에 익지 않아 계속해서 적응해 나가야 할 것 같다ㅜㅜ

머릿속으로 1차적으로 for문을 적고, 이후에 stream으로 작성하는 걸 의식적으로 연습중인데, 아마 계속 연습하다보면 무의식적으로 for문 대신 stream을 작성하지 않을까? 라는 생각이 들기도 한다. 

 

2주차에서 사람들과 코드리뷰를 하면서 of(), from() 과 같은 메서드들을 볼 수 있었다.
어떤 코드인지 궁금해서 물어보고 찾아본 결과, 이 메서드들은 정적 팩토리 메서드 라는 이름을 가지고 있었다!

아주 유명한 책인 '이팩티브 자바' 에서는 이런 말을 하고 있다.

생성자 대신 정적 팩토리 메서드를 고려하라

음... 좋은건 알겠는데 어떤 장점이 있을까? 간단하게 정리하자면

  • 생성자가 이름을 가질 수 있다
  • 호출할 때 마다 새로운 객체를 생성할 필요가 없다.
  • 객체 생성을 캡슐화할 수 있다

자세히 알고 싶다면, 하단의 글을 참고해보자

https://tecoble.techcourse.co.kr/post/2020-05-26-static-factory-method/

 

정적 팩토리 메서드(Static Factory Method)는 왜 사용할까?

tecoble.techcourse.co.kr

 

이야기가 다른 곳으로 새버렸는데, 결국 정적 팩토리 메서드를 3주차 과제에 도입해보고 싶었고, 이것도 성공했다!

도입하고 싶은걸 전부 도입해보고, 이해도 전부 했다. 이게 즐기면서 프로그래밍 하는거구나! 라고 느끼기도 했다.
(뭔가 실시간으로 내 실력이 늘어나는게 느껴져서 재밌었음)

여튼 도입하고 싶은 기술 전부 도입하고, 요구사항도 내 나름대로 완벽하게 구현했다고 생각해 뿌듯했다.
하지만 늘 그렇듯, 새로운 궁금증 또한 생겨났다.

 

private 메서드는 테스트를 어떻게 하지?

 

public class LottoController {

    private final LottoService lottoService;

    public LottoController(LottoService lottoService) {
        this.lottoService = lottoService;
    }

    public void start() {
        List<List<Integer>> lottos = processTicketPurchase();
        generateWinningNumbersAndDisplayResult(lottos);
        calculateAndPrintProfit();
    }

 

start() 라는 하나의 public 메서드가 열려있고, 하단에 10개의 private 메서드가 있다.

기능 단위로 코드를 짰다고 한다면, 
processTicketPurchase(),
generateWinningNumbersAndDisplayResult(lottos);
calculateAndPrintProfit();

이 클래스들은 public으로 열어놔야하는걸까? start() 안에 사용하니까, private으로 닿아놨는데, 
그럼 테스트코드는 어떻게 작성하지? 라는 의문 또한 생겨났다.

테스트 코드를 짜기 위해 public으로 바꿔...?는 진짜 아닌 것 같았고, 고민이 참 많았다.
아마 단위테스트가 아닌 기능테스트를 나눠서 해봐야하지 않을까? 생각하는데 고민을 해봐야겠다.

쨋든 만족스러운 3주차였다!


TIL (Today I Learn)

확실하게 이해한 부분:

  • 일급 컬렉션
  • Factory 패턴
  • 정적 팩토리 메서드

아직 연습이 필요한 부분:

  • stream

다음 미션에서 해결해야 할 부분: (코드리뷰를 통해 사람들과 논의 후 추가하기)

  • private 메서드의 테스트 코드에 대한 의문점 및 controller 테스트 코드는 어떻게 작성해야 할까?

https://github.com/CodingMasterLSW/java-lotto-7

 

GitHub - CodingMasterLSW/java-lotto-7

Contribute to CodingMasterLSW/java-lotto-7 development by creating an account on GitHub.

github.com

branch - CodingMasterLSW