배열과 ArrayList: 순서가 있는 게임 기록 관리
03강. 배열과 ArrayList: 순서가 있는 게임 기록 관리
1. 이번 강의에서 해결할 문제
스테이지 수처럼 크기가 고정된 값과 플레이할 때마다 늘어나는 기록을 같은 구조에 넣으면 불필요한 복사나 빈 공간이 생깁니다.
2. 학습 목표
3. 핵심 개념
배열은 생성할 때 길이가 고정되고 원시 타입도 직접 저장합니다. ArrayList는 내부적으로 크기 조절 가능한 배열을 사용하지만, 용량 증가 방식은 API 계약과 구분해야 합니다. 둘 다 인덱스 접근은 O(1)입니다. 끝 추가는 ArrayList에서 평균적으로 amortized O(1)이지만 용량 확장 순간에는 복사가 필요합니다. 중간 삽입·삭제는 뒤 원소를 이동해 O(n)입니다.
4. 단계별 실습
1. 예제 파일 작성
실행 환경: 코드 편집기
실행 위치: C:\dev\game-ranking-algorithms
실행 전 확인: 같은 이름의 파일이 있다면 덮어쓰기 전에 Git diff로 변경 범위를 확인합니다. 선택한 LTS JDK의 java -version과 javac -version이 모두 실행되어야 합니다.
대상 파일: src/OrderedRecords.java
import java.util.ArrayList;
import java.util.List;
public class OrderedRecords {
record GameRecord(String playerId, int score) {}
public static void main(String[] args) {
int[] stageTargets = {500, 800, 1200};
List<GameRecord> records = new ArrayList<>();
records.add(new GameRecord("P1", 700));
records.add(new GameRecord("P2", 950));
records.add(1, new GameRecord("P3", 820));
System.out.println("2스테이지 목표: " + stageTargets[1]);
System.out.println("기록 순서: " + records);
}
}
2. PowerShell에서 컴파일·실행
실행 환경: Windows PowerShell
실행 위치: C:\dev\game-ranking-algorithms
실행 전 확인: src/OrderedRecords.java가 저장되었고 out 폴더에는 삭제해도 되는 컴파일 결과만 있는지 확인합니다.
대상: src/OrderedRecords.java와 out 아래 생성되는 class 파일
Set-Location C:\dev\game-ranking-algorithms
New-Item -ItemType Directory -Force .\out | Out-Null
javac -Xlint:all -d .\out .\src\OrderedRecords.java
java -cp .\out OrderedRecords
예상 결과: 2스테이지 목표 800과 P1, P3, P2 순서의 기록이 출력됩니다.
실행 시간은 PC의 CPU·메모리, JDK 버전, JVM 워밍업, 백그라운드 작업과 입력 분포에 따라 달라질 수 있습니다. 측정값은 같은 조건에서 여러 번 비교하고 Big-O 분석과 함께 해석합니다.
5. 코드와 알고리즘이 동작하는 이유
스테이지 목표는 개수가 고정되어 배열이 자연스럽습니다. 기록은 실행 중 늘어나므로 ArrayList가 크기 관리 책임을 맡습니다. add(1, value)는 인덱스 1 이후 원소를 한 칸씩 이동하기 때문에 O(n)이고, get(1)은 기준 주소에서 위치를 계산하므로 O(1)입니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
배열과 ArrayList: 순서가 있는 게임 기록 관리 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.