재구성 출제 고지: 이 문제집은 국가평생교육진흥원 독학학위제 3단계 객체지향프로그래밍 출제기준(평가영역) 전체 범위의 출제 경향을 분석해 새로 구성한 재구성 문항입니다. 실제 기출 문항을 그대로 옮긴 것이 아닙니다. 회차별 정확한 문항 수·시험 시간은 시행처 공고를 확인해야 하며, 여기서는 22문항을 표준 분량으로 구성했습니다.
반복되는 출제 패턴 개관
독학사 3단계 객체지향프로그래밍에서 되풀이해서 나타나는 출제 포인트를 정리하면 아래와 같다. 각 패턴 아래에 해당 패턴을 다루는 문제 번호를 표시해 두었으니, 틀린 문제가 있다면 같은 패턴의 다른 문제도 함께 다시 풀어 보는 것이 좋다.
| 오개념 패턴 | 핵심 함정 | 관련 문제 |
|---|---|---|
| 추상 클래스 vs 인터페이스 | 생성자·다중 상속·기본 구현 가능 여부의 차이 | 1–3 |
| 생성자 안에서 오버라이드된 메서드 호출 | 자식 필드가 아직 초기화되지 않은 시점에 자식 메서드가 실행됨 | 4 |
| 오버로딩과 오버라이딩의 혼동 | 매개변수 타입이 다르면 오버라이딩이 아니라 별개의 오버로딩이 된다 | 5 |
| checked·unchecked 예외 계층 | Throwable 아래 Error와 Exception의 구분, RuntimeException의 위치 | 6 |
| 접근 제어와 패키지의 결합 | default 접근 수준은 클래스 자체에도 적용된다 | 7 |
| 컬렉션 구현체 선택 | 순서 유지·중복 허용·정렬 여부 조건에 맞는 구현체 고르기 | 8–9 |
| 정적 바인딩과 동적 바인딩 | 필드·정적 메서드는 정적 바인딩, 오버라이딩된 인스턴스 메서드는 동적 바인딩 | 10 |
| 다형성의 실무적 가치 | 하위 타입 추가마다 기존 코드를 고쳐야 하는 문제를 다형성이 어떻게 줄이는가 | 11 |
| UML 표기 구분 | 실선·점선, 속이 빈 삼각형·마름모의 조합이 서로 다른 관계를 뜻함 | 12 |
| finally와 return의 상호작용 | finally 안의 return이 try의 return 값을 덮어씀 | 13 |
| 오버라이딩의 공변 반환 타입 | 반환형이 하위 타입으로 바뀌는 것은 오버라이딩 규칙 위반이 아님 | 14 |
| 객체와 클래스의 관계 | 같은 클래스의 객체라도 필드 값은 서로 다를 수 있음 | 15 |
| synchronized 블록의 락 객체 | 락으로 사용하는 객체가 스레드 간 공유되어야 동기화가 의미를 가짐 | 16 |
| 제네릭 없이 사용하는 raw type | 문법적으로는 허용되지만 타입 안전성을 잃는다 | 17 |
| 오버라이딩 시 접근 범위 확대 | 좁히는 것은 금지되지만 넓히는 것은 허용됨 | 18 |
| this()와 super()의 동시 사용 금지 | 한 생성자 안에서 둘 다 첫 문장 자리를 다툴 수 없음 | 19 |
| 캡슐화의 설계 이점 | 내부 구현 변경이 외부 코드에 미치는 영향을 최소화 | 20 |
| 인터페이스의 추상 메서드 구현 강제 | 구현하지 않으면 클래스 자체가 컴파일되지 않음 | 21 |
| checked 예외의 위임 | throws로 호출자에게 처리를 미룰 수 있음 | 22 |
문제 1
문제 14지선다
추상 클래스와 인터페이스의 차이에 대한 설명으로 옳지 않은 것은?
문제 2
abstract class Shape {
abstract double area();
}
public class Main {
public static void main(String[] args) {
Shape s = new Shape();
}
}문제 24지선다
위 코드를 컴파일했을 때 결과로 옳은 것은?
문제 3
문제 34지선다
한 클래스가 서로 다른 두 인터페이스로부터 시그니처가 같은 default 메서드를 물려받을 때 처리 방법으로 옳은 것은?
문제 4
class Parent {
Parent() {
show();
}
void show() {
System.out.println("Parent show");
}
}
class Child extends Parent {
int value = 10;
@Override
void show() {
System.out.println("Child show, value = " + value);
}
public static void main(String[] args) {
new Child();
}
}문제 44지선다
위 코드를 실행했을 때 출력되는 결과로 옳은 것은?
문제 5
class Animal {
void makeSound(String sound) {
System.out.println("동물이 소리를 낸다: " + sound);
}
}
class Dog extends Animal {
void makeSound(int volume) {
System.out.println("개가 짖는다, 크기: " + volume);
}
public static void main(String[] args) {
Animal a = new Dog();
a.makeSound("멍멍");
}
}문제 54지선다
위 코드를 실행했을 때 출력되는 결과로 옳은 것은?
문제 6
문제 64지선다
자바 예외 클래스 계층 구조에 대한 설명으로 옳은 것은?
문제 7
package pkgA;
class Helper {
void assist() {
System.out.println("도움");
}
}문제 74지선다
Helper 클래스가 접근 제어자 없이 default로 선언되어 있을 때, 다른 패키지의 클래스에서 Helper를 사용하려고 하면 어떤 일이 발생하는가?
문제 8
문제 84지선다
검색·삽입·삭제가 잦고, 저장 순서를 유지할 필요는 없지만 중복은 허용하지 않아야 하는 자료를 저장하려 할 때 가장 적절한 컬렉션은?
문제 9
문제 94지선다
데이터를 삽입한 순서를 그대로 유지하면서 중복도 허용하지 않아야 할 때 사용할 수 있는 컬렉션으로 가장 적절한 것은?
문제 10
문제 104지선다
다음 중 동적 바인딩(dynamic binding)에 대한 설명으로 가장 정확한 것은?
문제 11
문제 114지선다
객체지향에서 다형성이 주는 이점에 대한 설명으로 가장 적절한 것은?
문제 12
문제 124지선다
UML 클래스 다이어그램에서 점선과 속이 빈 삼각형 화살표로 표현되는 관계는?
문제 13
public class Main {
static int calc() {
try {
return 1;
} finally {
return 2;
}
}
public static void main(String[] args) {
System.out.println(calc());
}
}문제 134지선다
위 코드를 실행했을 때 출력되는 값으로 옳은 것은?
문제 14
class Animal {}
class Dog extends Animal {}
class AnimalShelter {
Animal getAnimal() {
return new Animal();
}
}
class DogShelter extends AnimalShelter {
@Override
Dog getAnimal() {
return new Dog();
}
}
public class Main {
public static void main(String[] args) {
AnimalShelter shelter = new DogShelter();
Animal a = shelter.getAnimal();
System.out.println(a.getClass().getSimpleName());
}
}문제 144지선다
위 코드를 컴파일하고 실행했을 때 결과로 옳은 것은?
문제 15
문제 154지선다
클래스와 객체의 관계에 대한 설명으로 옳지 않은 것은?
문제 16
문제 164지선다
synchronized(lockObj) 형태의 블록에서 lockObj의 역할로 가장 적절한 것은?
문제 17
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List list = new ArrayList();
list.add("문자열");
list.add(100);
for (Object o : list) {
System.out.println(o);
}
}
}문제 174지선다
위 코드를 실행했을 때 나타나는 현상으로 가장 적절한 것은?
문제 18
문제 184지선다
오버라이딩 시 접근 제어자 변경 규칙에 대한 설명으로 옳은 것은?
문제 19
class Parent {
Parent() {
System.out.println("Parent()");
}
}
class Child extends Parent {
Child() {
super();
this(5);
}
Child(int x) {
System.out.println("Child(int)");
}
public static void main(String[] args) {
new Child();
}
}문제 194지선다
위 코드를 컴파일했을 때 결과로 옳은 것은?
문제 20
문제 204지선다
캡슐화가 소프트웨어 설계에 주는 이점으로 가장 적절한 것은?
문제 21
interface Flyable {
void fly();
}
class Bird implements Flyable {
public static void main(String[] args) {
Bird b = new Bird();
}
}문제 214지선다
위 코드를 컴파일했을 때 결과로 옳은 것은?
문제 22
문제 224지선다
메서드 안에서 checked 예외를 처리하지 않고 호출한 쪽으로 넘기고 싶을 때 사용하는 방법으로 옳은 것은?
참고 자료
- 국가평생교육진흥원 독학학위제 - 출제방향/수준: https://bdes.nile.or.kr/nile/study/nStudy1_1.do
- 국가평생교육진흥원 독학학위제 - 과목별 평가영역: https://bdes.nile.or.kr/nile/study/nStudy2_1.do
- Oracle Java Tutorials - Learning the Java Language: https://docs.oracle.com/javase/tutorial/java/index.html
Last updated on