navis

JAVA (기말 준비) 본문

방송통신대 컴퓨터과학과

JAVA (기말 준비)

menstua 2024. 5. 26. 14:43
728x90

1강 JAVA와 객체지향 프로그래밍

문제 1: Java 언어의 특징 중에 다음 내용이 의미하는 것은?

똑같은 바이트코드가 Java 플랫폼이 설치된 다양한 하드웨어와 운영체제에서 수정없이 실행될 수 있다.

정답: 2 ( 플랫폼에 독립적 )

문제 2: 다음 파일의 이름은 A.java 이다. 이 파일을 컴파일할 때 결과로 만들어지는 것을 정확히 설명한 것은?

public class A {  }

class B {  }

정답: 3 ( A.class와 B.class가 생성된다. )

 

문제 3: “Hello, World!”를 화면에 출력하는 자바 프로그램을 작성하라.

정답:

 

  1. Java 프로그램의 기본 구성단위는 클래스이다.
  2. Java에서는 변수의 자료형에 대한 검사가 엄격하다.
  3. Java 프로그래밍을 위해서 JDK를 설치해야 한다.
  4. Java 소스는 컴파일된 후, 바이트코드가 Java 플랫폼에서 실행된다.
  5. Java 플랫폼은 Java VM과 Java API로 구성된다.
  6. main( ) 메소드의 형식은 public static void main(String[ ] args) 이다.
  7. 클래스는 동종 객체를 추상화시켜 표현한 틀이며, 데이터와 메소드로 구성된다.
  8. 객체는 특정 클래스의 인스턴스이다.

2강 Java 기본 문법(1)

문제 1: 다음 중 클래스 이름에 해당하지 않는 것은?

정답: 4 ( boolean )

문제 2: 다음 정수 리터럴 중 값이 다른 하나는 무엇인가?

정답: 2 ( 00001010 )

문제 3: 위의 for문을 향상된 for문을 이용해 다시 작성하여라.

정답:

 

  1. Java의 기본형을 나타내는 키워드는 byte, short, int, long, float, double, char, boolean의 8가지이다.
  2. 변수의 종류로는 인스턴스 변수, 클래스 변수, 지역 변수, 파라미터가 있다.
  3. 인스턴스 변수는 객체가 소유하는 변수이며, 클래스 변수는 해당 클래스의 객체들이 공유하는 변수이다.
  4. 클래스와 배열은 대표적 참조형으로, 참조형 변수에는 참조값(주소값)이 저장된다.
  5. 묵시적 형변환은 자료의 손실이 발생하지 않고, 컴파일러가 자동으로 수행하는 형변환이다.
  6. 명령행 매개변수란 main( ) 함수에 전달되는 인자로서, 프로그램을 실행시킬 때 클래스 이름 뒤에 나열하는 인자를 말한다.
  7. break문, continue문, return문은 제어문 중 점프문(분기문)에 해당한다.

3강 Java 기본 문법(2), 클래스와 상속(1)

문제 1: 다음 중 문법적으로 올바른 문장은 무엇인가?

정답: 3 ( int[ ][ ] c = new int[5][ ];  )

문제 2: int형 변수 i와 j의 값을 각각 출력하기 위해 적당한 출력문은 무엇인가?

정답: 2 ( System.out.println( i + " " + j ); )

문제 3: 퍼블릭 Alpha 클래스에서 protected 데이터 필드가 정의되었다고 가정할 때, 아래 4개의 클래스 중에서 이 데이터 필드를 사용할 수 없는 클래스는 무엇인가?

정답: 4 ( Gamma )

 

  1. 배열은 원소의 초기화 과정이나 원소의 생성 과정을 거쳐야만 사용할 수 있다.
  2. ‘배열이름.length’을 사용하여 배열의 크기를 표현할 수 있다.
  3. 문자열 변수나 리터럴에 대해 + 연산을 적용한 결과는 두 문자열이 연결된 문자열이다.
  4. Scanner 클래스를 이용하면 키보드나 파일로부터 편리하게 문자열(또는 기본형 값)을 입력받을 수 있다.
  5. 클래스를 정의할 때, 내부 클래스가 아니라면 클래스의 접근 제어자로서 생략과 public만 지정할 수 있다.
  6. 정의 부분에서 접근 제어자가 생략된 클래스나 데이터 필드는 ‘해당 클래스’ 외에 ‘같은 패키지의 다른 클래스’에서만 사용할 수 있다.
  7. 생성자를 정의하려면 이름을 클래스 이름과 같게 하고 반환형을 지정하지 않는다.

