AP Computer Science A: 정말 중요한 것
AP CS A 시험 실전 가이드 — 출제 내용, 점수를 잃는 부분, 남은 학습 시간을 어디에 집중할지.
AP Computer Science A 시험은 추상적으로 프로그래밍을 이해하는 학생보다 Java의 세부사항을 정확히 아는 학생에게 높은 점수를 준다. 두 섹션, 각 90분: 점수의 50%를 차지하는 40개의 객관식 문제, 나머지 50%를 차지하는 4개의 자유형 문제. 대부분의 학생이 자유형 섹션에서 점수를 잃는 이유는 개념을 이해하지 못해서가 아니라 시간 압박 속에서 Java 문법을 잘못 다루기 때문이다.
4개의 자유형 문제는 무작위가 아니다
College Board는 FRQ 구조를 수년간 일관되게 유지했다. 문제 1은 거의 항상 단일 클래스의 메서드와 제어 구조다. 문제 2는 인터페이스를 구현하거나 다른 클래스를 확장하는 클래스를 다룬다. 문제 3은 2D 배열 조작이다. 문제 4는 ArrayList 또는 다른 컬렉션 클래스를 다룬다. 미리 이를 알면 일반적인 "AP CS 연습 문제"를 하는 대신 각 문제 유형을 구체적으로 연습할 수 있다.
특히 문제 3의 경우 2D 배열을 행 우선(row-major)과 열 우선(column-major) 모두로 탐색하는 중첩 루프 패턴을 외워라:
for (int row = 0; row < arr.length; row++) {
for (int col = 0; col < arr[row].length; col++) {
// process arr[row][col]
}
}
채점자("Readers"라고 부름)는 최종 답이 틀렸어도 올바른 논리의 특정 줄에 부분 점수를 주는 채점표를 사용한다. 객체를 반환하는 메서드에서 막혔을 때 return null;을 플레이스홀더로 쓰는 것이 공란으로 두는 것보다 낫다.
매년 나타나는 객관식 함정
String 비교에서 == 대 .equals()에 관한 문제는 거의 매 시험마다 나온다. ==은 객체의 참조를 비교하고, .equals()은 내용을 비교한다. Java의 문자열 리터럴 풀이 때때로 논리적으로 참조가 같지 않아야 하는 문자열에 대해 ==이 true를 반환하게 하기 때문에 학생들이 헷갈리는데, 이것이 정확히 시험이 테스트하려는 종류의 함정이다.
연산자 우선순위와 정수 나눗셈이 또 다른 반복되는 함정이다. 7 / 2는 두 피연산자가 모두 int이기 때문에 3.5가 아니라 3으로 계산된다. (double) 7 / 2처럼 한 피연산자를 double로 변환하면 소수 결과를 얻는다. 문제는 또한 명시적 변환 없이 표현식에서 int와 double을 섞을 때 어떤 일이 발생하는지 테스트한다 — Java가 혼합 산술에서 자동으로 승격되지만 double 결과를 다시 int 변수에 할당할 때 자른다는 것을 알아야 한다.
상속과 다형성은 보이는 것보다 더 큰 비중을 차지한다
Big Idea 4(Class와 Object Oriented Programming)는 전용 상속 문제가 아니라 두 섹션 모두에 나타난다. 오버라이딩과 오버로딩의 차이를 이해하고 Java가 선언된 참조 타입이 아니라 실제 객체 타입을 기반으로 런타임에 오버라이된 메서드를 해석한다는 것을 알아라:
Animal a = new Dog();
a.makeSound(); // Dog의 버전을 호출, Animal의 버전이 아님
이것이 런타임 다형성이고, 시험은 한 타입의 참조가 서브클래스 객체를 가리키는 상황을 제시한 후 실제로 어떤 메서드가 실행되는지 묻는 식으로 이를 테스트한다. 정적 메서드와 인스턴스 변수는 이 규칙을 따르지 않는다 — 선언된 타입을 기반으로 해석되고, 이 구분이 즐겨 사용되는 시험 함정이다.
배열과 ArrayList 메커니즘은 찾아보는 게 아니라 자동이어야 한다
시험 중에 Java 설명서에 접근할 수 없다. 이것들을 망설임 없이 외워라:
array.length(괄호 없음, 필드임)list.size()(괄호, 메서드임)list.add(index, element)는 모든 것을 오른쪽으로 이동list.remove(index)는 모든 것을 왼쪽으로 이동하고 제거된 요소를 반환- for-each 루프로 앞으로 반복하면서 ArrayList에서 요소를 제거하면
ConcurrentModificationException이 발생; 제거할 때는 인덱싱된 루프로 뒤로 반복하라
마지막 부분은 정말로 FRQ 응답에서 가장 흔한 논리 버그 중 하나이고, Readers가 끊임없이 본다.
남은 2주를 어떻게 보낼지
실제 시험 조건에서 과거 전체 FRQ를 풀어라 — College Board는 점수가 어떻게 주어졌는지 정확히 보여주는 채점 지침이 있는 실제 과거 시험을 공개한다. 채점 지침을 꼼꼼히 읽어라; 때로는 올바르게 선언된 단일 변수까지 세분화된 부분 점수가 실제로 얼마나 존재하는지를 드러낸다. 객관식의 경우 복귀(recursion) 추적과 2D 배열 인덱싱에 검토 시간을 집중하라. 기저 개념이 실제로 얼마나 간단한지에 비해 부주의한 오류가 가장 많은 점수를 빼먹게 되는 부분이기 때문이다.
이 모든 것 아래의 Java 기초를 더 견고하게 구축하거나 클래스, 상속, 배열 조작의 작업 예제를 단계적으로 세분화되어 있는 것을 보고 싶다면, Korra Studio의 라이브러리에서 Python과 Computer Science 섹션을 확인하여 더 체계적인 연습을 해라.
AI 도움을 받아 작성했으며, Michal Pilch(CISSP), Korra Studio에서 검토 및 게시했어요.
이것은 Korra Studio 나레지베이스의 한 노트예요. 플랫폼은 모든 주제를 1-to-1 멘토링과 함께 제공해요.
무료로 시작하기arrow_forward