본문 바로가기

IT/자바

자바 플레이그라운드 with TDD, 클린코드 강좌 후기 Day 2

반응형

학습 목표 : TDD 기반으로 프로그래밍법 메소드 분리 + 클래스를 분리 & 점진적으로 리팩토링하는 경험을 학습하고자 한다.

 

경험할 객체지향 생활 체조 원칙

  • 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기만 한다.
  • 규칙 2: else 예약어를 쓰지 않는다.
  • 규칙 3: 모든 원시값과 문자열을 포장한다.
  • 규칙 5: 줄여쓰지 않는다(축약 금지).
  • 규칙 8: 일급 콜렉션을 쓴다.

Clean Code 가이드

의미 있는 이름

  • 의도를 분명히 밝혀라
  • 그릇된 정보를 피하라
    • 서로 흡사한 이름을 사용하지 않도록 주의한다.
    • 유사한 개념은 유사한 표기법을 사용한다.
  • 의미 있게 구분하라
  • 인터페이스 클래스와 구현 클래스
    • 인터페이스 이름은 접두어를 붙이지 않는 편이 낫다고 생각한다.
      • 오히려 인터페이스를 ShapeFactory로 이름을 짓고 구현 클래스의 의도를 드러낼 수 있는 이름을 짓는 것을 추천한다.

클래스 이름

  • 클래스 이름과 객체 이름은 명사나 명사구가 적합하다.

메소드 이름

  • 메소드 이름은 동사나 동사구가 적합하다.
  • 생성자를 중복해 정의할 때는 정적 팩토리 메소드를 사용한다. 메소드를 인수를 설명하는 이름을 사용한다.
  • 개념 하나에 단어 하나를 사용하라

외부 코드 사용하기

  • API를 사용하는 사용자는 자신의 요구에 집중하는 인터페이스만 존재하기를 기대한다.
  • java.util.List, java.util.Map와 같은 collection을 외부에 노출하는 경우 사용자는 너무 많은 인터페이스에 노출하게 된다.
Map<Integer, Sensor> sensors = new HashMap<>();
Sensor s = sensors.get(sensorId);
  • 경계 인터페이스인 Map을 Sensors라는 클래스 안으로 숨긴다.
public class Sensors {
    Map<Integer, Sensor> sensors = new HashMap<>();

    pubilc Sensor getById(String id) {
        return sensors.get(id);
    }
}
  • 위와 같이 Map을 사용자에게 직접 노출하는 경우 사용자에게 Map의 모든 인터페이스를 노출하지 않아도 된다.
  • Sensors를 추가함으로써 필요한 인터페이스 하나만 노출하는 것도 가능하다.
  • 또 하나의 장점은 Sensors 내부의 자료구조가 Map이 아닌 다른 자료구조로 변경되더라도 외부에 변경이 발생하지 않아도 된다.

2️⃣ 자동차 경주 게임 구현

기능 요구사항

  • 각 자동차에 이름을 부여할 수 있다. 자동차 이름은 5자를 초과할 수 없다.
  • 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
  • 자동차 이름은 쉼표(,)를 기준으로 구분한다.
  • 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다.
  • 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한명 이상일 수 있다.

실행 결과

  • 위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다.
경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분).
pobi,crong,honux
시도할 회수는 몇회인가요?
5

실행 결과
pobi : -
crong : -
honux : -

pobi : --
crong : -
honux : --

pobi : ---
crong : --
honux : ---

pobi : ----
crong : ---
honux : ----

pobi : -----
crong : ----
honux : -----

pobi : -----
crong : ----
honux : -----

pobi, honux가 최종 우승했습니다.

힌트

  • 자동차는 자동차 이름과 위치 정보를 가지는 Car 객체를 추가해 구현한다.

자동차 경주 게임 1차 개발코드

https://github.com/ess234/java-racingcar-precourse/tree/develop

 

GitHub - ess234/java-racingcar-precourse: 자동차 경주 미션을 위한 저장소

자동차 경주 미션을 위한 저장소. Contribute to ess234/java-racingcar-precourse development by creating an account on GitHub.

github.com

 

반응형