TDD - 자동차 경주 게임 구현

PPakSSam·2022년 1월 5일
0
post-thumbnail

자동차 경주 게임을 TDD로 구현하면서 그리고 피드백 영상을 보면서 그동안 알지 못했던 다양한 것을 얻을 수 있게 되었다. 이 포스트는 이에 대한 정리이다.

순서

  1. 자동차 경주 게임 구현 - Code Convention
  2. 자동차 경주 게임 구현 - 객체를 객체스럽게 리팩토링 하자
  3. 자동차 경주 게임 구현 - 비즈니스 로직과 UI의 분리
  4. 자동차 경주 게임 구현 - 테스트 코드에서의 팁

Code Convention

code convention이란 관리하기 쉬운 코드를 작성하기 위한 코딩 스타일 규약이다.
여러 개발자가 협업해야하는 상황에서 일종의 규약이 있다면, 유지보수 및 가독성이 좋아져 협업이 쉬워진다.

1. 상수의 위치는 어디에 두는 것이 좋을까?

상수, 클래스 변수, 인스턴스 변수, 생성자 순으로 위치한다.

public class CarName {
	
    // 상수
    private static final int CAR_NAME_MIN_LENGTH = 1;
    private static final int CAR_NAME_MAX_LENGTH = 5;
	
    // 인스턴스 변수
    private final String name;
	
    // 생성자
    private CarName(String name) {
        this.name = name;
    }
}

2. 공백 라인을 의미있게 사용하자

공백라인은 문맥을 분리하는 부분에 사용한다.

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("자동차 대수는 몇 대 인가요?");
        [...]

        //경주 시작
        for(Car car: racingGame.getCarList()) {
            racingGame.racing(tryCount, car);
        }

        //결과 출력
        racingGame.printCarsDistance();
    }
}

3. Space도 고려하자

for (int i=10; i<1000; i++) {
    assertTrue(checkMove(2, i));
    assertTrue(checkMove(20, i));
    assertTrue(checkMove(200, i));
}

위의 코드를 보고 어색함이 느껴지는가? 그렇다 띄어쓰기(space)가 제대로 되어있지 않음을 느낄 수 있다. 다음과 같이 작성해야 어색하지 않은 코드이다.

for (int i = 10; i < 1000; i++) {
    assertTrue(checkMove(2, i));
    assertTrue(checkMove(20, i));
    assertTrue(checkMove(200, i));
}

code format 기능은 Eclipse, Intellij 도구들의 formatting 기능을 활용할 것을 추천

네이밍

내 자신, 다른 개발자와의 소통을 위해 가장 중요한 활동 중의 하나가 좋은 이름 짓기이다.

객체지향 생활 체조 규칙 5: 줄여쓰지 않는다(축약 금지)

누구나 실은 클래스, 메소드, 또는 변수의 이름을 줄이려는 유혹에 곧잘 빠지곤 한다. 그런 유혹을 뿌리쳐라. 축약은 혼란을 야기하며, 더 큰 문제를 숨기는 경향이 있다.
클래스와 메소드 이름을 한두 단어로 유지하려고 노력하고 문맥을 중복하는 이름을 자제하자.
클래스 이름이 Order라면 shipOrder라고 메소드 이름을 지을 필요가 없다.
짧게 ship()이라고 하면 클라이언트에서는 order.ship()이라고 호출하며, 간결한 호출의 표현이 된다.


변수 네이밍

1. 변수 이름의 길이

변수의 이름을 짓는데 있어서 가장 중요한 고려사항은,
변수 이름이 변수가 표현하고 있는 것을 완벽하고 정확하게 설명해야 한다는 것이다.

이름은 가능한 구체적이어야 한다. 모호하거나 하나 이상의 목적으로 사용될 수 있는 일반적인 이름은 보통 나쁜 이름이다.

변수 이름의 길이가 평균적으로 10~16일 때 프로그램을 디버깅하기 위해서 들이는 노력을 최소화 할 수 있고, 변수의 평균 길이가 8~20인 프로그램은 디버깅하기 쉽다.

너무 긴 이름

numberOfPeopleOnTheUsOlympicTeam
numberOfSeatsInTheStadium
maximunNumberOfPointsInMordernOlympics

너무 짧은 이름

n, np, ntm
n, ns, nsisd
m, mp, max, points

적당한 이름

numTeamMembers, teamMemberCount
numSeatsInStadium, seatCount
teamPointsMax, pointsReco

2. 변수이름에서 한정자

많은 프로그램들은 계산된 값(총계, 평균, 최대값 등)을 보관하는 변수들을 갖는다.
만약 변수의 이름에 Total, Sub, Average, Max, Min, Record, String, Pointer 등의 한정자를 사용해야 한다면, 이름의 끝에 이런 수정자를 입력하는 것이 좋다.

나쁜 예

totalRevenue
totalExpense
averageRevenue
averageExpense

좋은 예

revenueTotal
expenseTotal
revenueAverage
expenseAverage

profile
성장에 대한 경험을 공유하고픈 자발적 경험주의자

0개의 댓글