본문 바로가기
CS(computer science) 지식/프로그래밍

[JAVA] 문제로 풀어보는 JAVA

by QueryJun 2025. 10. 30.

JAVA의 핵심 개념


객체지향 프로그래밍(OOP)

캡슐화 데이터 보호 + 메서드만 통해 접근 private + getter/setter
상속 부모의 코드를 재사용 extends
다형성 같은 요청 → 다르게 동작 오버라이딩/오버로딩
추상화 핵심 인터페이스만 노출 abstract, interface

 

1. 캡슐화
데이터(필드)를 보호하고, 메서드를 통해서만 접근하도록 하는 것

  • 외부에서 멋대로 값을 바꾸면 문제 발생 가능
  • 내부 구조 변경 시 외부 코드 영향 최소화

class Person {
    private int age; // 감추기!

    public void setAge(int a) {
        if(a >= 0) age = a;  // 안전한 검증
    }

    public int getAge() {
        return age; // 메서드를 통해 접근
    }
}

 

반드시 제어된 메서드를 통해서만 접근

Person p = new Person();
p.setAge(-100); // if에서 걸러짐 → 안전!
System.out.println(p.getAge()); // getter를 통해 접근
 


2. 상속
부모 클래스의 기능(메서드, 변수)을
자식 클래스가 물려받아 재사용

class Animal {
    void eat() { System.out.println("먹는다"); }
}

class Dog extends Animal {
    void bark() { System.out.println("멍멍"); }
}


사용:

Dog d = new Dog();
d.eat();  // 부모 기능 사용 O
d.bark();

 

 

3. 다형성

같은 요청(메서드 호출)을 했지만 서로 다르게 행동할 수 있음

 

오버라이딩(Overriding) — 재정의

개념 부모 클래스에서 물려받은 메서드를 자식 클래스에서 재정의
목적 다형성 구현(같은 요청 → 자식마다 다르게 동작)
시그니처 완전히 동일해야 함 (메서드명, 매개변수, 리턴타입까지)
접근제어자 원본보다 좁아지면 안됨
애노테이션 @Override 사용 권장
실행 시점 런타임에 어떤 메서드가 실행될지 결정됨
class Animal {
    void sound() { System.out.println("동물이 소리낸다"); }
}
class Cat extends Animal {
    void sound() { System.out.println("야옹"); } // 부모 메서드 재정의
}
class Dog extends Animal {
    void sound() { System.out.println("멍멍"); }
}
Animal a = new Dog();
a.sound(); // 멍멍

a = new Cat();
a.sound(); // 야옹​


오버로딩(Overloading) — 같은 이름, 다른 매개변수, 메소드 중복 정의

개념 같은 클래스에서 이름 같고, 매개변수 다르게
목적 편의성 증가(다양한 입력 처리)
시그니처 매개변수 타입/개수가 달라야 함
접근제어자 무관
리턴타입 다르기만 하고 매개변수 동일하면 불가능
실행 시점 컴파일 시점에 어떤 메서드가 호출될지 결정됨
int add(int a, int b) { return a+b; }
int add(int a, int b, int c) { return a+b+c; }

 

 

4. 추상화
꼭 필요한 기능만 이름만 적고
구현은 감춰두는 것

느낌 공통 부모 틀 (약간 완성된 설계도) 규칙/약속만 나열한 문서
포함 가능 일반 메서드 + 추상 메서드 기본적으로 추상 메서드(+ static, default 가능)
상속 단일 상속만 가능 다중 구현 가능
목적 공통 속성과 기본 기능 공유 모두에게 동일한 규칙을 강제
비유 “동물”처럼 공통 특성을 가진 집단의 기본 설계 “이 버튼을 누르면 전원 켜져야 한다!” 같은 사용 규칙



abstract 클래스 예시
공통 규칙을 강제하고, 자식 클래스들이 반드시 특정 기능을 구현하게 하기 위해

abstract class Animal {
    abstract void sound(); // 구현 X, 이름만!
}
class Dog extends Animal {
    void sound() { System.out.println("멍멍"); }
}

 

 

interface 예시
서로 다른 객체들이 “같은 방식으로 사용될 수 있도록” 규칙을 강제하기 위해

interface RemoteControl {
    void powerOn();
}

 

  • 만든 사람과 사용하는 사람 간에 규칙만 공유
  • 유지보수 쉬움

 


 

 

