본문 바로가기
컴퓨터과학[3-1]/[3-1]J A V A

Java - 2016 출석수업 자료 및 예상문제

by boolean 2016. 3. 26.
728x90

Java - 2016 출석수업 자료 및 예상문제

1Java 언어 소개

 

연습 문제

 

1. Java 소스를 컴파일하면 확장자가 ‘.class’ 인 파일이 생성되고 이것은 Java VM에서 실행 가능하다. 이러한 파일을 기계어와 비교했을 때 무엇이라 부르는가?

() 바이트코드

(해설) Java 기술의 특징 중 하나는 Java 고유의 실행 환경을 가지고 있는 점이다. Java 프로

그램이 실행된다는 말은 일반적인 운영체제상에서 직접 실행되는 것을 뜻하는 것이 아니라 운

영체제 위에 설치된 Java VM에서 실행된다는 것을 뜻한다. 따라서 Java 소스 파일을 컴파일

하여 생성되는 바이트코드는 기존 운영체제에서 직접 실행될 수 있는 기계어와는 다르다

 

3. Java 플랫폼은 무엇으로 구성되는가?

() Java VMJava API

(해설) Java VMJava 프로그램의 구동 엔진을 의미하며 Java 프로그램의 실행에 필요한

모든 사항을 관리하는 역할을 수행한다. Java APIJava 프로그램에 사용되는 클래스 라이

브러리이다. Java 플랫폼을 설치하기 위해서는 Java SDK를 설치하면 된다.

 

5. 웹 브라우저를 이용해 다음 페이지에 접속해 보아라. 어떤 문서를 볼 수 있는가?

http://java.sun.com/javase/6/docs/api/index.html

() Java Platform, Standard Edition 6, API Specification

(해설) JDK를 설치하면 Java 프로그램에서 사용할 수 있는 Java 개발 도구, Java VM

Java API가 설치된다. 위 페이지는 Java의 기본 API에 포함되어 있는 패키지, 클래스 및 인

터페이스를 설명해 주는 문서이다.

 

7. Java 소스 파일 하나에 포함될 수 있는 public 클래스는 최대 몇 개인가?

() 1

(해설) public 클래스의 이름은 Java 소스 파일의 이름과 같아야 한다. 따라서 public 클래스

는 하나의 소스 파일에 최대 1개가 있을 수 있다.

 

9. “Java프로그래밍을 출력하는 Java 애플리케이션을 작성하라.

()

public class SimpleApp {

public static void main(String args[ ]) {

System.out.println("Java프로그래밍");

}

}

(해설) Java 애플리케이션은 main 함수를 포함해야 한다. 일반적으로 main 함수를 포함하고

있는 클래스는 public 클래스이다. public 클래스의 이름은 파일의 이름과 같아야 하므로 위

프로그램은 ‘SimpleApp.java’라는 이름의 파일에 저장되어야 한다.

 

11. main 함수를 포함하고 있는 Hello.class 파일을 실행하기 위한 명령은 무엇인가?

() java Hello

(해설) Java의 실행 명령은 bin 폴더에 포함되어 있는 java.exe 파일을 사용한다. 실행 명령

java Hello이며 확장자를 생략해야 한다. 이때 Hello.class가 필요하며 Hello 클래스는

main 함수를 포함하고 있어야 한다.

 

13. Java 언어로 작성되어 컴파일된 후, HTML로 작성된 웹 페이지에 포함되어 웹 브라우저

를 통해 실행되는 프로그램을 무엇이라 하는가?

() Java 애플릿

(해설) Java 애플릿의 실행 과정은 다음과 같다. 사용자가 웹 브라우저를 통해 애플릿을 포함

하고 있는 HTML 페이지를 서버에 요청하면, 서버는 요청에 대한 응답으로 HTML 페이지와

함께 애플릿의 클래스 파일을 사용자의 웹 브라우저에 전송한다. Java VM을 탑재한 웹 브라

우저가 애플릿을 실행한다.

 

15. 1부터 10까지의 정수 합을 계산하여 결과를 출력하는 Java 애플리케이션을 작성하여라.

()

public class Test {

public static void main(String[ ] args) {

int sum = 0;

for (int i=1; i<=10; i++)

sum=sum+i;

System.out.println(sum);

}

}

 

