본문 바로가기

物体与方法的运用

AP 컴퓨터 과학 A · 주제 1

이 주제용 영상 수업 영상 페이지 열기
15:05

物体与方法的运用

여기에 두 개의 자바 프로그램이 있습니다. 첫 번째는 세미콜론이 빠져 있습니다. 두 번째는 7을 2로 나누어 정수 형태로 결과를 저장합니다. 컴파일러가…를 멈춥니다.

영어 내레이션 · 영어 + 중국어 자막 burned-in

1.1

알고리즘, 프로그래밍, 컴파일러 introduction

Syllabus

학습 목표 1.1.A: 일상생활에서 발견되는 패턴과 알고리즘을 글이나 도표를 사용하여 표현하시오.

  • 1.1.A.1 알고리즘은 과제를 완료하거나 문제를 해결할 때 따르는 단계별 절차를 정의합니다. 이러한 알고리즘은 글이나 도표를 사용하여 표현될 수 있습니다.
  • 1.1.A.2 *순서(Sequencing)*는 과정의 단계들이 수행되는 순서를 정의합니다. 과정의 단계들은 한 번에 하나씩 수행됩니다.

학습 목표 1.1.B: 코드 컴파일 및 실행 과정을 설명하시오.

  • 1.1.B.1 코드는 어떤 텍스트 에디터에서도 작성할 수 있으나, 프로그래머가 코드를 작성, 컴파일 및 실행할 수 있는 도구를 제공하므로 보통 통합 개발 환경(IDE) 을 사용하여 프로그램을 작성합니다.
  • 1.1.B.2 컴파일러는 코드에 대해 일부 오류를 점검합니다. 컴파일러가 감지할 수 있는 오류는 프로그램 실행 전에 수정되어야 합니다.

학습 목표 1.1.C: 프로그래밍 오류의 유형을 식별하시오.

  • 1.1.C.1 *구문 오류(Syntax error)*는 프로그래밍 언어의 규칙을 따르지 않는 프로그램 내 실수입니다. 이러한 오류는 컴파일러에 의해 감지됩니다.
  • 1.1.C.2 *논리 오류(Logic error)*는 알고리즘이나 프로그램에서 예상치 못하거나 잘못된 동작을 유발하는 실수입니다. 이러한 오류는 프로그램에 특정 데이터를 입력하여 예상되는 결과가产出되는지 확인함으로써 테스트를 통해 감지됩니다.
  • 1.1.C.3 *실행 중 오류(Run-time error)*는 프로그램 실행 중 발생하는 프로그램 내 실수입니다. 실행 중 오류는 일반적으로 프로그램이 비정상적으로 종료되게 합니다.
  • 1.1.C.4 *예외(Exception)*은 컴파일러에 의해 감지되지 않은 예상치 못한 오류로 인해 발생하는 실행 중 오류의 일종이며, 프로그램 실행의 정상적인 흐름을 중단시킵니다.

출처: College Board AP Course and Exam Description

워크스테이션의 소스 코드 – 프로그램은 정확한 지령으로 작성, 컴파일 및 행됩니다
워크스테이션의 소스 코드 – 프로그램은 정확한 지령으로 작성, 컴파일 및 실행됩니다

**알고리즘(algorithm)**은 문제를 해결하는 유한하고 단계별 절차입니다. **프로그램(program)**은 컴퓨터가 실행할 수 있는 언어로 알고리즘을 표현한 것입니다. 자바(Java)는 컴파일 compiling됩니다: 컴파일러/compiler가 소스 코드를 **바이트코드(bytecode)**로 변환하고, 이를 **자바 가상 머신(Java Virtual Machine, JVM)**이 실행합니다. 구문 오류(syntax error)(문법 위반)는 컴파일러가 잡지만, 논리 오류(logic error)(잘못된 결과)는 잡지 않습니다 – 프로그램은 실행되지만 예상치 못한 동작을 보입니다.

컴파일러는 전체 프로그램을 한 번에 번역합니다; 인터프리터interpreter는 줄별로 실행합니다
컴파일러는 전체 프로그램을 한 번에 번역합니다; 인터프리터interpreter는 줄별로 실행합니다
아래에서 본 여러 컴퓨터 프로세서 칩
당신의 자바 프로그램은 이러한 프로세서 중 하나가 실제로 실행하는 지령으로 컴파일됩니다
English 한국어
algorithm/ˈælɡərɪθəm/ 알고리즘
program/ˈprəʊɡræm/ 프로그램
compiled/kəmˈpaɪld/ 합성된
compiler/kəmˈpaɪlə/ 컴파일러
syntax error/ˈsɪntæks ˈerə/ 문법 오류(syntax error)
logic error/ˈlɒdʒɪk ˈerə/ 논리 오류(logic error)
1.2

변수와 데이터 타입

Syllabus

학습 목표 1.2.A: 특정 규격에 가장 적절한 데이터 타입 범주를 식별합니다.

  • 1.2.A.1 데이터 타입은 값의 집합과 해당 값들에 대한 연산들의 집합입니다. 데이터 타입은 기본(primitive) 또는 참조(reference)로 분류할 수 있습니다.
  • 1.2.A.2 이 과정에 사용되는 기본 데이터 타입은 숫자 및布尔 값에 대한 값의 집합과 그에 대응하는 연산들을 정의합니다.
  • 1.2.A.3 참조 유형은 기본 타입이 아닌 객자를 정의하는 데 사용됩니다.

