IT/자바
자바 플레이그라운드 with TDD, 클린코드 강좌 후기 Day 2
진진Yang
2022. 11. 27. 16:08
반응형
학습 목표 : 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
반응형