2Java 기본 문법

 

연습 문제

 

1. 다음 보기에서 잘못된 주석은 무엇인가?

a. /** comment */

b. /* comment */

c. /* comment

d. // comment

() c

(해설) 주석과 설명문은 같은 것이다. /**/ 사이의 내용은 모두 실행과 무관한 주석으로

처리된다. 하나의 라인에서 //다음에 나오는 내용은 주석으로 처리된다.

 

3. Java 언어가 제공하는 기본 자료형을 모두 나열하시오.

() byte, short, int, long, float, double, boolean, char

(해설) 8가지가 있으며 String은 클래스이름으로 기본 자료형이 아니다.

 

5. 다음 중 문제가 있는 것은 모두 고르시오.

a. int i = 0x1111;

b. int j = 12.34L;

c. float f = 5.5;

d. int c = ‘0’

() b, c

(해설) L이나 l로 끝나는 정수는 long형 리터럴이며 나머지는 int형 리터럴이다. Ff로 끝나

는 실수는 float형 리터럴이며 나머지는 double형 리터럴이다. 큰 타입의 값이 작은 타입의

변수에 지정될 수 없으므로 bc는 잘못되었다. 0x111116진수 표현이며 십진수로 4369

이다. ‘0’char형 리터럴이나 정수형과 호환되며 48과 같다.

 

7. 아래 프로그램을 실행할 때 결과는 무엇인가?

class NestedIf {

public static void main(String[] args) {

int aNumber = 3;

if (aNumber >= 0)

if (aNumber == 0) System.out.println("first string");

else System.out.println("second string");

System.out.println("third string");

}

}

()

second string

third string

(해설) else는 가장 가까운 if와 짝이 된다. 따라서 aNumber0이상이나 0은 아니므로

second string이 출력되며 마지막 문장에서 third string이 출력된다.

 

9. 2차원 배열의 선언으로 잘못된 것은 무엇인가?

a. int[][] multiArray;

b. int[] multiArray[];

c. int multiArray[][];

d. int[10,10] multiArray;

() d

(해설) a, b, c 모두 문법적으로 올바른 선언이나 a와 같이 작성하는 것이 가장 좋은 표현 방

법이다. 한편 배열의 크기는 선언 후에 배열의 생성 과정에서 정해진다.

 

11. 그림 8MultiDimArrayDemo 프로그램에서 배열에 포함된 각 원소를 쓰인 순서대로

하나씩 출력하는 프로그램을 for문을 이용하여 작성하라.

()

class MultiArrayDemo {

public static void main(String[] args) {

String[][] names = { {"Mr. ", "Mrs. ", "Ms. " },

{"Smith", "Jones" } };

for(int i=0; i<names.length i++)

for(int j=0; j<names[i].length j++)

System.out .println(names[i][j]);

}

}

(해설) 2차원 배열의 각 원소를 다루기 위해 names.length 만큼 반복한다. 여기서 각 원소가 또한 배열이기 때문에 다시 names[i].length 만큼 반복한다. 2차원 배열을 행렬로 생각하면

names.length는 행의 개수가 되며 names.length는 각각의 행에 존재하는 원소의 개수이다.

 

13. 다음의 결과로 무엇이 출력되는가?

System.out.print(‘$’+1000+.0);

System.out.print(“$”+1000+.0);

() 1036.0 $10000.0

(해설) char형은 부호없는 정수형과 호환되고 ‘$’ASCII 값은 36이므로 ‘$’+1000

36+1000이며 따라서 결과는 1036이다. 1036+.01036.0+0.0이 된다. 따라서 결과는 1036.0

이 되고 이것이 문자열로 바뀌어 출력된다. “$”+1000+.0“$”+“1000”+“0.0”과 같다.

 

3장 객체지향 프로그래밍

 

연습 문제

 

1. 추상화에 관한 정확한 설명은 무엇인가?

a. 비밀스러운 데이터의 직접 접근을 막는 것

b. 데이터와 메소드를 하나의 틀에 담는 것

c. 기존 대상을 재사용하되 새로운 특성을 추가하여 새로 만드는 것

d. 본질적이고 전형적인 부분만을 간추려 대상을 표현하는 것