학습 목표 1.2.B: 숫자 및布尔 값을 저장하기 위해 변수를 선언하는 코드를 작성합니다.

  • 1.2.B.1 본 과정에서 사용하는 세 가지 기본 데이터 타입은 int, double, 그리고 boolean이다. int 값은 정수(int)이다. double 값은 실수(real number)이다. boolean 값은either true 또는 false이다.
    • 제외 사항: 다른 다섯 가지 기본 데이터 타입(long, short, byte, float, 그리고 char)은 AP Computer Science A 과정 및 시험의 범위를 벗어납니다.
  • 1.2.B.2 변수는 프로그램 실행 중값이 변경될 수 있는 저장 위치입니다. 모든 변수에는 이름과 associate된 데이터 타입이 있습니다. 기본 타입의 변수는 해당 타입의 기본 값을 저장합니다.

출처: College Board AP Course and Exam Description

**변수(variable)**는 고정된 **타입(type)**의 값을 저장하는 이름이 붙은 상자입니다. 자바의 주요 기본(primitive) 타입은 int(정수), double(소수점 숫자), 그리고 boolean(true/false)입니다. 먼저 타입을 지정하여 선언합니다:

자바의 기본 데이터 타입, 각기 다른 종류의 값을 저장
자바의 기본 데이터 타입, 각기 다른 종류의 값을 저장
int score = 90;
double price = 4.99;
boolean passed = true;
탐색하기

변수가 한 번에 하나의 값을 어떻게 저장하는지 탐색해 보십시오

변수는 고정된 타입의 단일 값을 저장하는 이름이 붙은 상자로 정의됩니다. 줄을 따라 진행하면 각 상자가 값을 받는 것을 볼 수 있습니다. score를 재할당하면 새로운 상자가 생성되는 것이 아니라 기존 숫자를 위쪽하여 덮어쓴다는 점에 주의하십시오.

English 한국어
variable/ˈveərɪəbl/ 变量
type/taɪp/ 글자
1.3

식과 출력

Syllabus
Learning ObjectiveEssential Knowledge

1.3.A
Develop code to generate output and determine the result that would be displayed.

  • 1.3.A.1 System.out.print and System.out.println display information on the computer display. System.out.println moves the cursor to a new line after the information has been displayed, while System.out.print does not.

1.3.B
Develop code to utilize string literals and determine the result of using string literals.

  • 1.3.B.1 A literal is the code representation of a fixed value.
  • 1.3.B.2 A string literal is a sequence of characters enclosed in double quotes.
  • 1.3.B.3 Escape sequences are special sequences of characters that can be included in a string. They start with a \ and have a special meaning in Java. Escape sequences used in this course include double quote \", backslash \\, and newline \n.

1.3.C
Develop code for arithmetic expressions and determine the result of these expressions.

  • 1.3.C.1 Arithmetic expressions, which consist of numeric values, variables, and operators, include expressions of type int and double.
  • 1.3.C.2 The arithmetic operators consist of addition +, subtraction -, multiplication *, division /, and remainder %. An arithmetic operation that uses two int values will evaluate to an int value. An arithmetic operation that uses at least one double value will evaluate to a double value.
    • Exclusion statement: Expressions that result in special double values (e.g., infinities and NaN) are outside the scope of the AP Computer Science A course and exam.
  • 1.3.C.3 When dividing numeric values that are both int values, the result is only the integer portion of the quotient. When dividing numeric values that use at least one double value, the result is the quotient.
  • 1.3.C.4 The remainder operator % is used to compute the remainder when one number a is divided by another number b.
    • Exclusion statement: The use of values less than 0 for a and the use of values less than or equal to 0 for b is outside the scope of the AP Computer Science A course and exam.
  • 1.3.C.5 Operators can be used to construct compound expressions. At compile time, numeric values are associated with operators according to operator precedence to determine how they are grouped. Parentheses can be used to modify operator precedence. Multiplication, division, and remainder have precedence over addition and subtraction. Operators with the same precedence are evaluated from left to right.
  • 1.3.C.6 An attempt to divide an integer by the integer zero will result in an ArithmeticException.
    • Exclusion statement: The use of dividing by zero when one numeric value is a double is outside the scope of the AP Computer Science A course and exam.

출처: College Board AP Course and Exam Description

**식(expression)**은 값과 **연산자(operator)**를 조합하여 결과를 계산합니다: + - * / 및 % (나머지 연산,余数). 정수 나눈 정수는 절단(truncate)됩니다: 7 / 2는 3이고, 7 % 2는 1입니다. 연산자 우선순위는 수학 규칙(*,/,%이 +,-보다 앞서림)을 따릅니다. 출력하는 방법은 다음과 같습니다:

System.out.print("no newline");
System.out.println("with newline");

정수를 정수 0로 나누는 것(7 / 0과 같음)은 허용되지 않으며 실행 시점에 ArithmeticException 오류를 발생시킨다. 문자열 내부에서 백슬래시는 에스케이프 시퀀스를 표시한다: \"은 이중 인용부호를 출력하고, \\은 단일 백슬래시를 출력하며, \n는 새 줄을 시작하므로, System.out.println("She said \"hi\"");는 She said "hi"를 출력한다.

탐색하기

연산 순서를 단계별로 탐색해 보십시오