JVM (Java Virtual Machine) - Java 코드는 JVM 위에서 실행된다
✅ 운영체제에 독립적
✅ 보안, 메모리 관리 우수

실행과정

 .java 파일 (소스코드)
        ↓ 컴파일 (javac)
 .class 파일 (바이트코드, OS 독립)
        ↓ 실행 (java)
     JVM 이 바이트코드를 각 OS에 맞게 처리

 


 

 

제네릭(Generics)
데이터 타입을 일반화하여,
선언 시가 아닌 사용 시에 타입을 지정하는 기능

ArrayList<String> list = new ArrayList<>();

 

 




스레드(Thread) / 동시성
여러 작업을 동시에 실행

class MyThread extends Thread {
    public void run() { }
}

 


접근 제어자
public 어디서든
protected 같은 패키지 + 상속
(default) 같은 패키지
private 자기 클래스 내부



1

다음 중 Java 프로그램의 시작점이 되는 메서드는?
A. init()
B. run()
C. start()
D. main()
E. execute()

정답: D

Java 프로그램은 항상 public static void main(String[] args) 메서드에서 시작된다.


2

다음 중 Java의 기본 자료형(primitive type)이 아닌 것은?

A. int
B. double
C. boolean
D. String
E. char

정답: D

String은 클래스형(reference type)이다.

Java의 기본 자료형
정수형 byte, short, int, long
실수형 float, double
문자형 char
논리형 boolean

3

int형 변수 a가 5, b가 2일 때 a / b의 결과는?
A. 2.5
B. 2
C. 3
D. 2.0
E. 2.25

정답: B

정수/정수 연산 결과는 정수(2).
실수 결과를 원하면 (double)a / b 로 캐스팅해야 한다.


4

System.out.println("Java" + 10 + 20); 의 출력 결과는?
A. Java30
B. Java1020
C. 30Java
D. 10Java20
E. 오류 발생

정답: B

문자열 결합 연산(+)은 왼쪽부터 순서대로 수행 → "Java10" + 20 → "Java1020"

만약 숫자부터 더하면?
System.out.println(10 + 20 + "Java");
30Java


5

다음 중 올바른 변수 선언이 아닌 것은?
A. int num = 10;
B. double value = 3.14;
C. char c = "A";
D. boolean flag = true;
E. String s = "Hello";

정답: C

char은 작은따옴표 'A' 를 사용해야 한다.


6

for(int i=0; i<3; i++) { System.out.print(i); } 실행 결과는?
A. 012
B. 123
C. 0 1 2
D. 3회 반복 에러
E. 출력 없음

정답: A

0, 1, 2 출력 (공백 없음)


7

조건문 if-else 에 대한 설명으로 옳은 것은?
A. 조건이 거짓이면 if 문이 실행된다.
B. else 절은 반드시 있어야 한다.
C. if 뒤에는 반드시 중괄호가 있어야 한다.
D. 조건식은 반드시 true/false 값을 반환해야 한다.
E. if문은 switch문보다 빠르다.

정답: D

if문의 조건식은 boolean 값을 반환해야 한다.


8

다음 중 클래스 생성자(Constructor) 에 대한 설명으로 옳지 않은 것은?
A. 클래스 이름과 동일해야 한다.
B. 반환형이 없다.
C. 객체 생성 시 자동 호출된다.
D. 여러 개의 생성자를 오버로딩할 수 있다.
E. 반드시 public이어야 한다.

정답: E

생성자는 public, private, protected 모두 가능하다. (싱글톤 등에서 private 생성자 사용)

기본 예시

class Person {
    String name;

    // 생성자
    Person() {
        name = "Unknown";
        System.out.println("생성자 호출됨!");
    }
}

public class Main {
    public static void main(String[] args) {
        Person p = new Person(); // 생성자 자동 호출
    }
}




9

다음 중 메서드 오버로딩(Overloading)의 조건으로 옳은 것은?
A. 메서드 이름과 매개변수의 개수나 타입이 달라야 한다.
B. 반환형만 다르면 된다.
C. 접근제한자가 다르면 된다.
D. static 여부만 다르면 된다.
E. 파라미터 이름만 다르면 된다.

정답: A

이름은 같고, 매개변수 개수나 타입이 달라야 오버로딩.

b. 오버로딩은 리턴 타입은 고려되지 않는다
c. 접근제한자는 오버로딩과 무관
d. static 여부도 오버로딩 구분 요소가 아님
e. 변수 이름은 컴파일 시 사라지는 정보 시그니처가 완전히 동일 → 오버로딩 아님