() d

(해설) 추상화는 복잡한 실체를 간단히 표현하는 것을 말한다. b는 캡슐화에 관한 설명이며 c

는 클래스의 상속과 관련이 있다.

 

3. 객체가 무엇인지 클래스와 연관지어 정의하라.

() 객체는 클래스의 인스탄스이다.

(해설) 인스탄스란 구체적 실체를 의미하는 용어이다. 클래스라는 틀을 통해 구체적 실체인 객

체를 만들 수 있다.

 

5. 다음 중 나머지 셋과 다른 의미를 가지는 용어는 무엇인가?

a. 정적 메소드

b. static 메소드

c. 클래스 메소드

d. 추상 메소드

() d

(해설) 정적 메소드, static 메소드, 클래스 메소드는 모두 같은 의미의 용어이다. 마찬가지로

정적 필드, 정적 변수, static 필드, 클래스 변수는 모두 같은 의미의 용어이다. 정적인 필드는

자료형이 같은 객체들이 공유하는 필드를 말한다. static 메소드는 개별 객체와 상관없이 클래

스 이름을 통해 호출할 수 있는 메소드이다.

 

7. 클래스가 인터페이스를 상속받을 때 사용해야 하는 키워드는 무엇인가? 다중 상속이 가능

한가?

() implements이며 다중 상속이 가능하다.

(해설) 하나의 클래스 또는 하나의 인터페이스가 여러 슈퍼 인터페이스를 상속받을 수 있다.

즉 인터페이스를 상속받는 경우에는 다중 상속이 가능하다. 한편 서브 인터페이스가 슈퍼 인

터페이스를 상속받을 때는 extends 키워드를 사용하다.

 

9. 다음 네 가지 접근 제어자 가운데 두 번째로 넓은 사용 범위를 제공하는 것은?

a. public b. 생략 c. protected d. private

() c

(해설) protected 필드나 메소드를 사용할 수 있는 범위는 같은 패키지와 서브 클래스이다.

예를 들어 A 유형의 객체 aprotected 필드 p를 가지고 있다고 하면 a.p와 같은 표현을

같은 패키지나 서브 클래스에서만 사용할 수 있다는 것이다. 그 범위를 벗어난 임의의 클래스

에서 사용한다면 컴파일 오류가 발생한다.

 

11. 다음 문장에 관한 설명으로 잘못된 것이 있다면 모두 고르시오.

Circle c = new Circle(5);

a. 참조형 변수가 선언되었다.

b. 객체가 사용할 메모리 공간이 할당되었다.

c. 변수 c에 메모리의 주소가 대입되었다.

d. 생성자가 실행된다.

() 모두 올바른 설명이다.

(해설) 참조형 변수 c가 선언되었으며(Circle c), 메모리 공간이 할당되었고(new), 메모리의

주소가 변수 c에 대입되었으며(=), 생성자가 실행되었다(Circle(5)).

 

13. 다음 중 아래 메소드와 함께 오버로딩될 수 없는 것은?

double compute(int x, int y)

a. int compute(int x, int y)

b. double compute(int x)

c. double compute(double x, double y)

d. double compute(int x, int y, int z)

() a

(해설) 하나의 클래스에서 이름이 같은 메소드가 여러 개 존재할 때 메소드가 오버로딩되었다

고 말한다. 오버로딩된 메소드들은 인자의 개수나 유형으로 구별될 수 있어야 한다. a의 경우

에는 리턴 타입이 다른데 이것은 구별되는 요소가 아니다.

 

15. 다음 프로그램에 존재하는 문제점을 설명하라.

class GraphicObjects {

int x, y;

public GraphicObjects(int x, int y) {

this.x = x; this.y = y;

}

}

public class Rectangle extends GraphicObjects {

private int width, height;

public Rectangle(int x, int y, int width, int height) {

this.width = width;

this.height = height;

}

}

() Rectangle 클래스의 생성자에서 super()가 자동으로 삽입되나 부모 클래스에서 기본 생

성자가 정의되어 있지 않다.

(해설) 여러 방법으로 프로그램을 수정할 수 있는데 간단히 Rectangle 클래스의 생성자 몸체에서 첫 줄에 super(x, y);를 삽입하면 된다.

 