Java는 *, /, %를 +과 -보다 먼저 적용하며 왼쪽에서 오른쪽으로 계산합니다. 각 단계를 관찰하면 왜 2 + 3 * 4가 $14$이 아니라 $20$인지 이해할 수 있습니다 — 곱하기 연산이 먼저 이루어지기 때문입니다.

English 한국어
expression/ekˈspreʃn/ 표현식
modulus/ˈmɒdjʊləs/ 절댓값(모듈러스)
escape sequence/eˈskeɪp ˈsiːkwəns/ 회피 시퀀스
assignment/əˈsaɪnmənt/ 과제 배정
Casting/ˈkæstɪŋ/ 캐스팅
library/ˈlaɪbrəri/ 라이브러리(library)
1.4

할당 문장과 입력

Syllabus

학습 목표 1.4.A: 식이 포함된 할당 문장에 대한 코드를 작성하고, 해당 문장으로 인해 변수에 저장되는 값을 결정합니다.

  • 1.4.A.1 변수는 식 내에서 사용하기 전에 반드시 값을 할당받아야 합니다. 그 값은 호환 가능한 데이터 타입이어야 합니다. 변수는 처음 값을 할당받을 때 초기화됩니다. 참조 유형(new object)이나 객체가 없는 경우 null을 할당할 수 있습니다. 리터럴 null은 참조가 어떤 객체와도 연결되지 않음을 나타내는 데 사용되는 특수한 값입니다.
  • 1.4.A.2 할당 연산자 =을 사용하면 프로그램에서 변수에 저장된 값을 초기화하거나 변경할 수 있습니다. 오른쪽의 식 값이 왼쪽의 변수에 저장됩니다.
    • 제외 사항: 식 내부에서 할당 연산자를 사용하는 것(예: a = b = 4; 또는 a[i += 5])은 AP Computer Science A 과정 및 시험 범위를 벗어납니다.
  • 1.4.A.3 실행 중에는 식이 평가되어 단일 값을 생성합니다. 식의 값은 식 평가 결과에 따라 타입이 결정됩니다.

학습 목표 1.4.B: 입력을 읽는 코드를 작성합니다.

  • 1.4.B.1 입력은 촉각, 오디오, 시각, 텍스트 등 다양한 형태로 올 수 있습니다. Scanner 클래스는 키보드에서 텍스트 입력을 얻는 방법 중 하나입니다.
    • 제외 사항: 사용자에게서 들어오는 특정 형태의 입력은 AP Computer Science A 과정 및 시험 범위를 벗어납니다.

출처: College Board AP Course and Exam Description

대입문 x = expr;는 오른쪽 값을 평가하여 왼쪽 변수에 저장한다. 입력을 받을 때는 Scanner를 사용한다:

Scanner in = new Scanner(System.in);
int age = in.nextInt();
String name = in.next();
1.5

캐스팅과 변수의 범위

Syllabus

학습 목표 1.5.A: 산술 식에서 원시 값을 다른 원시 타입으로 캐스팅하는 코드를 작성하고, 결과로 생성되는 값을 결정합니다.

  • 1.5.A.1 캐스팅 연산자 (int)과 (double)을 사용하여 double 값에서 int 값으로(또는 그 반대로) 변환할 수 있습니다.
  • 1.5.A.2 double 값을 int 값으로 캐스팅하면 소수점右边的 digits가 잘려 버립니다.
  • 1.5.A.3 일부 코드는 int 값이 자동으로 double 값으로 확장(cast widening)되게 합니다.
  • 1.5.A.4 타입이 double인 값은 음수가 아닌 숫자의 경우 (int)(x + 0.5)로, 음수의 경우 (int)(x - 0.5)로 가장 가까운 정수로 반올림할 수 있습니다.

학습 목표 1.5.B: 정수 식이 범위를 벗어난 값으로 평가되는 조건을 설명합니다.

  • 1.5.B.1 상수 Integer.MAX_VALUE은 가장 큰 가능한 int 값의 값을 보유합니다. 상수 Integer.MIN_VALUE은 가장 작은 가능한 int 값의 값을 보유합니다.
  • 1.5.B.2 Java의 정수 값은 메모리에서 유한한 양(4바이트)으로 저장되는 타입 int의 값으로 표현됩니다. 따라서 int 값은 Integer.MIN_VALUE부터 Integer.MAX_VALUE까지의 범위 내에 있어야 합니다(경계 포함).
  • 1.5.B.3 식이 허용된 범위 밖의 int 값으로 평가되면 정수 오버플로우가 발생합니다. 결과는 허용된 범위 내의 int 값이지만, 반드시 예상한 값은 아닙니다.

학습 목표 1.5.C: 식의 정확도를 제한하는 조건을 설명합니다.

  • 1.5.C.1 컴퓨터는 데이터 타입에 따라 데이터를 저장하기 위해 지정된 양의 메모리를 할당합니다. 식이 할당된 메모리 양에 저장될 수 있는 것보다 더 정밀한 double으로 평가되면 반올림 오차가 발생합니다. 결과는 표현 가능한 값으로 반올림됩니다. 자연스럽게 발생하는 반올림 오차를 피하려면 int 값을 사용하십시오.
    • 제외 사항: 반올림 오차를 피하는 데 사용할 수 있는 다른 특수 소수 타입은 AP Computer Science A 과정 및 시험 범위를 벗어납니다.

