본문 바로가기
Solution_/명품 java

[명품 JAVA] 6장 연습문제 (모듈과 패키지 개념, 자바 기본 패키지)

by 낭람_ 2019. 5. 15.
반응형

[6장 1번]


import에 대한 다음 질문에 답하라.

(1) import 문은 언제 사용하며, import 문이 의미하는 바는 무엇인가?


- import 문은 다른 패키지에 있는 클래스를 사용할 때 코드의 서두에 선언하는 것으로, 컴파일러에게 그 클래스의 경로명을 알려주는 문이다.


(2) import java.util.Random;과 import java.util.*;의 의미는 각각 무엇인가?


- import java.util.Random;은 Random 클래스가 java.util 패키지에 있음을 컴파일러에게 알려주는 문이다. 자바 소스 프로그램에서 Random의 이름을 사용하면, 컴파일러가 Random 클래스의 경로명을 찾을 때, import 문을 참조하여 찾게 한다. import java.util.*;는 자바 프로그램 내에서 사용하는 클래스들의 경로명을 찾을 때, java.util 패키지에서도 확인할 것을 컴파일러에게 지시하는 문이다. 만일 자바 소스 프로그램에서 Random 클래스를 사용하면, 컴파일러는 Random 클래스가 어느 패키지에 있는지 찾기 위해 java.util 패키지 에서 확인해본다. import java.util.*;는 import java,util.Random; import java,util.Vector; 등과 같이 여러 import 문을 줄여 사용할 때 유용하다.


(3) import 문을 사용하지 않고도 자바 프로그램을 작성할 수 있는가?


import 문을 사용하지 않고도 자바 프로그램을 작성할 수 있다. 자바 프로그램을 작성할 때, 모든 클래스의 이름에 완전 경로명을 사용하면 된다. 예를 들면 java.util.Random r = new java.util.Random(); 과 같이 완전 경로명으로 작성하는 것이다. 하지만, 프로그램의 코드가 길어지고 복잡해져 가독성이 떨어지는 단점이 있어 import 문을 사용하는 것이 효과적이다.


(4) 어떤 패키지에 속한 클래스는 import문 없이도 사용할 수 있는가?


java.lang 패키지에 속한 클래스들은 import 없이도 사용할 수 있다. java.lang 패키지에 속한 클래스들로는 Object, String, Math, System 등이 있다.


[6장 2번]


패키지에 대한 설명 중 잘못된 것은?

1. package 키워드를 이용하여 패키지를 선언한다.

2. 서로 관련된 클래스와 인터페이스들을 하나의 디렉터리에 묶어 놓은 것이다.

3. 패키지는 컴파일된 클래스 파일들을 저장하는 위치를 지정한다.

4. 자바 JDK는 클래스들을 모두 하나의 패키지에 담아 제공한다.


- 4. 자바 JDK는 클래스들을 모두 하나의 패키지에 담아 제공한다.


[3-4] 다음은 코드와 실행 결과이다.

import java.util.StringTokenizer;
public calss Example {
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer("a=3,b=5,c=6",",");
while(st.hasMoreTokens())
System.out.println(st.nextToken());
}
}

a=3
b=5
c=6


[6장 3번]


import 문을 사용하지 않도록 Example 클래스를 다시 작성하라.


[풀이]

public class Example {
public static void main(String[] args) {
java.util.StringTokenizer st = new java.util.StringTokenizer("a=3,b=5,c=6",",");
while (st.hasMoreTokens())
System.out.println(st.nextToken());
}
}


[6장 4번]


다음과 같이 출력되도록 코드를 수정하라.

a
3
b
5
c
6
합은 14


[풀이]

public class Example {
public static void main(String[] args) {
java.util.StringTokenizer st = new java.util.StringTokenizer("a=3,b=5,c=6",",=");
int sum = 0;
while (st.hasMoreTokens()) {
String next = st.nextToken();
try {
sum += Integer.parseInt(next);
System.out.println(next);
}
catch(NumberFormatException e) {
System.out.println(next);
}
}
System.out.println("합은 "+sum);
}
}


[6장 5번]


다음 물음에 답하라.

(1) 다음 클래스를 device 패키지에 속하게 하고자 한다. 빈칸에 적합한 코드를 작성하라.

package device;
public class TV {
private int size;
public TV(int size) { this.size = size; }
}

(2) 앞에서 작성한 TV 클래스를 활용하는 Home 클래스를 작성한다. Home 클래스를 app 패키지에 저장하고자 할 때 빈칸에 적합한 코드를 작성하라.

package app;
import device.TV;
public calss TV {
private int size;
public TV(int size) { this.size = size; }
}

(3) TV 클래스와 Home 클래스를 컴파일한 TV.class 와 Home.class의 경로명은?

- TV 클래스를 컴파일한 TV.class 파일의 경로명은 device.TV.class이고, Home 클래스를 컴파일한 Home.class 파일의 경로명은 app.Home.class이다.


[6장 6번]


