목차
README.md
해당 프로젝트가 어떠한 프로젝트이며, 어떤 기능을 담고 있는지 기술하기!
기능 목록에 관하여
•
기능 목록을 클래스 설계와 구현, 함수(메서드) 설계와 구현과 같이 너무 상세하게 작성하지 않습니다.
◦
클래스 이름, 함수(메서드) 시그니처와 반환값은 언제든지 변경될 수 있기 때문!
•
너무 세세한 부분까지 정리하기보다 구현해야 할 기능 목록을 정리하는 데 집중합니다.
•
예외적인 상황도 기능 목록에 정리합니다.
◦
특히 예외 상황은 시작 단계에서 모두 찾기 힘들기 때문에 기능을 구현 하면서 계속해서 추가해 나갑니다!
•
기능 목록은 기능 구현을 하면서 변경될 수 있다는것을 인지하기!
◦
기능을 구현하면서 문서를 계속 업데이트합니다.
◦
죽은 문서가 아니라 살아있는 문서를 만들기 위해 노력하기!
구현
하드 코딩에 관하여
•
문자열, 숫자 등의 값을 하드 코딩하지 말기!
•
상수(static final)를 만들고 이름을 부여해 이 변수의 역할이 무엇인지 의도를 드러내기!
구현 순서
클래스는 상수, 멤버 변수, 생성자, 메서드 순으로 작성합니다.
변수 이름
변수 이름에 자료형, 자료 구조 등을 사용하면
한 함수가 한 가지 기능만 담당하게 구현하기
•
함수 길이가 길어진다면 한 함수에서 여러 일을 하려고 하는 경우일 가능성이 높습니다.
•
아래와 같이 한 함수에서 안내 문구 출력, 사용자 입력, 유효값 검증 등 여러 일을 하고 있다면 이를 적절하게 분리한다.
public List<String> userInput() {
System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분).");
String userInput = Console.readLine().trim();
String[] splittedName = userInput.split(",");
for (int index = 0; index < splittedName.length; index++) {
if (splittedName.length < 1 || splittedName.length > 5) {
throw new IllegalArgumentException("[ERROR] 자동차 이름은 1자 이상 5자 이하만 가능합니다.");
}
}
return Arrays.asList(splittedName);
}
Java
복사
함수가 한 가지 기능을 하는지 확인하는 기준을 세우기
•
만약 여러 함수에서 중복되어 사용 되는 코드가 있다면 함수 분리를 고민해 본다.
•
함수의 길이는 15라인을 넘어가지 않도록 하기.
테스트
테스트 코드를 왜 작성 하는지 고찰하기
•
단지 기능을 점검하기 위한 목적으로 테스트를 작성하는 것은 아닙니다. 테스트를 작성하는 과정을 통해서 나의 코드에 대해 빠르게 피드백을 받을 수 있을 뿐만 아니라 학습 도구로도 활용할 수 있습니다!
처음부터 큰 단위의 테스트를 만들지 않는다
•
테스트의 중요한 목적 중 하나는 내가 작성하는 코드에 대해 빠르게 피드백을 받는 것입니다.
•
시작부터 큰 단위의 테스트를 만들게 된다면 작성한 코드에 대한 피드백을 받기까지 많은 시간이 걸립니다
◦
문제를 작게 나누고, 그 중 핵심 기능에 가까운 부분부터 작게 테스트를 만들어 나갑니다.
•
큰 단위의 테스트
◦
자동차경주를 시작해서 사용자가 이름, 진행 횟수를 입력하면, 게임을 진행한 후 그 결과를 알려 준다.
•
작은 단위의 테스트
◦
무작위 값이 4 이상이면 자동차가 전진한다.
◦
무작위 값이 3 이하이면 자동차가 전진하지 않는다.