출처: College Board AP Course and Exam Description

int 범위, 오버플로우 및 절사

각 타입은 고정된 범위를 가지며, int는 약 2.1억을 넘어오면 오버플로우합니다. 캐스팅은 타입 간 변환입니다. 확장(int에서 double으로)은 자동이며, 축소에는 명시적인 캐스팅이 필요하며 이는 절단(반올림하지 않음)합니다:

double avg = (double) total / count;   // force real division
int whole = (int) 3.9;                 // 3, truncated

exam skill: 소수점이 예상되었을 때 정수 나누기로 인해 절사된 결과가 나오는 것을 주의하십시오 – 한 항을 먼저 double로 캐스팅하십시오.

Worked example. 각 식을 추적(trace)하십시오:

  • 7 / 2 → 3 (모두 int이므로 나누기는 버림);
  • 7.0 / 2 → 3.5 (하나의 double이 실수 나누기를 강제합니다);
  • 7 % 2 → 1 (나머지);
  • (double) 7 / 2 → 3.5 (타입 변환이 /보다 우선순위가 높으므로, 이 연산은 7.0 / 2);
  • (double) (7 / 2) → 3.0 (괄호는 먼저 7 / 2 = 3를 계산한 후, int first에서 확장합니다).

마지막 두 가지가 비슷해 보이지만 다릅니다. 타입 변환의 위치가 truncate(절단)가 일어나는지 여부를 결정합니다.

탐색하기

int와 double이 숫자를 다르게 저장하는 이유

int는 고정된 범위 내의 정수만 저장합니다. 반대로 double는 mantissa(유효숫자)와 exponent(지수)를 저장하여 정확성은 포기하고 대신 매우 넓은 범위를 확보합니다. double를 int로 형 변환하면 소수점이 버려지며, 값이 int의 범위를 넘으면 오버플로우가 발생합니다.

1.6

복합 대입 연산자

Syllabus

학습 목표 1.6.A: 복합 할당 연산자가 포함된 할당 문장에 대한 코드를 작성하고, 해당 문장으로 인해 변수에 저장되는 값을 결정합니다.

  • 1.6.A.1 복합 할당 연산자 +=, -=, *=, /=, %=는 수치 식에서 할당 연산자의 대용으로 사용할 수 있습니다. 복합 할당 연산자는 왼쪽 값과 오른쪽 값 사이에서 지시된 산술 연산을 수행한 후 결과를 왼쪽 변수에 할당합니다.
  • 1.6.A.2 포스트 증감 연산자 ++과 포스트 감감 연산자 --은 수치 변수에 저장된 값에 1을 더하거나 1을 뺍니다. 새로운 값이 변수에 할당됩니다.
    • 제외 사항: AP Computer Science A 과정 및 시험 범위에는 전위(prefix) 형식(예: ++x)으로 사용되는 증감 연산자(increment and decrement operators)와 다른 식 내부(예: arr[x++])에서 사용되는 증감 연산자의 사용이 포함되지 않는다.

출처: College Board AP Course and Exam Description

축약형은 연산과 대입을 결합합니다: x += 5은 x = x + 5을 의미합니다. similarly -=, *=, /=, %=도同理입니다. 증가(increment) 및 감소(decrement) 연산자 x++와 x--는 값에 1을 더하거나 뺍니다.

1.7

애플리케이션 프로그래밍 인터페이스(API) 및 라이브러리

Syllabus

학습 목표 1.7.A: API에 포함된 라이브러리에 있는 클래스의 속성과 동작을 식별합니다.

  • 1.7.A.1 라이브러리는 클래스들의 모음입니다. 응용 프로그램 인터페이스(API) 규격은 프로그래머에게 해당 클래스들을如何使用하는지 안내합니다. API 규격과 라이브러리에 있는 문서화 내용은 API로 정의된 클래스의 속성과 동작을 이해하는 데 필수적입니다. 클래스는 특정 참조 유형을 정의합니다. API 및 라이브리의 클래스들은 패키지为单位 grouping됩니다. 기존 클래스와 클래스 라이브리를 활용하여 객체를 생성할 수 있습니다.
  • 1.7.A.2 속성은 클래스와 관련된 데이터를 의미하며 변수에 저장됩니다. 동작은 클래스의 인스턴스가 할 수 있는 일(또는 그 인스턴스에 대해 할 수 있는 일)을 의미하며 메서드에 의해 정의됩니다.

출처: College Board AP Course and Exam Description

API(Application Programming Interface)는 사용자가 사용할 수 있는 클래스와 메서드의 공개된 목록입니다. 라이브러리는 미리 만든 클래스들의 모음(예: Math, String, Scanner)입니다. API 문서를 읽으면 메서드가需要什么参数(parameters)를 필요로 하는지, 무엇을 반환하는지 알 수 있으며 내부 코드는 볼 수 없습니다. 이는 추상화(abstraction) 의 예시입니다.

English 한국어
abstraction/əbˈstrækʃn/ 추상화
Comments/ˈkɒments/ 주석
Interface/ˈɪntəfeɪs/ 인터페이스
1.8

주석으로 작성된 문서

Syllabus

