Summary
자바의 정석 2장 변수(Variables) 파트의 연습문제와 해설이다. 자바의 8가지 기본형(primitive type) 데이터 타입과 특성, 변수 선언 방법, 형변환 규칙 등을 다룬다. 각 문제를 통해 변수의 개념과 자바 언어의 데이터 타입 시스템을 체계적으로 이해할 수 있다.
연습문제
2-1. 기본형(primitive type) 분류
다음 표의 빈칸에 8개의 기본형(primitive type)을 알맞은 자리에 넣으시오.
종류 / 크기 | 1 byte | 2 byte | 4 byte | 8 byte |
---|---|---|---|---|
논리형 | boolean | |||
문자형 | char | |||
정수형 | byte | short | int | long |
실수형 | float | double |
2-2. 적절한 데이터 타입 선택
주민등록번호를 숫자로 저장하고자 한다. 이 값을 저장하기 위해서는 어떤 자료형(data type)을 선택해야 할까? regNo라는 이름의 변수를 선언하고 자신의 주민등록번호로 초기화하는 한 줄의 코드를 적으시오.
String regNo = "012345-6789012";
2-3. 프로그래밍 요소 구분
다음의 문장에서 리터럴, 변수, 상수, 키워드를 적으시오.
int i = 100;
long l = 100L;
final float PI = 3.14f;
- 리터럴: 100, 100L, 3.14f
- 변수:
i
,l
- 키워드:
int
,long
,final
,float
- 상수:
PI
2-4. 기본형(primitive type) 식별
다음 중 기본형(primitive type)이 아닌 것은?
- a. int
- b. Byte
- c. double
- d. boolean
정답: b. Byte (대문자로 시작하는 Byte는 래퍼 클래스)
자바의 기본형 타입과 특성:
타입 | 할당되는 메모리 크기 | 기본값 | 데이터의 표현 범위 |
---|---|---|---|
논리형 | |||
boolean | 1 byte | false | true, false |
정수형 | |||
byte | 1 byte | 0 | -128 ~ 127 |
short | 2 byte | 0 | -32,768 ~ 32,767 |
int(기본) | 4 byte | 0 | -2,147,483,648 ~ 2,147,483,647 |
long | 8 byte | 0L | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
실수형 | |||
float | 4 byte | 0.0F | (3.4 × 10^-38) ~ (3.4 × 10^38)의 근사값 |
double(기본) | 8 byte | 0.0 | (1.7 × 10^-308) ~ (1.7 × 10^308)의 근사값 |
문자형 | |||
char | 2 byte (유니코드) | ‘\u0000’ | 0 ~ 65,535 |
2-5. 연산 결과 예측
다음 문장들의 출력 결과를 적으시오. 오류가 있는 문장의 경우, 괄호 안에 ‘오류’라고 적으시오.
System.out.println("1" + "2"); // 12
System.out.println(true + ""); // true
System.out.println('A' + 'B'); // 131
System.out.println('1' + 2); // 51
System.out.println('1' + '2'); // 99
System.out.println('J' + "ava"); // Java
System.out.println(true + null); // 오류
2-6. 키워드 식별
다음 중 키워드가 아닌 것은? (모두 고르시오)
- a. if
- b. True
- c. NULL
- d. Class
- e. System
정답: b. True, c. NULL, d. Class, e. System (자바 키워드는 모두 소문자이며, true/null은 리터럴이고, System은 클래스)
2-7. 유효한 변수명 식별
다음 중 변수의 이름으로 사용할 수 있는 것은? (모두 고르시오)
- a. $ystem
- b. channel#5
- c. 7eleven
- d. If
- e. 자바
- f. new
- g. $MAX_NUM
- h. hello@com
정답: a. MAX_NUM (변수명은 문자, $, _로 시작해야 하며, 키워드는 사용 불가)
2-8. 참조형 변수와 같은 크기의 기본형
참조형 변수(reference type)와 같은 크기의 기본형(primitive type)은? (모두 고르시오)
- a. int
- b. long
- c. short
- d. float
- e. double
정답: a. int, d. float (참조형 변수는 4바이트 크기를 가짐)
2-9. 형변환 생략 가능 여부
다음 중 형변환을 생략할 수 있는 것은? (모두 고르시오)
byte b = 10;
char ch = 'A';
int i = 100;
long l = 1000L;
- a. b = (byte)i;
- b. ch = (char)b;
- c. short s = (short)ch;
- d. float f = (float)l;
- e. i = (int)ch;
정답: d. float f = (float)l;, e. i = (int)ch; (작은 타입에서 큰 타입으로의 변환은 자동 형변환 가능)
2-10. char 타입의 범위
char 타입의 변수에 저장될 수 있는 정수 값의 범위는? (10진수로 적으시오)
정답: 0 ~ 65535 (char는 2바이트(16비트) 부호 없는 정수로, 2^16 = 65536가지 값을 표현)
2-11. 변수 초기화 오류 식별
다음 중 변수를 잘못 초기화한 것은? (모두 고르시오)
- a. byte b = 256;
- b. char c = ”;
- c. char answer = ‘no’;
- d. float f = 3.14;
- e. double d = 1.4e3f;
정답: a, b, c, d
- a: byte 범위(-128~127) 초과
- b: char는 빈 문자(”)가 아닌 최소 하나의 문자 필요
- c: char는 단일 문자만 가능
- d: float에는 f 접미사 필요 (3.14f)
2-12. main 메서드 선언부 식별
다음 중 main 메서드의 선언부로 알맞은 것은? (모두 고르시오)
- a.
public static void main(String[] args)
- b.
public static void main(String args[])
- c.
public static void main(String[] arv)
- d.
public void static main(String[] args)
- e.
static public void main(String[] args)
정답: a, b, c, e (d는 접근 제어자(public)와 지정자(static)의 순서가 잘못됨)
2-13. 타입과 기본값 연결
다음 중 타입과 기본값이 잘못 연결된 것은? (모두 고르시오)
- a. boolean - false
- b. char - ‘\u0000’
- c. float - 0.0
- d. int - 0
- e. long - 0
- f. String - ""
정답: c, e, f
- c: float의 기본값은 0.0f
- e: long의 기본값은 0L
- f: String의 기본값은 null (참조형)