Git Product home page Git Product logo

racingcar_-personal-review's Introduction

자동차 경주 게임

진행 방법

  • 자동차 경주 게임 요구사항을 파악한다.
  • 요구사항에 대한 구현을 완료한 후 자신의 github 아이디에 해당하는 브랜치에 Pull Request(이하 PR)를 통해 코드 리뷰 요청을 한다.
  • 코드 리뷰 피드백에 대한 개선 작업을 하고 다시 PUSH한다.
  • 모든 피드백을 완료하면 다음 단계를 도전하고 앞의 과정을 반복한다.

온라인 코드 리뷰 과정

2021-04-07 step2 진행

  • 문자열 계산기 enum구현 부분 복습

2021-04-08 step2 진행

  • 간단회고 : 인터페이스를 통해 확장한 enum을 넣어주려고 했는데, (방법도 어렵고) 생각해보니 enum 안에 상수값을 추가하는게 새로운 enum 만드는 것보다 편한듯..

2021-04-09 step2 진행 (문자열 계산기 완성)

  • 간단회고 : 완성은 했는데 StringCalculator 객체가 너무 많은 역할을 하고 있는 거 같다. 문자열 분리 역할, 유효성 검사 역할 등 계산 외의 기능이 많다. 이 기능들을 분리할 수 있는 방법을 생각해 보았는데, Expression이라는 객체를 만들어서 수식관련한 문자열 분리, 유효성 검사 등을 담당하게 하면, 좀 더 객체지향적이지 않을까 하는 생각을 해본다. 또한 Expression은 수식에 대한 내용인데, 수식에 대한 유효성 검사나 문자열 분리 기능이 요건에 따라서 바뀔 수도 있다고 생각하기 때문에 해당 기능들은 인터페이스 로 구현하여 추후 확장성을 고려하면 더 좋지 않을까 하는 생각을 해보았다.

2021-04-10 step2~3 진행

  • 문자열 계산기 인터페이스로 구현으로 시도
  • step3 시작

2021-04-11 step3 진행

  • step3 진행

2021-04-12 step3 진행

  • step3 진행

2021-04-14 step3 진행

  • 간단회고 : 결국 도메인 로직들은 개별 단위별로 구현을 했는데, 뷰와 합치는 부분에서 또 애매해진다. 결합하는 부분이 항상 어색하다.

2021-04-15 step3 진행

  • 간단회고 : 그리기를 위해서는 게임이 전부 진행되고 난 결과를 가져오는게 아니라 진행할때마다 리스트에 저장해서 가져오든지, 그리면서 진행이 되든지 둘중 하나의 방식으로 해야 한다. 나는 일단 기존 구현하던게 한번에 진행하던거여서 굳이 바꾸자면 진행할때마다 리스트에 저장하는 편이 쉬워서 그렇게 진행하였다.

2021-04-18 리뷰 받은 내용 정리

  1. GameConsole에 비즈니스 로직이 있는데 service로 두면 좋을까?
  2. 팩토리 패턴이 꼭 필요할까?
  3. 커스텀 Exception을 사용했는데 엄밀히 따지면 IllegalStateException을 받는건 어떨까? ->IllegalArgumentException 인가?
  4. CarNames의 필요성?
  5. MoveStatgy를 생성자로 받을 필요는? -> 추후 generator가 바뀔 걸 고려했는데, 굳이?
  6. NumberGenerator의 필요성?
  7. Position 불변으로 하는게 낫지 않을까? -> 이거 좀 영상을 봐야할듯..
  8. findWinner 에서 List를 받는데 Cars만 받아도 되지 않을까?
  9. Contests에서 Stream으로 변수를 두었는데, 컬렉션으로 바꾸기 (스트림은 한번 사용하면 닫힘 -> 동일 메소드 두번 호출하면 해당 스트림 못 불러온다는 뜻)
  10. getter 사용 줄이기
  11. 인터페이스 하나면 FunctionalInterface 사용하기
  12. Car의 move메소드에서 position 값을 가져와서 다시 계산하고 다시 넣는데, 애초에 그냥 Position에서 처리하게 가능하지 않을까?
  13. Scanner 같은 경우도 외부에서 넣어주게 하는게 좋다고 함 -> 내부에서 선언하면 한번 사용하고 두번째는 안되는 오류? 같은게 있을 수도..
  14. Winners 클래스에 finalRecords.getCars() 이것 리팩토링 필요해 보임
  15. getPosition 부분도...
  16. findWinner 마지막 new ArrayList 불필요
  17. RandomGeneratorTest 필요한가? Random 클래스를 검증하는 것밖에...
  18. TestStratgy 꼭 필요한가? -> 테스트 코드에서 직접 구현 하는 방법도 있고, functional 인터페이스 쓰면 테스트에서 () -> 이런식으로 람다식 사용이 가능해서 ()->true 고정값 이렇게 줄 수 있음.
  19. 불필요한 조건문은 쓰지 말고 바로 return에 true/false 줄 수 있도록 하자

2021-04-18 리팩토링

  • 간단회고 : 필요한 객체 이상으로 생성하는건 과하다 라는걸 많이 느꼈음. 근데 이 과한 정도를 지키기가 힘든것 같음.

2021-04-29

  • 간단회고 : tdd를 할 때, 애초에 도메인 지식이 없으면 일단 한번 짜보고, 도메인 지식을 익힌 후에 작성한 코드를 다 버리고 다시 TDD 방식으로 짜보면 된다고 한다. tdd도 도메인 지식이 일단 쪼끔(?) 은 있어야... 어쩐지 완전 처음짤때는 테스트 코드 짜기 막막하더라니...

2021-05-01

  • 간단회고 : 하루종일 생각했는데, 필요한 데이터를(메시지?) 메소드의 인수로 받는게 더 나은 방식인지 생성자를 통해서 받아서 저장해두고 쓰는게 나은 방식인지가 궁금하다.

2021-08-22

  • 다시 해보기

2021-09-08

  • 요구사항 정리
  1. 자동차 대수와 시도 횟수를 입력받음
  2. 시도 횟수 동안 자동차들은 각각 전진 혹은 멈춤
  3. 전진 조건은 0 ~ 9 에서 랜덤값 구한 후 랜덤 값이 4이상일 경우 전진, 그외 멈춤
  4. 자동차 상태 출력 (시도 횟수만큼 출력됨)
  5. 자동차 상태를 출력하기 위해선 자동차는 현재 위치값을 가지고 있어야 함.

racingcar_-personal-review's People

Contributors

bbbnam avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.