학습 목표 1.8.A: 주석을 통해 코드의 기능과 사용법을 설명합니다.

  • 1.8.A.1 주석은 원본 프로그래머와 다른 프로그래머가 코드와 그 기능을 이해하도록 작성되지만, 컴파일러에서는 무시되며 프로그램 실행 시에도 실행되지 않습니다. Java의 세 가지 유형의 주석에는 /* */이 있으며, 이는 주석 블록을 생성합니다; //이 있으며, 이는 한 줄에 대한 주석을 생성합니다; 그리고 /** */인 Javadoc 주석은 API 문서화를 생성하는 데 사용됩니다.
  • 1.8.A.2 전제 조건은 메서드가 예상대로 작동하기 위해 메서드 실행 직전에 참이어야 하는 조건입니다. 전제 조건이 충족되었는지 확인하기 위해 메서드가 체크할 것이라는 기대는 없습니다.
  • 1.8.A.3 후건 조건은 메서드 실행 후 항상 참이어야 하는 조건입니다. 후건 조건은 반환되는 값이나 객체의 속성의 현재 값을 통해 실행 결과를 묘사합니다.

출처: College Board AP Course and Exam Description

주석(comment) 은 컴파일러에 의해 무시되지만 IEnumerable에게 코드를 설명합니다: single line에는 //, block에는 /* ... */, 그리고 메서드의 목적, 매개변수, 반환 값을 문서화하는 Javadoc comment에는 /** ... */를 사용합니다. 정확한 전제 조건(preconditions) 과 사후 조건(postconditions) 을 여기에 기록합니다.

1.9

메서드 서명

Syllabus

학습 목표 1.9.A: 문서화와 메서드 서명을 바탕으로 올바른 메서드를 식별합니다.

  • 1.9.A.1 메서드는 호출될 때만 실행되는 이름이 붙은 코드 블록입니다. 코드 블록은 braces(중괄호)로 둘러싸인 코드의 어떤 부분입니다. 절차 추상화는 메서드가 어떻게 작성되었는지 알지 못하더라도 메서드가 무엇을 하는지 알면 프로그래머가 메서드를 사용할 수 있게 해줍니다.
  • 1.9.A.2 파라미터는 메서드 또는 컨스트럭터 헤더에 선언된 변수이며 메서드 본체 내부에서 사용할 수 있습니다. 이를 통해 값이나 인자가 메서드나 컨스트럭터에 전달되어 사용될 수 있습니다. 파라미터가 있는 메서드의 메서드 서명은 메서드명과 파라미터 타입의 순서 목록으로 구성됩니다. 파라미터가 없는 메서드의 메서드 서명은 메서드명과 빈 파라미터 목록으로 구성됩니다.

학습 목표 1.9.B: 메서드를 호출하는 방법을 설명합니다.

  • 1.9.B.1 void 메서드는 반환값이 없으므로 따라서 식의 일부로 호출되지 않습니다.
  • 1.9.B.2 비-void 메서드는 헤더의 반환 타입과 동일한类型的返回值를 반환합니다. 비-void 메서드를 호출할 때 반환값을 사용하려면, 이를 변수에 저장하거나 식의 일부로 사용해야 합니다.
  • 1.9.B.3 인자는 메서드가 호출될 때 메서드로 전달되는 값입니다. 메서드에 전달되는 인자는 메서드 서명의 파라미터 목록에 명시된 타입과 숫자 및 순서에 호환되어야 합니다. 메서드를 호출할 때 인자는 pass by value 방식을 사용하여 전달됩니다. Pass by value는 인자의 복사본으로 파라미터를 초기화합니다.
  • 1.9.B.4 여러 개의 메서드가 같은 이름을 가지고 있지만 서로 다른 서명을 가질 때, 이러한 메서드들은 오버로딩되었다고 말합니다.
  • 1.9.B.5 메서드 호출은 문장의 순차적 실행을 중단시켜, 먼저 메서드 내의 문장을 실행한 후 계속 진행하게 만듭니다. 메서드의 마지막 문장이 실행되거나 return文이 실행되면, 제어 흐름은 메서드가 호출된 지점 바로 다음으로 돌아갑니다.

출처: College Board AP Course and Exam Description

메서드 서명(method signature) 은 메서드의 이름과 매개변수 타입을 뜻하며, 예: nextInt() 또는 substring(int, int). 메서드를 호출하려면 number, type, order가 매개변수와 일치하는 인자(arguments) 를 제공해야 합니다. 메서드 헤더(전체 선언문) 또한 반환 유형(return type) 을 명시합니다—메서드가 돌려주는 값의 타입(없으면 void)—하지만 반환 유형은 서명에 포함되지 않으므로 두 메서드가 반환 유형만으로 구분될 수 없습니다.

English 한국어
method signature/ˈmeθəd ˈsɪɡnɪtʃə/ 메서드 서명
arguments/ˈɑːɡjuːmənts/ 인자(arguments)
class (static) method/klæs ˈmeθəd/ 클래스 (정적) 메서드
1.10

클래스 메서드 호출

Syllabus

학습 목표 1.10.A: 클래스 메서드를 호출하는 코드를 작성하고 해당 호출의 결과를 판단할 수 있다.

  • 1.10.A.1 클래스 메서드는 클래스 인스턴스가 아닌 클래스 자체에 연결된다. 클래스 메서드에는 메서드 이름 앞의 헤더에 static 키워드가 포함된다.
  • 1.10.A.2 클래스 메서드는 일반적으로 클래스명과 함께 점(.) 연산자를 사용하여 호출한다. 메서드 호출이 정의된 클래스 내에서 이루어지는 경우, 호출 시 클래스명을 사용하는 것은 선택 사항이다.