4강 클래스와 상속(2)

문제 1: 키워드 final에 관한 설명으로 틀린 것은?

정답: 4 ( final 클래스의 객체를 생성할 수 없다. )

문제 2: Circle 클래스에서 원주율 PI를 상수로 선언하기 위해  에 들어갈 적당한 내용은 무엇인가?

정답: 4 ( static final double PI = 3.14; )

 

문제 3: Circle 클래스의 생성자에서 밑줄 친 ㉡에 들어갈 적당한 내용을 작성하시오

 

정답: this.radius = radius;

 

  1. 클래스를 정의할 때, 클래스의 모든 객체가 공유하는 데이터는 static 데이터 필드로 정의한다.
  2. 클래스 정의에 있는 데이터 필드의 선언문, 초기화 블록, 생성자를 통해서 객체 생성 시 필요한 데이터 필드의 초깃값을 지정할 수 있다.
  3. 메소드 오버로딩이란 한 클래스에서 이름이 같은 여러 메소드가 존재하는 상황을 말한다. 이때 오버로딩된 메소드끼리는 매개변수 목록이 달라 구별될 수 있다.
  4. 부모로부터 상속받은 메소드의 몸체를 자식 클래스에서 다시 정의하는 것을 메소드 오버라이딩이라 한다.
  5. 인스턴스 메소드와 생성자에서 숨은 인자인 thisr를 사용할 수 있다.
  6. this( )는 같은 클래스에 있는 다른 생성자를, super( )는 자식 클래스 생성자에서 부모 클래스의 생성자를 호출하기 위한 것이다.

 

5강 인터페이스와 다형성

문제 1: 다음 프로그램을 실행했을 때 예상되는 출력은?
 

 

정답: 2 ( B )

 

문제 2: 밑줄 친 ㉠, ㉡에 들어갈 키워드는 순서대로 무엇인가?

 

 

정답: 2 ( extends, implements )

 

문제 3: 밑줄 친 부분의 의미를 정확히 설명하시오. 단, CSuper는 클래스 이름이다.

정답: CSuper 클래스를 상속받는 익명 클래스를 정의하고, 동시에 익명 클래스의 객체를 생성한다.

 

  1. 몸체가 없는 메소드를 추상 메소드라고 하며, 추상 클래스 또는 인터페이스에 포함될 수 있다.
  2. 인터페이스는 추상 메소드로만 구성된다. 단, default 인스턴스 메소드와 static 메소드는 몸체가 있어야 한다.
  3. 의미적으로 유사한 클래스를 묶을 때는 추상 클래스로, 기능적으로 유사한 클래스를 묶을 때는 인터페이스를 사용한다.
  4. 다형성은 메소드 오버라이딩과 오버로딩, 클래스 간 상속과 형변환, 인터페이스의 구현과 형변환, 메소드 동적 바인딩을 통해 구현될 수 있다.
  5. 열거 자료형은 여러 상수값을 미리 정의하기 위한 자료형이며, 각 상수값은 하나의 객체와 같다.
  6. 익명 클래스는 이름이 없는 클래스로, 일회성으로 상속 또는 구현을 통해 자식 객체를 생성하는 용도로만 사용되는 클래스를 의미한다.

6강 제네릭과 람다식

문제 1: 다음과 같은 제네릭 클래스가 있다고 가정하자. 보기에서 문법적으로 오류가 있는 것은?

정답: 1 ( Data<int> d = new Data<>( ); )

 

문제 2: 다음과 같은 인터페이스가 있다고 가정할 때, 보기에서 람다식 사용이 잘못된 것은?

정답: 3 ( Addable ad = (a, b) -> return (a + b); )

 

문제 3:  Java에서 제공되는 표준 함수형 인터페이스 중 Supplier<T>에서 선언된 추상 메소드의 이름과 형식은 각각 무엇인가?

