# Chapter 2 : 변수
Q1. 다음 표의 빈칸에 8개의 기본형(primitive type)을 알맞은 자리에 넣으시오.
종류 / 크기 | 1byte | 2byte | 4byte | 8byte |
논리형 | ||||
문자형 | ||||
정수형 | ||||
실수형 |
A. 기본형 데이터타입 표
종류 / 크기 | 1byte | 2byte | 4byte | 8byte |
논리형 | boolean | |||
문자형 | char | |||
정수형 | byte | short | int | long |
실수형 | float | double |
Q2. 주민등록번호를 숫자로 저장하고자 한다.
이 값을 저장하기 위해서는 어떤 자료형을 선택해야 할까?
regNo라는 이름의 변수를 선언하고 자신의 주민등록번호로 초기화하는 한 줄의 코드를 적으시오.
A.
long regNo = 1234561234567L;
정수형은 int로 저장하는데 int의 범위를 넘어서기 때문에
long으로 저장하기 위해 L를 붙여주고 long형 변수에 저장하는 것이다.
Q3. 다음의 문장에서 리터럴, 변수, 상수, 키워드를 적으시오.
int i = 100;
long l = 100L;
final float PI = 3.14f;
A. 리터럴 : 100, 100L, 3.14f
변수 : i, l
상수 : PI
키워드 : int, long, final, float (문법에서 쓰이고 있는 용어들 = 예약어)
Q4. 다음 중 기본형이 아닌 것은?
ⓐ int
ⓑ Byte
ⓒ double
ⓓ boolean
A. ⓑ Byte - 참조형(reference type)이다.
첫 글자가 대문자이므로 wrapper class이다.
기본형은 소문자로 시작하는 byte이다.
Q5. 다음 문장들의 출력결과를 적으시오.
오류가 있는 문장의 경우, 괄호 안에 '오류' 라고 적으시오.
A.
System.out.println(“1” + “2”) → (12)
System.out.println(true + “”) → (true)
System.out.println(‘A' + 'B') → (131) // 정수형 연산하여 65 + 66 (문자코드 값) → ∴ 131
System.out.println('1' + 2) → (51) // 49 + 2 → ∴ 51
System.out.println('1' + '2') → (99) // 49 + 50 → ∴ 99
System.out.println('J' + “ava”) → (Java) // 문자 'j' + 문자열 "ava" = 문자열 "Java"
System.out.println(true + null) → (오류)
- 문자열 + any type → 문자열 + 문자열 → 문자열
any type + 문자열 → 문자열 +문자열 → 문자열
∴ 문자열과 덧셈연산을 하면 그 결과는 항상 문자열이 된다.
하지만 문자와 문자의 덧셈연산의 결과는 형 정수값이 된다.
왜냐하면 int형보다 작은 타입(byte, char, short)은 형으로 변환된 후에 덧셈연산이 진행되기 때문이다.
'A'+'B'의 경우, char + char → int + int → int 의 과정을 통해 최종결과는 int형 정수 값이 된다.
// Tip : 문자 '0'은 48이다.
Q6. 다음 중 키워드가 아닌 것은?(모두 고르시오.)
ⓐ if
ⓑ True
ⓒ NULL
ⓓ Class
ⓔ System
A. ⓑ True ≠ true(키워드) // Java에서는 대소문자를 구별하기 때문에 true는 키워드지만 True는 키워드가 아니다.
ⓒ NULL
ⓓ Class // Class라는 클래스가 따로 있다!
ⓔ System
// Tip : 파이썬에선 True로 표현하기 때문에 키워드가 된다!
- Java에서 사용하는 키워드 리스트
Java에서 사용하는 키워드 | |||||
abstract | const | final | int | public | throw |
assert | continue | finally | interface | return | throws |
boolean | default | float | long | short | transient |
break | do | for | native | static | true |
byte | double | if | new | strictfp | try |
case | else | goto | null | super | void |
canativtch | enum | implements | package | switch | volatile |
char | extends | import | private | synchronized | while |
class | false | instanceof | protected | this |
Q7. 다음 중 변수의 이름으로 사용할 수 있는 것은? (모두 고르시오.)
ⓐ $ystem
ⓑ channel#5 // 허용되지 않은 특수기호 사용함
ⓒ 7eleven // 숫자로 변수명 시작할 수 없다
ⓓ If // 문법적으로 가능하나 혼동 야기할 수 있으므로 지양하는 것이 좋다
ⓔ 자바 / 한글도 변수명을 줄 수 있으나 다른 프로그램과의 호환성을 위해 영어 사용하는 것이 좋다
ⓕ new // 예약어로 사용불가
ⓖ $MAX_NUM
ⓗ hello@com // 허용되지 않은 특수기호 사용함
A. ⓐ $ystem
ⓓ If
ⓔ 자바
ⓖ $MAX_NUM
변수명 규칙 |
① 대소문자가 구분되며 길이에 제한이 없다. |
Q8. 참조형 변수와 같은 크기의 기본형은? (모두 고르시오.)
ⓐ int (4byte)
ⓑ long (8byte)
ⓒ short (2byte)
ⓓ float (4byte)
ⓔ double (8byte)
A. ⓐ int (4byte) // 모든 참조형 변수는 4byte이므로, 크기가 4byte인 기본형 타입이 정답이다.
ⓓ float (4byte)
Q9. 다음 중 형변환을 생략할 수 있는 것은? (모두 고르시오.)
byte b = 10;
char ch = 'A';
int i = 100;
long l = 1000L;
A. ⓐ b = (byte)i; // int(4byte) → byte(1byte)이므로 반드시 형변환 필요
ⓑ char ch = 'A';ch = (char)b;
// byte(1byte) → char(2byte)이지만
byte는 음수 표현 가능하고 char는 양수만 가능해(범위가 달라서) 형변환 필요
ⓒ short s =short s = (short)ch; // char,short은 2byte이지만 범위가 달라서 형변환 필요
ⓓ float (4byte)float f = (float)l; // float(4byte)의 범위가 long(8byte)보다 커서 생략가능
ⓔ double (8byte) i = (int)ch; // char(2 byte) → int(4byte)이므로 생략가능
∴ 정답은 ⓓ, ⓔ
작은 자료형에서 큰 자료형으로 형변환 된다!
Q10. char타입의 변수에 저장될 수 있는 정수 값의 범위는? (10진수로 적으시오.)
A. 0~65535
char는 2 byte(2*8=16bit)이므로 ‘2의 16제곱’ 개의 값을 표현할 수 있다.
2의 16제곱은 65536개이며, 0을 포함해야하므로 0~65535(0 포함 총 65536개)가 char범위가 된다.
Q11. 다음 중 변수를 잘못 초기화 한 것은? (모두 고르시오)
ⓐ byte b = 256;
ⓑ char c = '';
ⓒ char answer = 'no';
ⓓ float f = 3.14
ⓔ double d = 1.4e3f; // double(8byte)에 float값(4byte)을 넣는 것이므로 더 작은 수는 가능하다.
A. ⓐ byte b = 256; // byte의 범위(-128~127)를 넘는 값으로 초기화 할 수 없음.
ⓑ char c = ''; // char는 반드시 한 개의 문자를 지정해야 함.
space bar는 문자로 가능하나, 아예 아무 것도 없기 때문에 불가한 것
ⓒ char answer = 'no'; // char에 두 개의 문자를 저장할 수 없음.
" "를 사용해줘야 한다.
ⓓ float f = 3.14 // 3.14는 3.14d의 생략된 형태.
접미사f를 붙이거나 형변환이 필요함.
접미사가 있는 자료형은 long, float, double 모두 세 개의 자료형이며,
접미사는 대소문자를 구별하지 않는다.
double은 접미사를 생략할 수 있으나, float 리터럴에는 반드시 접미사를 붙여야한다.
Q12. 다음 중 main메서드의 선언부로 알맞은 것은? (모두 고르시오.)
ⓐ public static void main(String[] args)
ⓑ public static void main(String args[])
ⓒ public static void main(String[] arv)
ⓓ public void static main(String[] args) // void는 반드시 main앞에 와야 한다.
ⓔ static public void main(String[] args)
A. ⓐ public static void main(String[] args)
ⓑ public static void main(String args[]) // 배열 위치 상관없음
ⓒ public static void main(String[] arv) // 매개변수명인 args의 이름은 달라도 됨
ⓔ static public void main(String[] args) // public과 static은 위치가 바뀌어도 됨
배열을 의미하는 기호인 ‘[]’는 타입 뒤에 붙여도 되고 변수명 뒤에 붙여도 되기 때문에
'String[] args'와 ‘String args[]'는 같은 뜻이다.
// Tip : static, public, final은 문법적으로는 순서가 상관없다.
Q13. 다음 중 타입과 기본값이 잘못 연결된 것은? (모두 고르시오.)
ⓐ boolean - false
ⓑ char - '\u0000' // 유니코드
ⓒ float - 0.0
ⓓ int - 0
ⓔ long - 0
ⓕ String - ""
A. ⓒ float - 0.0 // float는 0.0f가 기본값. 0.0은 0.0d에서 접미사 d가 생략된 것
ⓔ long - 0 // long은 0L이 기본값.
ⓕ String - "" // String은 참조형 타입.
모든 참조형 타입의 기본값은 null이다. (인스턴수 변수에 있을 때)
리터럴의 접미사는 대소문자를 구분하지 않으므로, long의 경우 'L'또는 'l'(소문자)을 사용할 수 있지만,
'l'은 숫자 '1'과 혼동하기 쉬우므로 대문자를 사용하는 것이 좋다.
[참고자료] Java의 정석 3rd Edition / 남궁성 / https://cafe.naver.com/javachobostudy
'SW > Java' 카테고리의 다른 글
[문제] 자바의 정석 Chapter 4 조건문과 반복문 연습문제 및 해답정리 (0) | 2020.07.23 |
---|---|
[문제] 자바의 정석 Chapter 3 연산자 연습문제 및 해답정리 (0) | 2020.07.23 |
[필기정리]Day28 - 쓰레드 문제(중심내용) (0) | 2020.07.17 |
[필기정리]Day27 - 쓰레드 이론 및 문제 (0) | 2020.07.16 |
[필기정리]Day26 - 전화번호 관리 프로그램 08단계 문제 (0) | 2020.07.15 |