출처: College Board AP Course and Exam Description

클래스(static) 메서드는 클래스 자체에 속하므로, 클래스 이름을 통해 호출합니다: ClassName.method(args). 인스턴스 객체가 필요 없습니다.

탐색하기

스택에서 클래스 메소드 호출을 따라가십시오

Math.max와 같은 클래스 메소드를 호출하면 새로운 프레임이 호출 스택에 적재됩니다; 메소드가 값을 반환하면 해당 프레임이 제거되고 제어가 호출자에게 돌아갑니다. 스택이 커지고 작아지는 과정을 단계별로 관찰하십시오.

English 한국어
class/klæs/ 클래스
1.11

Math 클래스

Syllabus
Learning ObjectiveEssential Knowledge

1.11.A
Develop code to write expressions that incorporate calls to built-in mathematical libraries and determine the value that is produced as a result.

  • 1.11.A.1 The Math class is part of the java.lang package. Classes in the java.lang package are available by default.
  • 1.11.A.2 The Math class contains only class methods. The following Math class methods—including what they do and when they are used—are part of the Java Quick Reference:
    • static int abs(int x) returns the absolute value of an int value.
    • static double abs(double x) returns the absolute value of a double value.
    • static double pow(double base, double exponent) returns the value of the first parameter raised to the power of the second parameter.
    • static double sqrt(double x) returns the nonnegative square root of a double value.
    • static double random() returns a double value greater than or equal to 0.0 and less than 1.0.
  • 1.11.A.3 The values returned from Math.random() can be manipulated using arithmetic and casting operators to produce a random int or double in a defined range based on specified criteria. Each endpoint of the range can be inclusive, meaning the value is included, or exclusive, meaning the value is not included.

출처: College Board AP Course and Exam Description

Math class는 정적(math) 메서드를 제공합니다: Math.abs(x), Math.pow(base, exp), Math.sqrt(x), 그리고 Math.random() (a double in $[0,1)$). 0부터 n-1까지 무작위 정수를 얻으려면: (int)(Math.random() * n)를 사용하십시오.

1.12

객체: 클래스의 인스턴스

Syllabus

학습 목표 1.12.A: 클래스와 객체 간의 관계를 설명할 수 있다.

  • 1.12.A.1 객체는 정의된 속성을 가진 클래스의 구체적인 인스턴스이다. 클래스는 객체의 속성과 행동에 대한 공식적인 구현 또는 청사진이다.
  • 1.12.A.2 관련 클래스들의 공통 속성과 행동을 하나의 초기(superclass)라 불리는 클래스에 넣음으로써 클래스 계층 구조를 구축할 수 있다. 초기를 확장하는 *하위(subclass)*는 코드 내에서 기존 속성과 행위를 대체하지 않고도 이를 활용할 수 있다. 이는 하위로부터 초기로의 상속 관계를 형성한다.
    • 배제 문구: 상속 관계의 설계 및 구현은 AP Computer Science A 과정 및 시험의 범위를 벗어난다.
  • 1.12.A.3 Java의 모든 클래스는 Object 클래스의 하위 클래스이다.

학습 목표 1.12.B: 참조 유형을 저장하기 위한 변수를 선언할 수 있는 코드를 작성할 수 있다.

  • 1.12.B.1 참조 유형의 변수는 객체 참조를 보유하며, 이를 해당 객체의 메모리 주소라고 생각할 수 있다.

출처: College Board AP Course and Exam Description

=는 객체가 아닌 참조를 복사함

클래스(class) 는 설계도(blueprint)이고, 객체(object) 는 이를 바탕으로 constructed된 구체적인 인스턴스(instance) 입니다. 클래스는 데이터(fields) 와 동작(methods) 을 묶어놓는데, 이것이 オブジェクト指向プログラミング(object-oriented programming) 의 핵심입니다. String, Scanner, 그리고 ArrayList는 모두 인스턴스를 생성할 수 있는 classes입니다.

클래스는 계층 구조로 조직될 수 있다. 초기 superclass는 여러 하위 subclass들이 extend它时它 – 继承关系。Java의 모든 클래스는 최종적으로 내장된 Object 클래스의 하위 클래스이므로, 모든 객체는 이미 toString方法来 가집니다; 초기 superclass와 동일한 서명(signature)을 가진 하위 클래스 메소드를 작성하는 것은 **메소드 오버라이딩(method overriding)**입니다. (사용자가 직접 상속 구조를 설계하는 것은 이 과정의 범위를 벗어나지만, 이러한 용어를 식별할 수 있어야 합니다.)

클래스 도식:-private 속성과 public 메서드
클래스 도식: -private 속성과 public 메서드
클래스는 설계도이며, 각 객체는 이를 기반으로 한 하나의 인스턴스입니다
클래스는 설계도이며, 각 객체는 이를 기반으로 한 하나의 인스턴스입니다
English 한국어
object/ˈɒbdʒekt/ 물체 자체
instance/ˈɪnstəns/ 인스턴스
object-oriented programming/ˈɒbdʒekt ˈɔːrɪəntɪd ˈprəʊɡræmɪŋ/ 객체 지향 프로그래밍(object-oriented programming)
superclass/ˈsuːpəklæs/ 초기 superclass
subclasses/ˈsʌbklæsɪz/ 하위 클래스
inheritance relationship/ɪnˈherɪtəns rɪˈleɪʃənʃɪp/ 상속 관계
method overriding/ˈmeθəd ˌəʊvəˈraɪdɪŋ/ 메서드 오라이딩
reference/ˈrefrəns/ 기준계
1.13