Wrapper 클래스에 대한 질문이다. 다음 물음에 답하여라.

(1) 정수 20을 문자열 변수 s1에 "20"으로 저장하는 코드를 작성하라.

String s1 = Integer.toString(20);

(2) 문자열 "35.9"를 double 타입 변수 d에 실수 값 35.9로 저장하는 코드를 작성하라.

double d = Double.parseDouble(“35.9”);

(3) "ture" 문자열을 boolean 타입 변수 b에 불린 값 true로 저장하는 코드를 작성하라.

boolean b = Boolean.parseBoolean(“true”);

(4) 정수 30을 이진수의 문자열로 변환하여 s2에 저장하는 한 줄의 코드를 작성하라.

String s2 = Integer.toBinaryString(30);

(5) 문자 'c'를 문자열 "c"로 변환하여 변수 c에 저장하는 한 줄의 코드를 작성하라.

String c = Character.toString(‘c’);


[6장 7번]


다음 코드의 실행 결과와 실행 결과의 이유를 말하라.

String a = "가나다라";
System.out.println(a == "가나다라");
String b = new String(a);
System.out.println(a == b);

[결과]

true
false

[이유]

"가나다라" 문자열은 자바 가상 기계의 스트링 리터럴 테이블에 저장되고, String a의 레퍼런스 a는 리터럴 테이블을 가리키므로, "가나다라" 문자열의 레퍼런스와 레퍼런스 a의 값은 일치한다. 그러므로 a == "가나다라"의 비교 연산은 true이다. 하지만, new String(a)에 의해 생성되는 객체는 힙에 생성되므로 String b는 힙 영역을 가리킨다. 그러므로 a == b의 연산에서 ab의 레퍼런스 값은 서로 달라 연산 결과는 false가 된다.


[6장 8번]


다음 코드가 실행된 후 a, b, c 문자열은 무엇인가?

String a = new String(" Oh, Happy ");
String b = a.trim();
String c = b.concat(" Day.");


     Oh, Happy
Oh, Happy
Oh, Happy Day.


[6장 9번]


다음 코드에 대해 물음에 답하여라.

String a = "Hello";
String b = "Hello";
String c = "Java";
String d = new String("Hello");
String e = new String("Java");
String f = new String("Java");

(1) a와 == 연산을 수행하였을 때 true가 되는 문자열을 b~f 중 모두 골라라.

- b

(2) f와 equals() 연산을 수행하였을 때 true가 되는 문자열을 a~e중 모두 골라라.

- c, e


[6장 10번]


다음 중 자동 박싱과 자동 언박싱이 있는 부분을 파악하라.

(1) Double PI = 3.14;

- 3.14를 Double.valueOf(3.14)로 처리 _ 자동 박싱

(2) double pi = PI;

- PI를 PI.doubleValue();로 처리 _ 자동 언박싱

(3) System.out.println(3 + Integer.valueOf(5));

- Integer.valueOf(5)는 wrapper클래스이고 3은 기본 자료형이다. _ 자동 언박싱

(4) if('c' == Character.valueOf('c');

- Chracter.valueOf('c')는 wrapper클래스이고 'c'는 기본 자료형이다. _ 자동 언박싱


[6장 11번]


100에서 255까지(255 포함)의 난수를 10개 발생시키는 코드이다.

for(int i=0; i<10; i++) {
System.out.println( );
System.out.println(" ");
}


192 207 131 249 204 120 132 207 194 236

(1) Math 클래스를 활용하여 빈칸에 적절한 코드를 작성하라.

for(int i=0; i<10; i++) {
System.out.println((int)(Math.random()*156+100));
System.out.println(" ");
}

(2) Random 클래스로 난수를 발생시키도록 코드 전체를 재작성하라.

import java.util.Random;
public class java_study {
public static void main(String[] args) {
Random r = new Random();
for(int i=0; i<10; i++) {
System.out.print(r.nextInt(156)+100);
System.out.print(" ");
}
}
}


[6장 12번]


다음은 2020년 12월 25일의 약속을 저장하기 위해 Calendar 클래스를 활용하는 코드이다. 주석문에 맞도록 코드를 작성하라.

import java.util.Calendar;
public class java_study {
public static void main(String[] args) {
Calendar date = Calendar.getInstance(); //Calendar 객체 생성
date.clear(); // 현재 Calendar 객체에 저장된 정보를 모두 지운다.
date.set(Calendar.YEAR, 2020); // Calendar 객체에 2020년의 년도 저장
date.set(Calendar.MONTH, 11); // Calendar 객체에 12월의 달 저장 (0~11까지 저장가능)
date.set(Calendar.DAY_OF_MONTH, 25); // Calendar 객체에 25일의 날짜 저장
System.out.println("약속 날짜는 "+date.get(Calendar.YEAR)+"년 "+(date.get(Calendar.MONTH)+1)+"월 "
+date.get(Calendar.DAY_OF_MONTH)+"일");
}
}

약속 날짜는 2020년 12월 25일








반응형

댓글