https://github.com/nbalance97/java-racingcar/tree/step1

 

GitHub - nbalance97/java-racingcar: 자동차 경주 게임 미션 저장소

자동차 경주 게임 미션 저장소. Contribute to nbalance97/java-racingcar development by creating an account on GitHub.

github.com

 

미션을 하기에 앞서, 미션에 대한 설명을 해주시는데 미션은 페어 프로그래밍으로 진행이 된다고 한다!! 이번 생에 페어 프로그래밍은 처음이라, 많이 어색하기도 하고 서투른 점이 더 많아 어떻게 해야할 지 몰랐으나, 다행히 이번 페어인 레넌이 나에게 많이 맞추어 주어서 쉽게 미션을 해결할 수 있었지 않았나 싶다..ㅋㅋㅋ 레넌에게 압도적 감사를.

 

TDD


테스트 코드부터 작성하고, 테스트 코드를 통과하도록 구현하는 방식으로 개발하는 방법을 말한다. 평소 이론적으로는 TDD, TDD 하면 대충은 알고 있었으나, 실제로 TDD 방식으로 구현해 보니 테스트 코드를 작성하는게 여간 어려운게 아닌 것 같다.

 

여담이지만 처음 TDD로 개발하다 보니 테스트 작성 -> 테스트를 통과하는 최소 코드 작성 과정을 거치지 않고 테스트부터 많이 만들어 두고 테스트를 모두 통과하는 코드를 작성하는 방식으로 했었다..

 

이후 이론 수업을 들어보니 좀 많이 잘못되었다는걸 깨닫고 이후에는 테스트를 하나 작성하고 테스트를 통과하는 최소 코드를 작성하는 방식으로 진행하였다..ㅋㅋㅋㅋ😁😁

 

페어 프로그래밍


페어 프로그래밍은 인텔리제이의 Code with me 플러그인을 사용해서 진행하였다. 이 때, 본인은 윈도우 노트북을 사용하고 페어는 맥북을 사용하여 문제가 있지 않을까 걱정하였으나 다행히 문제가 없었다..ㅋㅋ  페어 프로그래밍에서는 두명이 각각 드라이버와 네비게이션의 역할을 담당한다.

 

드라이버란 키보드/마우스를 잡고 있는 사람, 네비게이터는 옆에 앉아서 함께 작업하는 사람 

 

페어 프로그래밍을 하면서 좋았던 점은 코딩을 하면서 계속해서 생각을 나누니 내가 생각치도 못한 부분을 페어가 커버해주는 느낌이 들어서 개인적으로는 정말 좋았으나.. 내 페어에게 미안한 점이 있다.

종종 네비게이터 역할을 맡을 때, 페어에게 이렇게 구현하는것이 어때요? 하고 제안을 한 다음 실제 구현을 다 하고 나니 어 이게 아닌가? 하고 수정하는 일이 좀 많았다..ㅠ퓨ㅠㅠ😂😂😂 이 점은 좀 공부를 더 해서 빨리 메꿔야 할 것 같다. 

 

코드 리뷰


배정된 리뷰어께 내 작은 코드를 보여드리고 평가를 받아보았다. 리뷰어에게 코드를 보여드리고 평가를 받는건 이번이 처음이라 긴장을 많이 했으나, 리뷰어께서 화가 나셨을지도 모르지만 엄청 친절하게 리뷰를 남겨주셔서 죄송하면서 감사한 마음이 들었다.. 리뷰어가 남겨주신 리뷰 중 기억에 남는 몇가지를 남겨보고자 한다.

 

컨벤션을 잘 지키자

상수와 일반 필드 사이의 개행이 없거나 메서드 사이에 개행이 없는 부분이 좀 있었다. 코딩을 하면서 이런 점을 좀 유의해서 봐야할 것 같다. 또한 배열을 반환하는 함수에서 단수형을 쓰지 말고 복수형을 써야 하는 점 등 네이밍에 유의해서 코딩을 해야 함에 유의!! (getWinner -> getWinners)

 

public String[] getWinner() {

요 친구를 아래 친구로 바꾸어 줌!!

public String[] getWinners() {

 

인스턴스의 최소화

인스턴스 필드에 불필요한 필드가 있는 문제점이 도출되어 꼭 필요한게 아니라면 인스턴스 필드를 최대한 줄여야 클래스의 응집력을 높일 수 있다고 피드백을 받았다. 이에 대체 클래스의 응집력이 무엇일까 하고 찾아보니 각각의 모듈이 고유의 기능을 잘 처리할 수 있는지를 나타내는 정도라고 한다.

 

이번 과제에서는 RandomNumberGenerator의 인스턴스를 RaceController 클래스의 필드에서 가지고 있게 했는데, 피드백을 보고 많이 고민해본 결과 RaceController의 필드에서 굳이 가지고 있어야 할 것 같지는 않고, car 클래스를 생성할 때 new RandomNumberGenerator()을 생성하는 방식으로 변경하였다. 

 

public class RaceController {
    private static final int DEFAULT_POSITION = 0;
    private List<Car> cars = new ArrayList<>();
    private RandomNumberGenerator randomNumberGenerator = new RandomNumberGenerator();

 

요 코드에서 randomNumberGenerator을 Car을 생성할 때 넣어주는 방식으로 구현했었는데, 해당 필드를 지워주고 생성자에서 생성하도록 변경하였다.

 

public void insertCarFromCarNames(String[] carNames) {
        for (String carName : carNames) {
            insertCar(new Car(carName, DEFAULT_POSITION, new RandomNumberGenerator()));

 

테스트 코드 디테일하게 작성

테스트 코드를 작성하는데 있어 정책이 드러나야된다는 피드백을 받았다. 자동차가 이동할 때 테스트의 이름을 그냥 단순하게 자동차_이동, 자동차_중지로 작성했는데, 피드백을 통해 테스트명을 랜덤값이_4이상이_나오면_자동차_이동 으로 바꾸었더니 훨씬 직관적인 테스트 이름이 된 것 같아 뿌듯한 경험이었다.


Lv 1의 첫번째 미션에서부터 스스로 많이 배우고 반성하게 된게 많았다. 코딩을 하면서도 스스로 이게 정말 좋은 코드인가? 메소드로 더 쪼갤순 없을까? 이 메소드가 정말 하나의 동작만 하고 있을까? 하고 계속해서 의심을 하는 스스로를 발견하게 되었으며, 데일리 미팅이나 수업때 참여하는 크루들의 모습을 보며 학습 욕구를 불태우게 되는 것 같다.. 피드백을 바탕으로 더 열심히 해서 좋은 개발자가 되어야 겠다😊

+ Recent posts