객체 생성 및 저장(인스턴시네이션)

Syllabus

학습 목표 1.13.A: 서명을 사용하여 호출되는 올바른 생성자를 식별할 수 있다.

  • 1.13.A.1 클래스에는 객체를 생성하기 위해 호출되는 생성자가 포함된다. 생성자는 클래스와 동일한 이름을 가진다.
  • 1.13.A.2 생성자 서명은 생성자의 이름(클래스명과 동일)과 매개변수 유형의 순열 목록으로 구성된다. 매개변수 목록은 생성자 헤더에 전달되는 값의 유형과 해당 변수의 이름이 나열되어 있다.
  • 1.13.A.3 서로 다른 서명을 가진 여러 생성자가 있을 때 생성자는 오버로딩된다고 한다.

학습 목표 1.13.B: 객체 참조를 보관할 올바른 유형의 변수를 선언할 수 있는 코드를 작성할 수 있다.

  • 1.13.B.1 참조 유형의 변수는 객체 참조를 보유하거나, 객체가 없는 경우 null을 보유한다.

학습 목표 1.13.C: 생성자를 호출하여 객체를 생성할 수 있는 코드를 작성할 수 있다.

  • 1.13.C.1 객체는 일반적으로 키워드 new를 사용하여 생성되며, 이후 해당 클래스의 컨스트럭터 중 하나를 호출해야 한다.
  • 1.13.C.2 매개변수는 생성자가 값을 받아들이도록 하여 객체의 속성의 초기값을 설정하는 데 허용한다.
  • 1.13.C.3 생성자 인자는 생성자가 호출될 때 생성자에 전달되는 값이다. 생성자에 전달되는 인자는 생성자 서명의 매개변수 목록에 명시된 유형과 순서 및 개수가 호환되어야 한다. 생성자를 호출할 때는値传递(calling by value) 방식으로 인자를 전달한다. 値传递은 인자의 복사본으로 매개변수를 초기화한다.
  • 1.13.C.4 생성자 호출은 명령어들의 순차적 실행을中断打断使程序首先执行生成器中的语句然后再继续。生成器中的最后一个语句执行后,控制权返回到生成器调用点之后的位置。

출처: College Board AP Course and Exam Description

인스턴시네이션(instantiation) 은 new 키워드를 사용하여 객체를 생성하고 콘스트럭터(constructor) 를 호출합니다:

Scanner in = new Scanner(System.in);
String s = new String("hi");   // or just "hi"

변수는 객체 그 자체가 아니라 참조(reference) (对象的地址)를 저장합니다. 두 개의 참조가 같은 객체를 가리킬 수 있습니다; ==으로 비교하면 내용而非地址을 비교하는 것이 아니라 주소를 비교합니다.

참조가 아무것도 가리키지 않을 수도 있습니다: 특수 값 null은 "어떤 객체에도 연결되어 있지 않음"을 의미합니다. null 참조에 메서드를 호출하면 run time에 NullPointerException이 발생합니다. 이를 방지하기 위해 ==/!=로 테스트하고 null을 먼저 확인하여, 메서드가 실행되기 전에 &&이 short-circuit되도록 하십시오: if (s != null && s.length() > 0).

원시(primitive) 변수는 값을 직접持有, 참조는 객체를 향하는 화살표를 가짐
원시 변수는 값을 직접持有, 참조는 객체를 향하는 화살표를 가짐
English 한국어
Instantiation/ˌɪnstænʃɪˈeɪʃn/ 인스턴스화
constructor/kənˈstrʌktə/ 생성자
null/nʌl/ null
instance method/ˈɪnstəns ˈmeθəd/ 인스턴스 메소드(instance method)
1.14

인스턴스 메서드 호출

Syllabus

학습 목표 1.14.A: 인스턴스 메서드를 호출하는 코드를 작성하고 이러한 호출의 결과를 판단할 수 있다.

  • 1.14.A.1 인스턴스 메서드는 해당 클래스의 객체에서 호출된다. 인스턴스 메서드를 호출할 때 점(.) 연산자와 함께 객체명을 사용한다.
  • 1.14.A.2 null 참조에 대한 메서드 호출은 NullPointerException을 초래한다.

출처: College Board AP Course and Exam Description

인스턴스 메서드는 특정 객체에 대해 작동하므로, 객체 참조를 통해 호출합니다: object.method(args). 예: in.nextInt(), word.length().

1.15

문자열 조작(String Manipulation)

Syllabus
Learning ObjectiveEssential Knowledge