정답: T get( )

 

  1. 자료형을 매개변수로 가지는 클래스와 인터페이스를 제네릭 타입이라고 한다.
  2. 제네릭 클래스를 사용할 때 제공되는 타입 파라미터는 필드의 자료형, 메소드의 반환형, 메소드에서 인자의 자료형으로 사용될 수 있다.
  3. 자료형을 매개변수로 가지는 메소드를 제네릭 메소드라고 한다.
  4. 제네릭을 활용하면 컴파일 시점에 명확한 자료형 검사를 수행할 수 있다.
  5. 함수형 인터페이스를 구현하는 클래스의 객체를 생성할 때 람다식을 사용하는 것이 효율적이다.
  6. 람다식의 결과 타입에 해당하는 인터페이스를 람다식의 타깃 타입이라고 한다.

 


7강 패키지와 예외처리

문제 1: Client 클래스를 myprogram.game 패키지에 위치시키려고 한다. Client 클래스를 정의하는 소스 파일의 맨 위에 포함시켜야 코드는 무엇인가?

정답: 1 ( package myprogram.game; )

문제 2: 밑줄 부분에 들어가야 할 내용은 무엇인가?

정답: 2 ( throws IOException )

문제 3: 프로그램 상에 클래스의 완전한 이름인 java.util.Scanner로 표시하지 않고, 단순히 클래스 이름 Scanner 만으로 표시하기 위해서 소스 파일의 맨 위에 작성해야 코드는 무엇인가?

정답: import java.util.Scanner; 또는 import java.util.*;

 

  1. Java의 패키지는 관련이 있는 클래스와 인터페이스의 묶음이며 계층 구조로 구성된다.
  2. 다른 패키지에 있는 클래스를 사용할 때는 import 구문을 사용하는 것이 편리하다.
  3. Java 프로그램에서 필요한 클래스나 패키지는 환경 변수 CLASSPATH에 포함되어 있는 경로상에서 찾을 수 있어야 한다.
  4. Java 프로그램의 실행 도중 심각하지는 않지만 정상적 흐름을 벗어난 비정상적 상황이 발생할 수 있으며 이것을 예외라고 한다.
  5. checked Exception에 속하는 예외가 발생할 수 있는 경우, 반드시 예외 처리 구문을 작성해야 한다.
  6. 예외의 직접 처리를 위해 try-catch 구문을 사용하고, 예외를 전파하려면 메소드 선언에 ‘throws 예외 유형’을 표시한다.

8강 java.lang 패키지

문제 1: 다음 프로그램의 출력 결과는 무엇인가?

정답: 1 ( Jovo  )

문제 2: Object 클래스와 String 클래스에 대한 설명이다. 잘못된 것은 무엇인가?

정답: 4 ( String 클래스는 표준 입출력 스트림을 위한 static 필드를 제공한다. )

문제 3:  교재의 [소스 7-22]에서 문자열 처리 시간에 차이가 생기는 이유를 설명하라.

정답:  String 클래스는 immutable 클래스여서 반복이 진행될수록 계속해서 기존 문자열은 버려지고 새로운 문자열이 새롭게 만들어지기 때문이다(버려지거나 만들어지는 문자열의 길이도 점점 커진다). StringBuffer 클래스를 사용한 경우가 StringBuilder 클래스를 사용한 경우보다 시간이 더 걸리는 이유는 동시성 제어를 고려하여 메소드가 구현되었기 때문이다.

 

  1. java.lang 패키지의 클래스를 사용할 때는 import 구문을 쓰지 않아도 된다.
  2. String은 문자열 처리를 위한 다양한 메소드를 제공하지만 immutable 클래스로, String 객체는 생성 이후에 내용 변경이 불가능하다.
  3. toString() 메소드와 equals() 메소드는 Object 클래스에서 정의되어 있으며, 몇몇 하위 클래스들에서 적절히 재정의되어 있다.
  4. 자주 변경되는 문자열을 다루어야 할 경우에는 String 클래스보다 StringBuffer나 StringBuilder 클래스를 사용하는 것이 보다 효율적이다.
  5. 기본형 값을 객체로 다루기 위해, 모든 기본형마다 상응하는 포장 클래스가 존재한다.
  6. System 클래스는 표준 입력과 출력, 표준 오류 출력을 위해 in, out, err 객체를 제공한다.