10

다음 코드의 출력 결과는?

int a = 5; 
System.out.println(++a); 
System.out.println(a++); 
System.out.println(a);


A. 6, 6, 7
B. 5, 5, 6
C. 6, 7, 7
D. 7, 6, 6
E. 5, 6, 6

정답: A

++a → 먼저 증가 후 출력(6)
a++ → 출력 후 증가(6 출력 후 7됨)


11

다음 중 상속을 나타내는 키워드는?
A. this
B. super
C. extends
D. import
E. package

정답: C

class SubClass extends SuperClass


12

final 키워드의 의미로 옳은 것은?
A. 오버라이딩 가능
B. 상속 가능
C. 변경 가능
D. 변경 불가
E. 정적(static) 변수 선언

정답: D

final은 상수, 메서드, 클래스 등에서 수정/변경 불가를 의미.
더 이상 변경할 수 없도록 만드는 키워드


13

다음 코드의 출력 결과는?

String s1 = new String("java");
String s2 = new String("java"); 
System.out.println(s1 == s2); 
System.out.println(s1.equals(s2));
 

A. true / true
B. true / false
C. false / true
D. false / false
E. 컴파일 오류

정답: C

== 은 참조 비교, equals()는 내용 비교


14

다음 중 예외(Exception) 처리를 위한 키워드가 아닌 것은?
A. try
B. catch
C. throw
D. finally
E. error

정답: E

Error는 예외 클래스가 아니라 치명적 시스템 오류.


15

ArrayList 객체를 생성하려면?
A. ArrayList list = new ArrayList();
B. ArrayList list = new List();
C. List list = new List();
D. List list = new Collection();
E. Collection list = new ArrayListList();

정답: A

ArrayList는 클래스, List는 인터페이스라서 직접 생성 불가.

자바에서 객체 생성은 new 클래스명() 형태로 해야 합니다.

ArrayList는 클래스이고, List는 인터페이스입니다.

권장 방식
List<String> list = new ArrayList<>();


16

다음 중 Java 컬렉션 프레임워크에 속하지 않는 것은?
A. List
B. Map
C. Set
D. Array
E. Queue

정답: D

Array는 기본형 배열로, 컬렉션 인터페이스에 속하지 않는다.

List 순서 O, 중복 O ArrayList, LinkedList
Set 순서 X, 중복 X HashSet, TreeSet
Map Key-Value 저장 HashMap, TreeMap
Queue FIFO 구조 LinkedList, PriorityQueue

17

다음 코드의 출력 결과는?

String s = "Hello World";
 System.out.println(s.substring(0, 5));

A. Hello
B. World
C. Hello World
D. ello
E. Error

정답: A

substring(0, 5) → 인덱스 0부터 4까지 추출 ⇒ “Hello”


18

파일을 읽거나 쓸 때 예외 처리가 필요한 이유는?
A. 파일이 항상 존재하기 때문이다.
B. IOException이 발생할 수 있기 때문이다.
C. JVM이 자동으로 처리하기 때문이다.
D. 네트워크와 관련 없기 때문이다.
E. 파일 크기 때문

정답: B

입출력(I/O) 과정에서는 IOException이 반드시 발생 가능 → try-catch로 처리 필요.


19

다음 중 객체 지향 프로그래밍(OOP)의 3대 특징이 아닌 것은?
A. 캡슐화
B. 상속
C. 다형성
D. 추상화
E. 반복문

정답: E

반복문은 절차지향적 제어문.
객체지향 3요소: 캡슐화, 상속, 다형성


20

Java에서 패키지(package)의 역할로 옳은 것은?
A. 프로그램 실행 속도를 높인다.
B. 변수의 메모리 크기를 결정한다.
C. 클래스의 논리적 그룹화 및 이름 충돌 방지.
D. 예외 처리를 담당한다.
E. 네트워크 통신을 수행한다.

정답: C

패키지는 클래스 파일을 논리적으로 묶고, 이름 충돌을 방지한다.

java.lang String, Math, Object (기본 클래스)
java.util ArrayList, HashMap, Date 등 유틸
java.io Input/Output 스트림 처리
java.net 네트워크 통신 클래스
java.sql 데이터베이스 연결 JDBC
java.awt GUI 컴포넌트
반응형