Summary

자바의 정석 2장 변수(Variables) 파트의 연습문제와 해설이다. 자바의 8가지 기본형(primitive type) 데이터 타입과 특성, 변수 선언 방법, 형변환 규칙 등을 다룬다. 각 문제를 통해 변수의 개념과 자바 언어의 데이터 타입 시스템을 체계적으로 이해할 수 있다.

연습문제

2-1. 기본형(primitive type) 분류

다음 표의 빈칸에 8개의 기본형(primitive type)을 알맞은 자리에 넣으시오.

종류 / 크기1 byte2 byte4 byte8 byte
논리형boolean
문자형char
정수형byteshortintlong
실수형floatdouble

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는 래퍼 클래스)

자바의 기본형 타입과 특성:

타입할당되는 메모리 크기기본값데이터의 표현 범위
논리형
boolean1 bytefalsetrue, false
정수형
byte1 byte0-128 ~ 127
short2 byte0-32,768 ~ 32,767
int(기본)4 byte0-2,147,483,648 ~ 2,147,483,647
long8 byte0L-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
실수형
float4 byte0.0F(3.4 × 10^-38) ~ (3.4 × 10^38)의 근사값
double(기본)8 byte0.0(1.7 × 10^-308) ~ (1.7 × 10^308)의 근사값
문자형
char2 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 (참조형)