9강 java.io 패키지와 스트림

문제 1: 입력 스트림은 기본 스트림과 보조 스트림으로 나뉜다. 다음 중 기본 스트림에 해당하지 않는 것은?

정답: 4 ( BufferedReader )

문제 2: BufferedReader 클래스에 관한 설명으로 틀린 것은 무엇인가?

정답: 3 ( 바이트 단위의 입력 기능을 제공한다. )

문제 3: 키보드에서 한글을 입력받기 위해서 바이트 단위의 표준 입력 스트림(System.in)을 캐릭터 스트림으로 변환하는 것이 필요하다. 다음 밑줄 부분에 공통으로 들어갈 클래스 이름은 무엇인가?

정답:  InputStreamReader

 

  1. Java 프로그램에서는 스트림을 통해 데이터 생산자(또는 소비자)의 종류와 무관하게 동일한 방법으로 입력(또는 출력)을 수행할 수 있다.
  2. File 클래스는 파일 또는 디렉터리를 표현하는 클래스로 파일이나 디렉터리를 조작할 수 있는 메소드를 제공하나 입출력 메소드는 제공하지 않는다.
  3. RandomAccessFile 클래스는 파일의 읽기/쓰기를 지원하며 파일 포인터가 가리키는 임의의 위치에 읽기/쓰기가 가능하다.
  4. BufferedInputStream(BufferdOutputStream)과 BufferedReader(BufferdWriter)는 보조 스트림으로 버퍼링 기능을 제공하여 입출력 성능을 향상시킨다.
  5. 기본 스트림의 객체를 먼저 생성하고, 그 객체를 인자로 하여 보조 스트림 객체를 생성한다.
  6. InputStreamReader는 바이트 단위 입력 스트림을 캐릭터 단위 입력 스트림으로 변환하는 기능을 한다.

10강 java.nio 패키지의 활용

문제 1: Path 인터페이스에 관한 설명이다. 잘못된 것은?

정답: 4 ( 파일 내용의 읽기와 쓰기 기능을 제공한다.  )

문제 2: FileChannel 클래스에 관한 설명으로 틀린 것은 무엇인가?

정답: 3 ( 파일 입력을 위해 FileChannelReader, 파일 출력을 위해 FileChannelWriter를 사용한다. )

문제 3: WatchService를 이용해 디렉터리를 감시할 때, take() 메소드를 호출한다. 이후 대기 중에 있다가 이벤트가 발생하면, take()가 WatchKey 객체를 리턴한다. WatchKey에 관해 설명하라.

정답: WatchKey는 등록된 디렉터리에 어떤 관심 이벤트가 등록되어 있으며, 실제 어떤 이벤트가 일어났는지에 관한 상태 정보를 가지고 있다.

 

  1. java.nio와 그것의 서브 패키지는 java.io 패키지를 개선한 새로운 입출력 패키지이다.
  2. java.nio.file 패키지의 Path 인터페이스는 java.io 패키지의 File 클래스보다 풍부한 기능을 제공한다.
  3. Files 클래스는 실제 파일(또는 디렉터리) 조작과 읽기·쓰기 기능을 수행하는 static 메소드를 제공한다.
  4. 채널 입출력에서 버퍼는 기본형 데이터의 보관소이며, 버퍼 단위로 입출력할 수 있다.
  5. java.nio.file의 FileChannel은 입출력을 모두 제공하고 기본적으로 버퍼링을 사용하며 멀티 스레드 환경에서도 안전하게 동작하도록 설계되어 있다.
  6. java.nio.file 패키지의 WatchService는 디렉터리에 발생하는 이벤트를 감시하는 서비스이다.

11강 컬렉션

문제 1:  ArrayList 클래스에 관한 설명으로 적당하지 않은 것은?

정답: 4 ( 같은 자료를 중복으로 저장할 수 없다. )

문제 2: (key, value) 형태의 원소로 구성되는 자료 묶음을 다루기 위한 인터페이스나 클래스가 아닌 것은?

정답: 2 ( HashSet )

문제 3: LinkedList<E>를 이용하여 큐 자료구조를 구현할 때, 자료를 추가하는 메소드와 삭제하는 메소드는 무엇인가?

