본문으로 건너뛰기
Java 기초집LESSON 21

디버깅·테스트 기초와 코드 품질: 오류를 재현하고 고치기

난이도입문 → 초급
예상 시간35분
선수지식이전 강의

21강. 디버깅·테스트 기초와 코드 품질: 오류를 재현하고 고치기

1. 이번 강의에서 해결할 문제​

오류를 감으로 고치면 다른 입력에서 재발합니다. 실패 입력과 기대 결과를 고정하고 작은 단위부터 검사해야 합니다.

2. 학습 목표​

3. 핵심 개념​

디버깅은 재현 → 범위 축소 → 상태 관찰 → 최소 수정 → 회귀 확인 순서입니다. 자동 테스트는 같은 입력과 기대 결과를 반복 비교합니다. 실무에서는 JUnit 같은 도구를 사용하지만 이 강의는 서버나 새 의존성 없이 검증 원리를 익힙니다.

4. 단계별 실습​

1. src/GameRecordTest.java 작성​

실행 환경: 코드 편집기

실행 위치: C:\dev\game-records

실행 전 확인: 같은 이름의 기존 파일이 있다면 덮어쓰기 전에 Git diff와 이번 강의 변경 범위를 확인합니다.

대상 파일: src/GameRecordTest.java

src/GameRecordTest.java
public class GameRecordTest {
static int highest(int... scores) {
if (scores.length == 0) throw new IllegalArgumentException("점수가 비었습니다.");
int result = scores[0];
for (int score : scores) if (score > result) result = score;
return result;
}

static void checkEquals(int expected, int actual, String name) {
if (expected != actual) {
throw new AssertionError(name + " expected=" + expected + " actual=" + actual);
}
}

static void checkEmptyRejected() {
try {
highest();
throw new AssertionError("빈 입력이 거부되지 않았습니다.");
} catch (IllegalArgumentException expected) {
System.out.println("PASS 빈 입력 거부");
}
}

public static void main(String[] args) {
checkEquals(1500, highest(900, 1500, 1200), "최고 점수");
checkEquals(-2, highest(-5, -2, -9), "음수 범위");
checkEmptyRejected();
System.out.println("PASS 모든 검사");
}
}

2. PowerShell에서 컴파일·실행​

실행 환경: Windows PowerShell

실행 위치: C:\dev\game-records

실행 전 확인: java -version과 javac -version이 선택한 LTS JDK를 가리키고, 소스 파일명이 public 클래스명과 일치하는지 확인합니다.

대상: 이 강의의 .java 파일, out의 class 파일과 명시된 출력 파일

Windows PowerShell
Set-Location C:\dev\game-records
javac -Xlint:all -d out .\src\GameRecordTest.java
java -cp out GameRecordTest

예상 결과: 두 정상·경계 검증과 빈 입력 예외 검증이 모두 PASS로 끝납니다.

5. 코드가 동작하는 이유​

각 테스트는 한 규칙과 실패 메시지를 고정합니다. 음수 범위 테스트는 최고값을 0으로 초기화하는 흔한 버그를 잡고 빈 입력 테스트는 예외 계약을 확인합니다.

6. 자주 하는 실수와 해결법​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

디버깅·테스트 기초와 코드 품질: 오류를 재현하고 고치기 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“디버깅·테스트 기초와 코드 품질: 오류를 재현하고 고치기”에서 오류나 데이터 손실을 줄이는 선택은 무엇인가요?
  2. 문제 2“디버깅·테스트 기초와 코드 품질: 오류를 재현하고 고치기” 실습 중 ‘실패를 재현하기 전에 여러 줄 수정하기’ 상황을 발견했습니다. 본문과 일치하는 설명은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

21강. 디버깅·테스트 기초와 코드 품질: 오류를 재현하고 고치기 미완료 상태