본문으로 건너뛰기
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 -versionjavac -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강. 디버깅·테스트 기초와 코드 품질: 오류를 재현하고 고치기 미완료 상태