정답: 추가 시 boolean offer(E), 삭제 시 E poll( )을 사용함

 

  1. 컬렉션은 여러 원소를 저장하고 관리하는 객체를 통칭하는 용어이며, JCF는 컬렉션을 효율적으로 다루기 위한 API를 제공하는 프레임워크이다.
  2. Set은 원소의 순서에 의미가 없고 중복을 허용하지 않는 컬렉션을 다루기 위한 인터페이스이다.
  3. List와 Queue는 자료의 중복을 허용하고 순서에 의미가 있는 컬렉션을 관리하기 위한 인터페이스이다. 특히 Queue는 FIFO 방식으로 자료를 관리하는 인터페이스이다.
  4. Map 인터페이스는 <키, 값>의 쌍으로 구성되는 자료의 묶음을 관리하는 메소드를 제공한다.
  5. LinkedList 클래스는 List 인터페이스와 Queue 인터페이스를 모두 구현한 클래스이며, 스택 자료구조에서 필요한 메소드도 제공한다.

12강 컬렉션과 스트림

문제 1: 주어진 배열을 스트림으로 만들려고 한다. 밑줄 부분에 들어갈 적당한 내용은?

 

정답: 2 ( Arrays.stream(numbers) )

문제 2: 주어진 문자열 배열에서 길이가 6 이상인 단어를 대문자로 변환한 후 정렬하여 출력하려고 한다. 밑줄 부분에 들어갈 메소드는 무엇인가?

정답: 4 ( filter )

문제 3: 중간연산과 종료연산의 차이를 설명하시오.

정답:  중간연산은 스트림을 변환하거나 필터링 하는 등의 작업을 수행하며, 다음 단계 처리를 위해 새로운 스트림을 리턴하는데, 체인 형태로 연속해 여러 번 호출될 수 있다. 종료연산은 스트림의 원소를 이용해 최종 결과를 만들어 리턴한다.

 

  1. 내부 반복은 컬렉션이나 배열의 내부에서 각 원소의 반복 처리를 수행하는 것으로, 처리용 코드만 람다식으로 전달하며 반복 작업을 위한 코드를 작성하지 않는다.
  2. forEach( ) 메소드는 람다식과 함께 사용하여 컬렉션과 배열의 원소들을 외부로 꺼내오지 않고 내부에서 탐색하게 한다.
  3. 필터링은 스트림의 원소 중에서 중복을 제거하거나 특정 조건을 만족하는 원소만 걸러 내고 새로운 스트림을 리턴하는 중간 연산이다.
  4. 매핑은 스트림의 원소를 다른 원소로 변환한 후 새로운 스트림으로 리턴하는 중간 연산이다.
  5. 매칭은 스트림의 원소 중 특정 조건을 만족하는지 확인하는 최종 연산이다.
  6. 수집은 스트림의 원소 중 필터링 또는 매핑 작업 후 결과 원소들을 취합하여 새로운 List, Set, 또는 Map 객체를 생성하는 최종 연산이다.

13강 멀티스레드 프로그래밍

문제 1: 스레드 동기화와 관련된 다음 설명 중 올바른 것은?

정답: 4 ( 메소드 join()은 this 스레드가 종료될 때까지 현재 스레드가 기다린다. )

문제 2: 스레드 동기화의 의미를 가장 잘 설명한 것은?

정답: 3 ( 한순간에 한 스레드만 공유 객체에 접근할 수 있게 하는 것 )

문제 3: 밑줄 부분에 들어갈 스레드 동기화를 위한 자바 키워드는 무엇인가?

여러 스레드가 공유 객체를 사용할 때, 한 스레드가 공유 객체의           메소드를 실행 중이라면 다른 스레드가 동일 객체에 접근할 수 없다.

