[문제] 자바의 정석 Chapter 2 변수 연습문제 및 해답정리

SW/Java

2020. 7. 22. 19:08

# 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

 

변수명 규칙

① 대소문자가 구분되며 길이에 제한이 없다.  
    True와 true는 서로 다른 것으로 간주된다.
② 예약어를 사용해서는 안 된다.
    true는 예약어라서 사용할 수 없지만 True는 가능하다.
③ 숫자로 시작해서는 안 된다.
    top10은 허용하지만, 7up은 허용되지 않는다.
④ 특수문자는 '_'와 '$' 만을 허용한다.
    $harp은 허용되지만, S#arp은 허용되지 않는다.      

 

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  

 

728x90