17. 다음과 같은 메소드가 부모 클래스에서 정의되어 있으며 서브 클래스에서 재정의하고자

한다. 재정의하기 위한 메소드 형식으로 적합하지 않은 것을 모두 고르시오.

protected double compute(int x, int y)

a. protected double compute(int x, int y)

b. public double compute(int x, int y)

c. protected int compute(int x, int y)

d. private double compute(int x, int y, int z)

() c, d

(해설) 메소드를 재정의할 때는 부모 클래스에서 정의된 메소드의 형식과 일치해야 한다.

리턴 타입, 인자의 개수와 유형이 일치해야 한다. 단 접근 제어자는 같게 하거나 가시성이 넓

어져도 된다. c의 경우는 리턴 타입이 다르며 d의 경우는 가시성이 좁아졌으므로 오류가 생긴

. 참고로 서브 클래스에서 protected int compute(int x, int y, int z)와 같은 메소드를

정의할 수도 있는데 이 경우는 상속된 메소드와 인자의 개수가 다르기 때문에 두 메소드가 공

존하게 되므로 오버라이딩이 아니다. 즉 서브 클래스에서 두 개의 compute() 메소드가 공존

하게 된다(오버로딩).

 

18. Interface implements


4장 패키지와 예외 처리

 

연습 문제

1. Java 프로그램에서 명시적으로 import하지 않아도 되는 패키지는 무엇인가?

() java.lang

(해설) java.lang 패키지는 Java 언어에서 가장 기본적인 클래스들을 포함하고 있다. 이 패키

지에 포함되어 있는 클래스를 사용할 때는 import 구문을 사용하지 않고 클래스 이름만 표시

해도 무방하다.

 

3. import 구문을 사용하지 않고 프로그램에서 IOException 클래스를 사용하고자 한다. 어떻

게 하면 되는가?

() IOException 클래스를 사용하고자 하는 부분에 java.io.IOException와 같이 패키지 이름

을 포함한 완전한 클래스 이름을 사용한다.

(해설) import 구문 없이 단순히 IOException이라고 쓴다면 컴파일러는 이 클래스를 찾을 수

가 없다.

 

5. CLASSPATH 환경 변수는 다음과 같이 설정되어 있다. 프로그램에서 graphics.Rectangle

클래스를 사용한다고 할 때, Rectangle 클래스는 어떤 경로에 존재해야 하는가?

>set CLASSPATH=.;C: \myJavaPackage;D: \thirdPartyPackage

() Rectangle 클래스는 . \graphics 또는 C: \myJavaPackage \graphics 또는

D: \thirdPartyPackage \graphics 폴더에 존재해야 한다.

(해설) Java 프로그램을 컴파일 또는 실행할 때 필요한 클래스를 CLASSPATH 환경 변수에서

지정된 경로에서 찾는다. ‘.’은 현재 폴더를 의미한다.

 

7. 반드시 예외 처리를 할 필요는 없는 것을 모두 고르시오.

a. ArithmeticException

b. NullPointerException

c. IndexOutOfBoundsException

d. IOException

() a, b, c

(해설) ArithmeticException‘0으로 나누기와 같은 산술 계산의 예외이며

NullPointerException은 존재하지 않는 객체에 접근하는 예외이고

IndexOutOfBoundsException은 첨자 범위를 벗어나 배열을 사용하는 예외이다. 이 세 가지

예외 클래스는 모두 RuntimeException의 서브 클래스이다. RuntimeException의 경우는 예

외 처리가 반드시 필요한 것은 아니다.

 

9. 다음 코드의 문제점을 설명하시오.

try {

} catch (Exception ex) {

} catch (ArithmeticException a) {

}

() try 블록에서 어떠한 예외가 던져지든지 첫 번째 catch 블록에서 잡히므로 두 번째

catch 블록에는 어떠한 경우에도 도달될 수 없다. 이러한 경우는 컴파일 오류가 생긴다.

(해설) 첫 번째 catch 블록은 Exception을 처리한다. 이 클래스는 예외와 관련된 클래스 구

조의 최상위 클래스로 모든 예외가 이것에 해당한다고 할 수 있다. 따라서 그 다음에 등장하

catch 블록은 의미가 없다.

 

 

댓글