정답:  synchronized

 

  1. 멀티 스레드 프로그래밍이란 하나의 프로세스에서 여러 스레드가 생성되어 동시 실행되게 하는 것을 말한다.
  2. 스레드의 실행 코드는, 스레드 생성에 사용되는 Thread를 상속받는 클래스나 Runnable 인터페이스를 구현한 클래스에서 정의되어 있는 public void run( ) 메소드이다.
  3. 스레드는 생성되어 소멸할 때까지 Startable, Runnable, Running, Not Running 등의 상태를 거친다.
  4. Thread 클래스에서 스레드의 상태를 제어하는 메소드로 start(), join(), interrupt()가 있으며, static 메소드인 yield()와 sleep()도 있다. 한편 Object 클래스에 정의된 메소드로는 notify()와 wait()가 있다.
  5. 스레드 동기화는 데이터의 무결성을 유지하도록 한 번에 한 스레드만이 스레드 간 공유 객체에 접근하도록 하는 것이며, synchronized 메소드는 동기화를 보장한다.

14강 JDBC 프로그래밍

문제 1: JDBC 프로그래밍에 사용되는 클래스나 인터페이스가 아닌 것은?

정답: 4 ( Runnable )

문제 2: PreparedStatement 객체에 대한 설명으로 잘못된 것은?

정답: 1 ( PreparedStatement는 Statement의 부모 인터페이스이다. )

문제 3: Statement 객체를 이용하여 executeQuery( )를 호출하면 select 구문을 실행할 수 있다.이때 질의를 만족하는 레코드들이 테이블 형태로 리턴되는데 이것의 데이터 타입은 무엇인가?

정답: ResultSet

 

  1. MariaDB는 MySQL과 호환되는 오픈 소스 관계형 데이터베이스 관리 시스템이다.
  2. JDBC는 Java 프로그램에서 관계형 데이터베이스와 연동할 수 있게 하는 표준 API이다.
  3. JDBC 프로그래밍을 위해서는 MariaDB용 JDBC 드라이버로 .jar 파일을 다운로드받아 Classpath에 추가해야 한다.
  4. DBMS와 연결을 설정할 때는 java.sql.Connection 객체를 사용한다.
  5. SQL 구문을 실행할 때 Statement 인터페이스의 execute( ), executeQuery( ), executeUpdate( )를 사용할 수 있다.
  6. select 구문을 실행할 때 executeQuery( )를 호출하며, 검색 결과가 ResulteSet 객체로 리턴된다.
  7. 같은 SQL 문을 여러 번 실행할 때는 PreparedStatement 객체를 사용하는 것이 효율적이며, SQL 문에 매개변수를 사용하고 실행 전에 값을 지정할 수 있다.

15강 심층학습(2)

문제 1:  .jar 파일 형식으로 배포된 라이브러리를 사용하고자 할 때, 이러한 .jar 파일을 어떤 환경 변수에 추가해야 하는가?

정답: 1 ( Classpath )

문제 2: Java의 표준 모듈 중 requires 키워드로 사용 선언을 하지 않아도 사용이 가능한 모듈은 무엇인가?

정답: 4 ( java.base )

문제 3: java.sql 모듈에서 제공하는 java.sql 패키지가 있으며, 여기에 포함된 클래스(또는 인터페이스)를 사용하는 모듈 프로젝트가 있을 때, module-info.java 파일에서 아래 밑줄 부분에 들어가야 할 내용은? 

정답: requires java.sql;

 

  1. 자주 사용되는 클래스와 인터페이스를 컴파일된 형태로 제공한 것을 라이브러리라고 한다.
  2. Java의 라이브러리는 .class 파일을 묶어서 만든 .jar 파일의 형태이다.
  3. 모듈은 라이브러리의 업그레이드 버전으로 패키지 단위에서 접근성을 설정할 수 있다.
  4. 라이브러리를 사용하려면 해당 .jar 파일을 Classpath에 추가하고, 모듈을 사용하려면 Modulepath에 추가한다.
  5. 모듈 프로젝트에서 ‘module-info.java’ 파일에 ‘exports 패키지;’ 또는 ‘requires 모듈;’ 형식으로 모듈 간 의존관계를 설정할 수 있다.
  6. JDK의 표준 라이브러리는 모두 모듈화되었으며, java.base는 자바 표준 모듈 중 가장 기본 모듈이다.

 

'방송통신대 컴퓨터과학과' 카테고리의 다른 글

운영체제 (기말 준비)  (0) 2024.05.27
파이썬 (기말 준비)  (0) 2024.05.26
알고리즘 (기말 준비)  (0) 2024.05.26
인공지능 (기말 준비)  (0) 2024.05.26
운영체제 (기말 준비)  (0) 2024.05.26