1.15.A
Develop code to create string objects and determine the result of creating and combining strings.

  • 1.15.A.1 A String object represents a sequence of characters and can be created by using a string literal or by calling the String class constructor.
  • 1.15.A.2 The String class is part of the java.lang package. Classes in the java.lang package are available by default.
  • 1.15.A.3 A String object is immutable, meaning once a String object is created, its attributes cannot be changed. Methods called on a String object do not change the content of the String object.
  • 1.15.A.4 Two String objects can be concatenated together or combined using the + or += operator, resulting in a new String object. A primitive value can be concatenated with a String object. This causes the implicit conversion of the primitive value to a String object.
  • 1.15.A.5 A String object can be concatenated with any object, which implicitly calls the object's toString method (a behavior that is guaranteed to exist by the inheritance relationship every class has with the Object class). An object's toString method returns a string value representing the object. Subclasses of Object often override the toString method with class-specific implementation. Method overriding occurs when a public method in a subclass has the same method signature as a public method in the superclass, but the behavior of the method is specific to the subclass.
    • Exclusion statement: Overriding the toString method of a class is outside the scope of the AP Computer Science A course and exam.

1.15.B
Develop code to call methods on string objects and determine the result of calling these methods.

  • 1.15.B.1 A String object has index values from 0 to one less than the length of the string. Attempting to access indices outside this range will result in a StringIndexOutOfBoundsException.
  • 1.15.B.2 The following String methods—including what they do and when they are used—are part of the Java Quick Reference:
    • int length() returns the number of characters in a String object.
    • String substring(int from, int to) returns the substring beginning at index from and ending at index to - 1.
    • String substring(int from) returns substring(from, length()).
    • int indexOf(String str) returns the index of the first occurrence of str; returns -1 if not found.
    • boolean equals(Object other) returns true if this corresponds to the same sequence of characters as other; returns false otherwise.
    • int compareTo(String other) returns a value < 0 if this is less than other; returns zero if this is equal to other; returns a value > 0 if this is greater than other. Strings are ordered based upon the alphabet.
    • Exclusion statement: Using the equals method to compare one String object with an object of a type other than String is outside the scope of the AP Computer Science A course and exam.
  • 1.15.B.3 A string identical to the single element substring at position index can be created by calling substring(index, index + 1).

출처: College Board AP Course and Exam Description

문자열은 불변(immutable)

String 객체는 불변(immutable) — 메서드는 원본을 변경하지 않고 새로운(new) 문자열을 반환합니다. 주요 메서드(모든 인덱스는 0에서 시작):

s.length();            // number of characters
s.substring(2, 5);     // chars at index 2,3,4 (5 excluded)
s.indexOf("ab");       // first position, or -1
s.equals(other);       // content comparison (never use == for Strings)
s.compareTo(other);    // <0, 0, >0 by dictionary order

시험 기술: substring(a, b)는 인덱스 a을 포함하지만 포함하지 않습니다(excludes) b, 그리고 String 비교에는 .equals을 use해야 하며, ==을 use해서는 안 됩니다—가장 많이 출제되는 두 가지 String 함정입니다.

해설 예시. String s = "COMPUTER";라고 합시다 (인덱스 0–7). 그러면 s.length()은 8이고; s.substring(0, 4)은 "COMP"입니다 (인덱스 0,1,2,3 – 인덱스 4 제외); s.substring(4)은 "UTER"입니다 (인덱스 4부터 끝까지); s.indexOf("PU")은 3이며; s.indexOf("X")은 -1입니다 (발견되지 않음). substring의 제외된 종점을 세는 것이 가장 흔한 실수입니다.

0에서 length()-1 사이의 인덱스를 요청하면(bad substring or charAt arguments, e.g. here s.substring(0, 20)), StringIndexOutOfBoundsException이 발생하며 crash합니다—이것은 배열 인덱스 오류의 String cousin입니다.

String 인덱스는 0에서 시작합니다
String 인덱스는 0에서 시작합니다
탐색하기

문자열 인덱스와 슬라이싱을 탐색해 보십시오

모든 문자에는 인덱스가 있으며, 번호는 0부터 시작합니다. 시작점과 끝점을 드래그하여 substring(from, to)가 from부터 시작하여 — 하지만 포함하지 않고 — to까지의 문자들을 가져오는 방식을 확인하십시오.

English 한국어
immutable/ɪˈmjuːtəbl/ 불변(immutable)
1.15

시험 팁

  • 줄마다 수동으로 코드를 trace하고 각 변수의 값을 표에 기록하십시오—시험에서는 추측보다 careful tracing이 점수를 받습니다.
  • Java의 primitive types를 알고, 정수除法가 truncation됨을 알 것 ($7/2$ gives $3$); 실제除法를 위해 cast나 double을 사용하십시오.
  • 컴파일 타임 오류(문법, 타입)와 런타임 오류를 구분한다. 명명된 오류를 기억해야 한다: ArithmeticException (int ÷ 0), NullPointerException (null 참조에 대한 메서드 호출), StringIndexOutOfBoundsException / ArrayIndexOutOfBoundsException – 그리고 로직 오류(잘못된 출력).
  • 연산자 우선순위를 따르고, 변수를 사용할 전에 반드시 초기화한다.
  • 자유 서술형 문제에서는 완전하고 컴파일 가능한 Java 코드를 작성하라. 올바른 반환 타입을 사용하고 메서드 헤더와 정확히 일치시켜라.
English 한국어
primitive types/ˈprɪmɪtɪv taɪps/ 원시 유형(primitive types)

이 주제에 대한 인터랙티브 수업

즉시 체크 기능 exercises를 통해 단계별로 진행하세요.

과거 시험지

AP 컴퓨터 과학 A 내 추가 주제

로그인 또는 계정 만들기

IGCSE, A-Level & AP