Java의 정석 Chapter2 연습문제

Geun Bo Kim·2023년 3월 7일
0
post-thumbnail

* 자바의 정석 첫 공부 시작 및 기본문법과 변수에 관한 연습문제 풀이

Chapter2 연습문제 [2-1 ~ 2-8]

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

답:

풀이 :

  • boolean은 true와 false 두 가지 값만 표한혈 수 있으면 되므로 가장작은 크기인 1byte
  • char은 자바에서 유니코드(2 byte 문자체계)를 사용하므로 2 byte
  • byte는 크기가 1byte라서 byte
  • int는( 4 byte)를 기준으로 짧아서 short(2 byte), 길어서 long(8 byte). (short <-> long)
  • float는 실수값을 부동소수점(floating-point)방식으로 저장하기 때문에 float
  • double은 float보다 두 배의 크기(8 byte)를 갖기 때문에 double

[2-2] 다음 중 키워드가 아닌 것은? (모두 고르시오)

1. if

2. True

3. NULL

4. Class

5. System

답: 2,3,4,5

1. if

2. True

3. NULL

4. Class

5. System

풀이 :

🧐 키워드가 무엇일까?

  • 미리 예약해 놓은 단어를 의미한다. 그래서 키워드를 Reserved Word 즉, 키워드는 특별한 의미를 갖고 있는 명령어이다.
  • True ≠ true (키워드) → 자바에서는 대소문자를 구별하기 때문에 True는 키워드 X
  • Class → Class라는 클래스가 따로 있다!

자바에서 사용하는 키워드 모음 👇

[2-3] char타입의 변수에 저장될 수 있는 정수 값의 범위는?(10진수로 적으시오)

답: 0~65535

풀이 :

char는 2 byte(2x8=16bit)이므로 '2의 16제곱' 개의 값을 표현할 수 있다.
2의 16제곱은 65536개이며 , 0을 포함해야하므로 0~65535 모두가 char범위가 된다.

[2-4] 다음중 변수를 잘못 초기화 한 것은?(모두 고르시오)

1. byte b = 256;

2. char c = '';

3. char answer = 'no';

4. float f = 3.14

5. double d = 1.4e3f;

답 : 1,2,3,4

풀이 :

1. byte b = 256; // byte (-128~127) . 의 범위 를 넘는 값으로 초기화 할 수 없음 //

2. char c = ''; // char는 반드시 한 개의 문자를 지정해야함 space bar는 문자로 가능하나, 아예 아무 것도 없기 때문에 불가함 //

3. char answer = 'no'; // char . 에 두 개의 문자를 저장할 수 없음. " " 를 사용해줘야 한다.//

4. float f = 3.14 // 3.14 3.14d . f 는 의 생략된 형태 접미사 f를 붙이거나 형변환필요//

5. double d = 1.4e3f; // double(8byte) float (4byte) OK 에 값 을 넣는 것이므로 OK//

  • 접미사가 있는 자료형은 long, float, double 모두 세 개의 자료형이며, 접미사는 대소문자를 구별하지 않는다. double은 접미사를 생략할 수 있으나, float 리터럴에는 반드시 접미사를 붙여야한다.

[2-5] 다음의 문장에서 리터럴, 변수, 상수, 키워드를 적으시오.

답 :

-리터럴 : 100, 100L, 3.14f

-변수 : i, l

-키워드 : int, long, final, float

-상수 : PI

[2-6] 다음 중 기본형(primitive type)이 아닌 것은?

1. int

2. Byte

3. double

4. boolean

답 : 2

풀이 :

기본형은 boolean, byte, short, char, int, long, float, double 총 8개로 모두 소문자로 시작함.
그 외의 타입은 모두 참조형(reference type)이다.

  • 2번 Type은 wrapper class이다.

🧐 wrapper class란??

자바의 자료형은 크게 기본 타입(primitive type)과 참조 타입(reference type)으로 나누어집니다. 대표적으로 기본 타입은 char, int, float, double, boolean 등이 있고 참조 타입은 class, interface 등이 있는데 프로그래밍을 하다 보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 종종 있습니다.

이럴 때에 기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 합니다.

[2-7] 다음 문장들의 출력결과를 적으세요. 오류가 있는 문장의 경우, 괄호 안에 '오류'라고 적으시오.

System.out.println(“1” + “2”) ->( )

System.out.println(true + “”) ->( )

System.out.println(‘A' + 'B') ->( )

System.out.println('1' + 2) ->( )

System.out.println('1' + '2') ->( )

System.out.println('J' + “ava”) ->( )

System.out.println(true + null) ->( )

답 :

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) ->( 오류 )

풀이 :

  • System.out.println(true + null)은 주석처리 하지 않으면 오류가 뜸
  • 문자열과 덧셈연산을 하면 그 결과는 항상 문자열이 된다.

문자열 +any type → 문자열 + 문자열문자열
any type + 문자열 → 문자열 + 문자열 → 문자열

  • 문자와 문자의 덧셈연산의 결과는 형 정수값이 된다. (int타입은 형으로 변환된 후에 덧셈연산이 진행되기 때문)
  • 'A'+'B'의 경우 , char + char -> int + int -> int의 과정을 통해 최종결과는 int형 정수 값이 된다.

[2-8] 아래는 변수 x, y, z의 값을 서로 바꾸는 예제이다. 결과와 같이 출력되도록 (1)에 알맞은 코드를 넣으시오.

public class Exercise2_8 {
	public static void main(String[] args) {
		int x = 1;
		int y = 2;
		int z = 3;
		int tmp = x;
        /* 
           알맞은 코드를 넣어 완성하시오.
       */
	System.out.println("x=" + x);
	System.out.println("y=" + y);
	System.out.println("z=" + z);
	}
}

풀이 :

int tmp = x; // X에 값을 저장.
x = y; // X의 값을 y에 저장.
y = z; // y의 값을 z에 저장.
z = tmp; // tmp에 저장 된 값을 z에 저장.

결과값:

자바의 정석을 통해 처음으로 자바를 공부하면 서 연습문제를 풀어보았다.
바로바로 풀 수 없는 문제도 있어 책을 다시 되돌아보면서 풀어보았는데 점점 익숙해지도록 더욱더 증진해야겠다.

profile
미래는 개발이다

0개의 댓글