navis
JAVA (기말 준비) 본문
1강 JAVA와 객체지향 프로그래밍
문제 1: Java 언어의 특징 중에 다음 내용이 의미하는 것은?
똑같은 바이트코드가 Java 플랫폼이 설치된 다양한 하드웨어와 운영체제에서 수정없이 실행될 수 있다.
정답: 2 ( 플랫폼에 독립적 )
문제 2: 다음 파일의 이름은 A.java 이다. 이 파일을 컴파일할 때 결과로 만들어지는 것을 정확히 설명한 것은?
public class A { }
class B { }
정답: 3 ( A.class와 B.class가 생성된다. )
문제 3: “Hello, World!”를 화면에 출력하는 자바 프로그램을 작성하라.
정답:
- Java 프로그램의 기본 구성단위는 클래스이다.
- Java에서는 변수의 자료형에 대한 검사가 엄격하다.
- Java 프로그래밍을 위해서 JDK를 설치해야 한다.
- Java 소스는 컴파일된 후, 바이트코드가 Java 플랫폼에서 실행된다.
- Java 플랫폼은 Java VM과 Java API로 구성된다.
- main( ) 메소드의 형식은 public static void main(String[ ] args) 이다.
- 클래스는 동종 객체를 추상화시켜 표현한 틀이며, 데이터와 메소드로 구성된다.
- 객체는 특정 클래스의 인스턴스이다.
2강 Java 기본 문법(1)
문제 1: 다음 중 클래스 이름에 해당하지 않는 것은?
정답: 4 ( boolean )
문제 2: 다음 정수 리터럴 중 값이 다른 하나는 무엇인가?
정답: 2 ( 00001010 )
문제 3: 위의 for문을 향상된 for문을 이용해 다시 작성하여라.
정답:
- Java의 기본형을 나타내는 키워드는 byte, short, int, long, float, double, char, boolean의 8가지이다.
- 변수의 종류로는 인스턴스 변수, 클래스 변수, 지역 변수, 파라미터가 있다.
- 인스턴스 변수는 객체가 소유하는 변수이며, 클래스 변수는 해당 클래스의 객체들이 공유하는 변수이다.
- 클래스와 배열은 대표적 참조형으로, 참조형 변수에는 참조값(주소값)이 저장된다.
- 묵시적 형변환은 자료의 손실이 발생하지 않고, 컴파일러가 자동으로 수행하는 형변환이다.
- 명령행 매개변수란 main( ) 함수에 전달되는 인자로서, 프로그램을 실행시킬 때 클래스 이름 뒤에 나열하는 인자를 말한다.
- 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 )
- 배열은 원소의 초기화 과정이나 원소의 생성 과정을 거쳐야만 사용할 수 있다.
- ‘배열이름.length’을 사용하여 배열의 크기를 표현할 수 있다.
- 문자열 변수나 리터럴에 대해 + 연산을 적용한 결과는 두 문자열이 연결된 문자열이다.
- Scanner 클래스를 이용하면 키보드나 파일로부터 편리하게 문자열(또는 기본형 값)을 입력받을 수 있다.
- 클래스를 정의할 때, 내부 클래스가 아니라면 클래스의 접근 제어자로서 생략과 public만 지정할 수 있다.
- 정의 부분에서 접근 제어자가 생략된 클래스나 데이터 필드는 ‘해당 클래스’ 외에 ‘같은 패키지의 다른 클래스’에서만 사용할 수 있다.
- 생성자를 정의하려면 이름을 클래스 이름과 같게 하고 반환형을 지정하지 않는다.
4강 클래스와 상속(2)
문제 1: 키워드 final에 관한 설명으로 틀린 것은?
정답: 4 ( final 클래스의 객체를 생성할 수 없다. )
문제 2: Circle 클래스에서 원주율 PI를 상수로 선언하기 위해 ㉠에 들어갈 적당한 내용은 무엇인가?
정답: 4 ( static final double PI = 3.14; )
문제 3: Circle 클래스의 생성자에서 밑줄 친 ㉡에 들어갈 적당한 내용을 작성하시오
정답: this.radius = radius;
- 클래스를 정의할 때, 클래스의 모든 객체가 공유하는 데이터는 static 데이터 필드로 정의한다.
- 클래스 정의에 있는 데이터 필드의 선언문, 초기화 블록, 생성자를 통해서 객체 생성 시 필요한 데이터 필드의 초깃값을 지정할 수 있다.
- 메소드 오버로딩이란 한 클래스에서 이름이 같은 여러 메소드가 존재하는 상황을 말한다. 이때 오버로딩된 메소드끼리는 매개변수 목록이 달라 구별될 수 있다.
- 부모로부터 상속받은 메소드의 몸체를 자식 클래스에서 다시 정의하는 것을 메소드 오버라이딩이라 한다.
- 인스턴스 메소드와 생성자에서 숨은 인자인 thisr를 사용할 수 있다.
- this( )는 같은 클래스에 있는 다른 생성자를, super( )는 자식 클래스 생성자에서 부모 클래스의 생성자를 호출하기 위한 것이다.
5강 인터페이스와 다형성
정답: 2 ( B )
문제 2: 밑줄 친 ㉠, ㉡에 들어갈 키워드는 순서대로 무엇인가?
정답: 2 ( extends, implements )
문제 3: 밑줄 친 부분의 의미를 정확히 설명하시오. 단, CSuper는 클래스 이름이다.
정답: CSuper 클래스를 상속받는 익명 클래스를 정의하고, 동시에 익명 클래스의 객체를 생성한다.
- 몸체가 없는 메소드를 추상 메소드라고 하며, 추상 클래스 또는 인터페이스에 포함될 수 있다.
- 인터페이스는 추상 메소드로만 구성된다. 단, default 인스턴스 메소드와 static 메소드는 몸체가 있어야 한다.
- 의미적으로 유사한 클래스를 묶을 때는 추상 클래스로, 기능적으로 유사한 클래스를 묶을 때는 인터페이스를 사용한다.
- 다형성은 메소드 오버라이딩과 오버로딩, 클래스 간 상속과 형변환, 인터페이스의 구현과 형변환, 메소드 동적 바인딩을 통해 구현될 수 있다.
- 열거 자료형은 여러 상수값을 미리 정의하기 위한 자료형이며, 각 상수값은 하나의 객체와 같다.
- 익명 클래스는 이름이 없는 클래스로, 일회성으로 상속 또는 구현을 통해 자식 객체를 생성하는 용도로만 사용되는 클래스를 의미한다.
6강 제네릭과 람다식
문제 1: 다음과 같은 제네릭 클래스가 있다고 가정하자. 보기에서 문법적으로 오류가 있는 것은?
정답: 1 ( Data<int> d = new Data<>( ); )
문제 2: 다음과 같은 인터페이스가 있다고 가정할 때, 보기에서 람다식 사용이 잘못된 것은?
정답: 3 ( Addable ad = (a, b) -> return (a + b); )
문제 3: Java에서 제공되는 표준 함수형 인터페이스 중 Supplier<T>에서 선언된 추상 메소드의 이름과 형식은 각각 무엇인가?
정답: T get( )
- 자료형을 매개변수로 가지는 클래스와 인터페이스를 제네릭 타입이라고 한다.
- 제네릭 클래스를 사용할 때 제공되는 타입 파라미터는 필드의 자료형, 메소드의 반환형, 메소드에서 인자의 자료형으로 사용될 수 있다.
- 자료형을 매개변수로 가지는 메소드를 제네릭 메소드라고 한다.
- 제네릭을 활용하면 컴파일 시점에 명확한 자료형 검사를 수행할 수 있다.
- 함수형 인터페이스를 구현하는 클래스의 객체를 생성할 때 람다식을 사용하는 것이 효율적이다.
- 람다식의 결과 타입에 해당하는 인터페이스를 람다식의 타깃 타입이라고 한다.
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.*;
- Java의 패키지는 관련이 있는 클래스와 인터페이스의 묶음이며 계층 구조로 구성된다.
- 다른 패키지에 있는 클래스를 사용할 때는 import 구문을 사용하는 것이 편리하다.
- Java 프로그램에서 필요한 클래스나 패키지는 환경 변수 CLASSPATH에 포함되어 있는 경로상에서 찾을 수 있어야 한다.
- Java 프로그램의 실행 도중 심각하지는 않지만 정상적 흐름을 벗어난 비정상적 상황이 발생할 수 있으며 이것을 예외라고 한다.
- checked Exception에 속하는 예외가 발생할 수 있는 경우, 반드시 예외 처리 구문을 작성해야 한다.
- 예외의 직접 처리를 위해 try-catch 구문을 사용하고, 예외를 전파하려면 메소드 선언에 ‘throws 예외 유형’을 표시한다.
8강 java.lang 패키지
문제 1: 다음 프로그램의 출력 결과는 무엇인가?
정답: 1 ( Jovo )
문제 2: Object 클래스와 String 클래스에 대한 설명이다. 잘못된 것은 무엇인가?
정답: 4 ( String 클래스는 표준 입출력 스트림을 위한 static 필드를 제공한다. )
문제 3: 교재의 [소스 7-22]에서 문자열 처리 시간에 차이가 생기는 이유를 설명하라.
정답: String 클래스는 immutable 클래스여서 반복이 진행될수록 계속해서 기존 문자열은 버려지고 새로운 문자열이 새롭게 만들어지기 때문이다(버려지거나 만들어지는 문자열의 길이도 점점 커진다). StringBuffer 클래스를 사용한 경우가 StringBuilder 클래스를 사용한 경우보다 시간이 더 걸리는 이유는 동시성 제어를 고려하여 메소드가 구현되었기 때문이다.
- java.lang 패키지의 클래스를 사용할 때는 import 구문을 쓰지 않아도 된다.
- String은 문자열 처리를 위한 다양한 메소드를 제공하지만 immutable 클래스로, String 객체는 생성 이후에 내용 변경이 불가능하다.
- toString() 메소드와 equals() 메소드는 Object 클래스에서 정의되어 있으며, 몇몇 하위 클래스들에서 적절히 재정의되어 있다.
- 자주 변경되는 문자열을 다루어야 할 경우에는 String 클래스보다 StringBuffer나 StringBuilder 클래스를 사용하는 것이 보다 효율적이다.
- 기본형 값을 객체로 다루기 위해, 모든 기본형마다 상응하는 포장 클래스가 존재한다.
- System 클래스는 표준 입력과 출력, 표준 오류 출력을 위해 in, out, err 객체를 제공한다.
9강 java.io 패키지와 스트림
문제 1: 입력 스트림은 기본 스트림과 보조 스트림으로 나뉜다. 다음 중 기본 스트림에 해당하지 않는 것은?
정답: 4 ( BufferedReader )
문제 2: BufferedReader 클래스에 관한 설명으로 틀린 것은 무엇인가?
정답: 3 ( 바이트 단위의 입력 기능을 제공한다. )
문제 3: 키보드에서 한글을 입력받기 위해서 바이트 단위의 표준 입력 스트림(System.in)을 캐릭터 스트림으로 변환하는 것이 필요하다. 다음 밑줄 부분에 공통으로 들어갈 클래스 이름은 무엇인가?
정답: InputStreamReader
- Java 프로그램에서는 스트림을 통해 데이터 생산자(또는 소비자)의 종류와 무관하게 동일한 방법으로 입력(또는 출력)을 수행할 수 있다.
- File 클래스는 파일 또는 디렉터리를 표현하는 클래스로 파일이나 디렉터리를 조작할 수 있는 메소드를 제공하나 입출력 메소드는 제공하지 않는다.
- RandomAccessFile 클래스는 파일의 읽기/쓰기를 지원하며 파일 포인터가 가리키는 임의의 위치에 읽기/쓰기가 가능하다.
- BufferedInputStream(BufferdOutputStream)과 BufferedReader(BufferdWriter)는 보조 스트림으로 버퍼링 기능을 제공하여 입출력 성능을 향상시킨다.
- 기본 스트림의 객체를 먼저 생성하고, 그 객체를 인자로 하여 보조 스트림 객체를 생성한다.
- InputStreamReader는 바이트 단위 입력 스트림을 캐릭터 단위 입력 스트림으로 변환하는 기능을 한다.
10강 java.nio 패키지의 활용
문제 1: Path 인터페이스에 관한 설명이다. 잘못된 것은?
정답: 4 ( 파일 내용의 읽기와 쓰기 기능을 제공한다. )
문제 2: FileChannel 클래스에 관한 설명으로 틀린 것은 무엇인가?
정답: 3 ( 파일 입력을 위해 FileChannelReader, 파일 출력을 위해 FileChannelWriter를 사용한다. )
문제 3: WatchService를 이용해 디렉터리를 감시할 때, take() 메소드를 호출한다. 이후 대기 중에 있다가 이벤트가 발생하면, take()가 WatchKey 객체를 리턴한다. WatchKey에 관해 설명하라.
정답: WatchKey는 등록된 디렉터리에 어떤 관심 이벤트가 등록되어 있으며, 실제 어떤 이벤트가 일어났는지에 관한 상태 정보를 가지고 있다.
- java.nio와 그것의 서브 패키지는 java.io 패키지를 개선한 새로운 입출력 패키지이다.
- java.nio.file 패키지의 Path 인터페이스는 java.io 패키지의 File 클래스보다 풍부한 기능을 제공한다.
- Files 클래스는 실제 파일(또는 디렉터리) 조작과 읽기·쓰기 기능을 수행하는 static 메소드를 제공한다.
- 채널 입출력에서 버퍼는 기본형 데이터의 보관소이며, 버퍼 단위로 입출력할 수 있다.
- java.nio.file의 FileChannel은 입출력을 모두 제공하고 기본적으로 버퍼링을 사용하며 멀티 스레드 환경에서도 안전하게 동작하도록 설계되어 있다.
- java.nio.file 패키지의 WatchService는 디렉터리에 발생하는 이벤트를 감시하는 서비스이다.
11강 컬렉션
문제 1: ArrayList 클래스에 관한 설명으로 적당하지 않은 것은?
정답: 4 ( 같은 자료를 중복으로 저장할 수 없다. )
문제 2: (key, value) 형태의 원소로 구성되는 자료 묶음을 다루기 위한 인터페이스나 클래스가 아닌 것은?
정답: 2 ( HashSet )
문제 3: LinkedList<E>를 이용하여 큐 자료구조를 구현할 때, 자료를 추가하는 메소드와 삭제하는 메소드는 무엇인가?
정답: 추가 시 boolean offer(E), 삭제 시 E poll( )을 사용함
- 컬렉션은 여러 원소를 저장하고 관리하는 객체를 통칭하는 용어이며, JCF는 컬렉션을 효율적으로 다루기 위한 API를 제공하는 프레임워크이다.
- Set은 원소의 순서에 의미가 없고 중복을 허용하지 않는 컬렉션을 다루기 위한 인터페이스이다.
- List와 Queue는 자료의 중복을 허용하고 순서에 의미가 있는 컬렉션을 관리하기 위한 인터페이스이다. 특히 Queue는 FIFO 방식으로 자료를 관리하는 인터페이스이다.
- Map 인터페이스는 <키, 값>의 쌍으로 구성되는 자료의 묶음을 관리하는 메소드를 제공한다.
- LinkedList 클래스는 List 인터페이스와 Queue 인터페이스를 모두 구현한 클래스이며, 스택 자료구조에서 필요한 메소드도 제공한다.
12강 컬렉션과 스트림
문제 1: 주어진 배열을 스트림으로 만들려고 한다. 밑줄 부분에 들어갈 적당한 내용은?
정답: 2 ( Arrays.stream(numbers) )
문제 2: 주어진 문자열 배열에서 길이가 6 이상인 단어를 대문자로 변환한 후 정렬하여 출력하려고 한다. 밑줄 부분에 들어갈 메소드는 무엇인가?
정답: 4 ( filter )
문제 3: 중간연산과 종료연산의 차이를 설명하시오.
정답: 중간연산은 스트림을 변환하거나 필터링 하는 등의 작업을 수행하며, 다음 단계 처리를 위해 새로운 스트림을 리턴하는데, 체인 형태로 연속해 여러 번 호출될 수 있다. 종료연산은 스트림의 원소를 이용해 최종 결과를 만들어 리턴한다.
- 내부 반복은 컬렉션이나 배열의 내부에서 각 원소의 반복 처리를 수행하는 것으로, 처리용 코드만 람다식으로 전달하며 반복 작업을 위한 코드를 작성하지 않는다.
- forEach( ) 메소드는 람다식과 함께 사용하여 컬렉션과 배열의 원소들을 외부로 꺼내오지 않고 내부에서 탐색하게 한다.
- 필터링은 스트림의 원소 중에서 중복을 제거하거나 특정 조건을 만족하는 원소만 걸러 내고 새로운 스트림을 리턴하는 중간 연산이다.
- 매핑은 스트림의 원소를 다른 원소로 변환한 후 새로운 스트림으로 리턴하는 중간 연산이다.
- 매칭은 스트림의 원소 중 특정 조건을 만족하는지 확인하는 최종 연산이다.
- 수집은 스트림의 원소 중 필터링 또는 매핑 작업 후 결과 원소들을 취합하여 새로운 List, Set, 또는 Map 객체를 생성하는 최종 연산이다.
13강 멀티스레드 프로그래밍
문제 1: 스레드 동기화와 관련된 다음 설명 중 올바른 것은?
정답: 4 ( 메소드 join()은 this 스레드가 종료될 때까지 현재 스레드가 기다린다. )
문제 2: 스레드 동기화의 의미를 가장 잘 설명한 것은?
정답: 3 ( 한순간에 한 스레드만 공유 객체에 접근할 수 있게 하는 것 )
문제 3: 밑줄 부분에 들어갈 스레드 동기화를 위한 자바 키워드는 무엇인가?
여러 스레드가 공유 객체를 사용할 때, 한 스레드가 공유 객체의 메소드를 실행 중이라면 다른 스레드가 동일 객체에 접근할 수 없다.
정답: synchronized
- 멀티 스레드 프로그래밍이란 하나의 프로세스에서 여러 스레드가 생성되어 동시 실행되게 하는 것을 말한다.
- 스레드의 실행 코드는, 스레드 생성에 사용되는 Thread를 상속받는 클래스나 Runnable 인터페이스를 구현한 클래스에서 정의되어 있는 public void run( ) 메소드이다.
- 스레드는 생성되어 소멸할 때까지 Startable, Runnable, Running, Not Running 등의 상태를 거친다.
- Thread 클래스에서 스레드의 상태를 제어하는 메소드로 start(), join(), interrupt()가 있으며, static 메소드인 yield()와 sleep()도 있다. 한편 Object 클래스에 정의된 메소드로는 notify()와 wait()가 있다.
- 스레드 동기화는 데이터의 무결성을 유지하도록 한 번에 한 스레드만이 스레드 간 공유 객체에 접근하도록 하는 것이며, synchronized 메소드는 동기화를 보장한다.
14강 JDBC 프로그래밍
문제 1: JDBC 프로그래밍에 사용되는 클래스나 인터페이스가 아닌 것은?
정답: 4 ( Runnable )
문제 2: PreparedStatement 객체에 대한 설명으로 잘못된 것은?
정답: 1 ( PreparedStatement는 Statement의 부모 인터페이스이다. )
문제 3: Statement 객체를 이용하여 executeQuery( )를 호출하면 select 구문을 실행할 수 있다.이때 질의를 만족하는 레코드들이 테이블 형태로 리턴되는데 이것의 데이터 타입은 무엇인가?
정답: ResultSet
- MariaDB는 MySQL과 호환되는 오픈 소스 관계형 데이터베이스 관리 시스템이다.
- JDBC는 Java 프로그램에서 관계형 데이터베이스와 연동할 수 있게 하는 표준 API이다.
- JDBC 프로그래밍을 위해서는 MariaDB용 JDBC 드라이버로 .jar 파일을 다운로드받아 Classpath에 추가해야 한다.
- DBMS와 연결을 설정할 때는 java.sql.Connection 객체를 사용한다.
- SQL 구문을 실행할 때 Statement 인터페이스의 execute( ), executeQuery( ), executeUpdate( )를 사용할 수 있다.
- select 구문을 실행할 때 executeQuery( )를 호출하며, 검색 결과가 ResulteSet 객체로 리턴된다.
- 같은 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;
- 자주 사용되는 클래스와 인터페이스를 컴파일된 형태로 제공한 것을 라이브러리라고 한다.
- Java의 라이브러리는 .class 파일을 묶어서 만든 .jar 파일의 형태이다.
- 모듈은 라이브러리의 업그레이드 버전으로 패키지 단위에서 접근성을 설정할 수 있다.
- 라이브러리를 사용하려면 해당 .jar 파일을 Classpath에 추가하고, 모듈을 사용하려면 Modulepath에 추가한다.
- 모듈 프로젝트에서 ‘module-info.java’ 파일에 ‘exports 패키지;’ 또는 ‘requires 모듈;’ 형식으로 모듈 간 의존관계를 설정할 수 있다.
- JDK의 표준 라이브러리는 모두 모듈화되었으며, java.base는 자바 표준 모듈 중 가장 기본 모듈이다.
'방송통신대 컴퓨터과학과' 카테고리의 다른 글
운영체제 (기말 준비) (0) | 2024.05.27 |
---|---|
파이썬 (기말 준비) (0) | 2024.05.26 |
알고리즘 (기말 준비) (0) | 2024.05.26 |
인공지능 (기말 준비) (0) | 2024.05.26 |
운영체제 (기말 준비) (0) | 2024.05.26 |