실기 공부방READ · TRACE · RECALL

정보처리 실무 · 학습 노트

Java

참조 타입과 실제 객체 타입을 구분하기

JavaScript와 이름·문법 일부가 비슷해도 Java는 정적 타입 언어다. 출력 문제에서는 필드, 오버라이딩, 오버로딩, 생성자, static을 분리하면 복잡한 코드도 따라갈 수 있다.

기초부터 실전까지

처음 배우는 분의 학습 순서

기호와 용어가 낯설면 기초·상세 보강을 먼저 읽고, 기존 핵심 정리로 연결하세요. 예제의 값을 손으로 계산한 뒤 확인 질문을 답하고 마지막에 문제를 풉니다.

추가된 상세 학습 8개 펼쳐보기
이 단원 목차 17개
이번 단원 완료 기준

핵심 규칙을 설명하고, 연습문제의 답과 이유를 해설 없이 적을 수 있으면 체크하세요. 이해 체크와 정답 기록은 별도로 저장됩니다.

01

실행 뼈대와 타입

클래스 안에 메서드를 정의하고 main에서 시작한다. int와 boolean 같은 기본형은 값, 배열·String·객체 변수는 참조값을 저장한다. 지역변수는 사용 전 초기화가 필요하다. 필드는 타입에 따른 기본값을 갖는다.

class Main {
 public static void main(String[] args) {
  int n=7;
  System.out.println(n/2);
 }
}

답을 가리고 확인

“실행 뼈대와 타입”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.

확인 답안 보기

정수 나눗셈은 0 방향 절삭. boolean에 0이나 1을 직접 넣지 않는다. Java의 조건식은 boolean이어야 한다. C처럼 if(1)을 쓰지 않는다.

꼭 기억할 것

정수 나눗셈은 0 방향 절삭. boolean에 0이나 1을 직접 넣지 않는다.

헷갈리는 지점 Java의 조건식은 boolean이어야 한다. C처럼 if(1)을 쓰지 않는다.

02

==와 equals

기본형 ==는 값을 비교하지만 참조형 ==는 같은 객체인지 비교한다. String의 equals는 문자열 내용을 비교한다. 일반 객체의 equals는 구현에 따라 다르며 Object 기본 구현은 동일성을 비교한다.

답을 가리고 확인

“==와 equals”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.

확인 답안 보기

new String("OK") 두 개는 내용이 같아도 별도 객체다. 배열 내용 비교에는 Arrays.equals를 사용한다. 문자열 리터럴 풀 때문에 "OK" == "OK"가 true인 사례를 모든 문자열에 일반화하지 않는다.

꼭 기억할 것

new String("OK") 두 개는 내용이 같아도 별도 객체다. 배열 내용 비교에는 Arrays.equals를 사용한다.

헷갈리는 지점 문자열 리터럴 풀 때문에 "OK" == "OK"가 true인 사례를 모든 문자열에 일반화하지 않는다.

03

필드 접근과 오버라이딩

부모 변수 p가 자식 객체를 참조할 수 있다. p.x 같은 필드는 변수의 선언 타입을 따라 찾는다. 재정의한 인스턴스 메서드 p.f()는 실제 객체 타입을 따라 호출한다.

과정으로 이해하기

  1. 변수 선언 타입 Parent와 실제 객체 Child를 서로 다른 열에 적는다.
  2. p.x는 Parent 필드, p.f()는 override된 Child 메서드를 찾는다.
  3. 필드가 자동으로 다형성에 따라 선택된다고 생각하지 않는다.

답을 가리고 확인

메서드와 필드 중 실제 객체 타입으로 선택되는 것은?

확인 답안 보기

오버라이딩된 인스턴스 메서드.

꼭 기억할 것

Parent p = new Child(); → 필드는 Parent, override 메서드는 Child.

헷갈리는 지점 static 메서드는 오버라이딩이 아니라 숨김이다. private 메서드도 일반적인 동적 오버라이딩 대상으로 다루지 않는다.

04

오버로딩과 형 변환

오버로딩은 메서드 이름이 같고 매개변수 목록이 다른 것이다. 호출할 시그니처는 컴파일 시 인자의 선언 타입으로 정한다. 그 후 해당 시그니처의 오버라이딩은 실제 객체를 따른다.

답을 가리고 확인

“오버로딩과 형 변환”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.

확인 답안 보기

반환 타입만 다르게 해서는 오버로딩이 되지 않는다. Object x="a";를 f(x)에 넣으면 f(String)이 아니라 f(Object)가 선택된다.

꼭 기억할 것

반환 타입만 다르게 해서는 오버로딩이 되지 않는다.

헷갈리는 지점 Object x="a";를 f(x)에 넣으면 f(String)이 아니라 f(Object)가 선택된다.

05

생성자와 초기화

new Child()를 하면 부모 부분부터 초기화된다. 생성자는 반환 타입이 없고 클래스 이름과 같다. this(...)는 같은 클래스 생성자, super(...)는 부모 생성자 호출이다. Java 21 기준 명시적 생성자 호출은 생성자의 첫 문장이다.

답을 가리고 확인

“생성자와 초기화”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.

확인 답안 보기

정적 초기화는 클래스 초기화 시 한 번. 인스턴스 필드 초기화와 생성자는 객체마다 수행한다. 부모 생성자에서 재정의된 메서드를 호출하면 자식 필드의 명시적 초기화 전 기본값을 볼 수 있다. 호출 순서를 적는다.

꼭 기억할 것

정적 초기화는 클래스 초기화 시 한 번. 인스턴스 필드 초기화와 생성자는 객체마다 수행한다.

헷갈리는 지점 부모 생성자에서 재정의된 메서드를 호출하면 자식 필드의 명시적 초기화 전 기본값을 볼 수 있다. 호출 순서를 적는다.

06

static·매개변수·배열

static 필드는 클래스 수준에서 공유된다. 인스턴스 필드는 객체마다 존재한다. Java도 값 전달이며 객체를 넘기면 참조값을 복사한다. 배열 원소 변경은 공유 객체를 바꾸지만 매개변수에 새 배열을 대입하는 것은 호출자 변수를 바꾸지 않는다.

답을 가리고 확인

“static·매개변수·배열”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.

확인 답안 보기

배열 길이는 a.length, 문자열 길이는 s.length(). 향상된 for에서 기본형 변수 x에 대입해도 원래 배열 원소가 바뀌지 않는다.

꼭 기억할 것

배열 길이는 a.length, 문자열 길이는 s.length().

헷갈리는 지점 향상된 for에서 기본형 변수 x에 대입해도 원래 배열 원소가 바뀌지 않는다.

07

문자열 +와 예외

+는 왼쪽부터 평가한다. 앞이 숫자면 산술, 문자열이 등장하면 뒤를 문자열로 이어 붙인다. try에서 예외가 나면 나머지 문장을 건너뛰고 맞는 catch, 이어서 finally를 실행한다.

답을 가리고 확인

“문자열 +와 예외”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.

확인 답안 보기

print는 줄바꿈 없음, println은 끝에 줄바꿈. finally는 정상 반환·예외 경로에서도 보통 실행된다. finally에서 return을 쓰면 try의 반환을 덮을 수 있다. 시험 추적용 함정이며 실무에서 피할 패턴이다.

꼭 기억할 것

print는 줄바꿈 없음, println은 끝에 줄바꿈. finally는 정상 반환·예외 경로에서도 보통 실행된다.

헷갈리는 지점 finally에서 return을 쓰면 try의 반환을 덮을 수 있다. 시험 추적용 함정이며 실무에서 피할 패턴이다.

08

추상 클래스·인터페이스·제네릭

추상 클래스는 공통 상태와 구현, 미구현 메서드를 둘 수 있다. 인터페이스는 역할의 계약이다. 클래스 상속은 하나, 인터페이스 구현은 여러 개 가능하다. List<Integer> 같은 제네릭은 원소 타입을 제한한다.

답을 가리고 확인

“추상 클래스·인터페이스·제네릭”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.

확인 답안 보기

extends / implements / abstract / final을 구별한다. final 변수는 재대입 불가다. final 배열의 원소는 수정할 수 있다. 배열 변수가 다른 배열을 가리키도록 바꾸는 것이 금지된다.

꼭 기억할 것

extends / implements / abstract / final을 구별한다. final 변수는 재대입 불가다.

헷갈리는 지점 final 배열의 원소는 수정할 수 있다. 배열 변수가 다른 배열을 가리키도록 바꾸는 것이 금지된다.

09

인터페이스의 default·static 메서드

인터페이스는 추상 메서드 외에 본문이 있는 default 메서드와 인터페이스 자체에 속해 재정의 대상이 아닌 static 메서드를 가질 수 있다. default 메서드는 기존 인터페이스에 새 기능을 추가하면서 이미 구현한 클래스를 깨지 않기 위해 쓰인다.

답을 가리고 확인

“인터페이스의 default·static 메서드”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.

확인 답안 보기

구현 클래스가 default 메서드를 재정의하면 일반 메서드와 같은 동적 바인딩 규칙에 따라 재정의한 쪽이 호출된다. 구현 클래스가 재정의하지 않으면 인터페이스에 정의된 default 본문이 그대로 실행된다. 추상 메서드로 착각해 반드시 재정의해야 한다고 단정하지 않는다.

꼭 기억할 것

구현 클래스가 default 메서드를 재정의하면 일반 메서드와 같은 동적 바인딩 규칙에 따라 재정의한 쪽이 호출된다.

헷갈리는 지점 구현 클래스가 재정의하지 않으면 인터페이스에 정의된 default 본문이 그대로 실행된다. 추상 메서드로 착각해 반드시 재정의해야 한다고 단정하지 않는다.

10

Java 기호·타입·배열 생성

Java는 클래스 안에 메서드를 정의하며 main에서 실행을 시작한다. 변수 선언에는 타입이 필요하다. int 정수, double 실수, char 문자 하나, boolean true/false를 사용한다. new int[3]은 길이 3 배열을 만들고 원소를 0으로 초기화한다.

배열 인덱스는 0부터 length-1까지다. int[][]는 배열을 원소로 가진 배열이어서 행마다 길이가 달라도 된다. System.out.print는 줄바꿈 없이, println은 줄바꿈을 추가한다.

int[] a = new int[3];
a[1] = 7;
System.out.print(a.length+" "+a[0]+" "+a[1]);

과정으로 이해하기

  1. 배열은 [0,7,0]. 출력 3 0 7.

답을 가리고 확인

new boolean[2]의 초기 원소값은?

확인 답안 보기

둘 다 false. 참조형 배열 원소는 null로 초기화된다.

꼭 기억할 것

배열 a.length / 문자열 s.length() / 리스트 list.size().

헷갈리는 지점 지역변수를 초기화 없이 읽으면 컴파일 오류. 배열 원소·필드의 기본 초기값과 다르다.

11

산술·증감·단락·삼항 연산

정수 /는 0 방향 절삭이며 %는 나머지다. (double)a/b는 실수 나눗셈이다. ++x는 증가 후 값, x++는 증가 전 값을 사용한다. &&와 ||는 단락 평가하고 boolean의 &와 |는 오른쪽도 평가한다.

조건 ? 참일때값 : 거짓일때값은 조건에 따라 한쪽 값만 선택한다. Java는 피연산자를 왼쪽부터 평가한다. +에서 문자열이 등장한 뒤에는 문자열 결합이므로 괄호를 보고 숫자 계산이 끝나는 위치를 정한다.

int x=2;
int y=x++ + ++x;
System.out.print(x+" "+y+" "+(x%2==0 ? "E" : "O"));

과정으로 이해하기

  1. 왼쪽 x++는 2를 사용하고 x=3. 오른쪽 ++x는 x=4 후 4를 사용한다. y=6. 출력 4 6 E.

답을 가리고 확인

false && (5/0>1)이 예외를 내는가?

확인 답안 보기

아니다. 오른쪽을 평가하지 않는다.

꼭 기억할 것

C와 달리 Java의 식 평가 순서는 정해져 있다. 언어별로 규칙을 분리한다.

헷갈리는 지점 정수 0으로 나누면 ArithmeticException, 실수 0 나눗셈은 Infinity·NaN이 될 수 있다.

12

접근 제어·this·super·final

public은 넓은 접근을 허용하고 private은 선언한 클래스 내부 접근을 제한한다. 접근 지정자를 생략하면 같은 패키지에서 접근할 수 있다. protected는 같은 패키지와 상속 관계에서 조건에 따라 접근을 허용한다. this는 현재 객체, super는 부모 클래스 부분을 지정할 때 쓴다.

final 변수는 재대입할 수 없고 final 메서드는 오버라이딩할 수 없으며 final 클래스는 상속할 수 없다. final 객체 참조가 고정되어도 객체 내부 상태가 항상 불변인 것은 아니다.

final int[] a={1,2};
a[0]=9;
System.out.print(a[0]);
// a=new int[]{3}; 는 컴파일 오류

과정으로 이해하기

  1. 배열 참조 a는 고정되지만 배열 원소는 바꿀 수 있어 9 출력.

답을 가리고 확인

final 클래스에 extends를 사용하면?

확인 답안 보기

상속할 수 없어 컴파일 오류.

꼭 기억할 것

this.x는 현재 객체 필드, super.x는 부모 필드. static 문맥에는 현재 객체 this가 없다.

헷갈리는 지점 protected를 “어느 위치의 자식 객체든 접근 가능”으로 일반화하지 않는다. 패키지 밖 규칙이 더 제한적이다.

13

업캐스팅·다운캐스팅·다형성

Parent p=new Child();는 자식 객체를 부모 타입 참조로 다루는 업캐스팅이다. 실제 객체는 Child로 유지된다. 부모 타입에 선언되지 않은 자식 전용 메서드를 p로 바로 호출할 수는 없다.

(Child)p는 다운캐스팅이다. 실제 객체가 Child에 해당하면 가능하지만 실제 Parent 객체를 Child로 바꾸어 만들어 주지는 않는다. 호환되지 않으면 ClassCastException이다. instanceof로 타입 적합 여부를 검사할 수 있다.

과정으로 이해하기

  1. Parent p=new Child()에서 p는 부모형 참조, 대상 객체는 자식.
  2. p.f()가 오버라이딩된 인스턴스 메서드라면 자식 구현 실행.
  3. Parent p=new Parent(); (Child)p는 실행 중 예외.

답을 가리고 확인

오버로딩 선택은 실제 객체 타입으로 하는가?

확인 답안 보기

아니다. 인자의 컴파일 시 타입으로 시그니처를 정하고, 해당 인스턴스 메서드의 오버라이딩은 실제 객체 타입으로 정한다.

꼭 기억할 것

필드·static 선택은 선언 타입, 오버라이딩된 인스턴스 메서드는 실제 객체 타입.

헷갈리는 지점 캐스팅은 객체의 종류를 변환·재생성하는 작업이 아니다.

14

String 메서드와 StringBuilder

String은 불변이므로 substring·replace·toUpperCase는 결과를 새 문자열로 반환한다. substring(start,end)는 end를 제외한다. charAt(i)는 char 하나, indexOf는 처음 찾은 위치 또는 -1이다.

StringBuilder는 내부 문자 내용을 수정할 수 있다. append는 끝에 추가하고 reverse는 뒤집는다. String의 equals는 내용 비교, ==는 참조 비교다. 문자열 리터럴 풀은 일부 == 결과에 영향을 주지만 일반 내용 비교 규칙을 대체하지 않는다.

String s="abc";
s.toUpperCase();
StringBuilder b=new StringBuilder(s);
b.append("d").reverse();
System.out.print(s+" "+b);

과정으로 이해하기

  1. s는 결과를 재대입하지 않아 abc. b는 abcd를 만든 뒤 dcba로 수정. 출력 abc dcba.

답을 가리고 확인

"JAVA".indexOf("X")는?

확인 답안 보기

-1. 찾지 못한 경우.

꼭 기억할 것

"ABCDE".substring(1,4) → "BCD". charAt(0) → 'A'.

헷갈리는 지점 String의 length()와 배열의 length를 혼동하지 않는다.

15

예외의 전달·catch 순서·finally

try의 실행 중 예외가 생기면 그 지점 뒤 문장을 건너뛰고 대응하는 catch로 이동한다. catch가 없으면 호출자에게 전달된다. throws는 예외 발생 가능성 선언, throw는 실제 예외를 던지는 문장이다.

catch는 위에서 아래로 검사하므로 하위 타입을 먼저 둔다. 상위 Exception을 먼저 두고 뒤에 하위 예외 catch를 두면 도달할 수 없어 컴파일 오류다. finally는 정상 종료·반환·예외 경로에서 보통 실행되지만 JVM 강제 종료 같은 경우까지 보장하지 않는다.

과정으로 이해하기

  1. try에서 A 출력 후 예외 → B는 건너뜀.
  2. catch가 C 출력, finally가 D 출력, 이후 E 출력이라면 ACDE.

답을 가리고 확인

throw와 throws의 차이는?

확인 답안 보기

throw는 예외를 던짐, throws는 메서드 선언에서 발생 가능한 예외를 알림.

꼭 기억할 것

출력 순서는 try에서 실행한 부분 → 맞는 catch → finally → 이어지는 코드.

헷갈리는 지점 finally에서 return하면 앞의 반환·예외를 덮을 수 있다. 반환값을 확정한 시점과 finally의 부수효과를 구별한다.

16

컬렉션·제네릭·박싱

List는 순서와 중복을 허용하고 Set은 중복을 배제하며 Map은 키와 값의 대응이다. ArrayList는 배열 기반, LinkedList는 연결 구조 기반이다. HashSet의 순서는 보장하지 않으며 TreeSet은 정렬된 순서다. Map의 같은 키에 put하면 기존 값을 바꾼다.

제네릭 List<Integer>는 원소 타입을 제한한다. 기본형 int를 제네릭 인자로 직접 쓰지 않고 포장 클래스 Integer를 사용한다. int와 Integer 사이의 자동 변환은 박싱·언박싱이다. null을 int로 언박싱하면 NullPointerException이다.

java.util.List<Integer> a=new java.util.ArrayList<>();
a.add(10); a.add(20); a.add(10);
a.remove(1);
System.out.print(a);

과정으로 이해하기

  1. 위치 1의 20을 삭제해 [10, 10]. 값 1을 지우는 코드가 아니다.

답을 가리고 확인

List<int>를 쓸 수 있는가?

확인 답안 보기

없다. List<Integer>를 사용한다.

꼭 기억할 것

List remove(int)는 위치 삭제, remove(Object)는 값 삭제.

헷갈리는 지점 Integer 참조의 == 결과를 작은 값 캐싱에 기대 암기하지 않는다.

17

필드·static·인스턴스 메서드 판정표

상위 타입 변수에 하위 객체를 담았을 때 필드 접근과 static 메서드 선택은 참조 변수의 선언 타입을 기준으로 한다. 재정의된 인스턴스 메서드는 실제 객체 타입으로 결정한다. 오버로딩 후보 선택은 컴파일 시 인자 타입에 따른다.

답을 가리고 확인

상위 참조가 하위 객체를 가리킬 때 모든 멤버가 하위 것으로 선택되는가?

확인 답안 보기

아니다. 필드와 static 숨김은 선언 타입, 재정의 인스턴스 메서드는 실제 타입이다.

2026.10.14 재확인: Oracle Java 메서드 재정의·숨김

꼭 기억할 것

A x = new B(): x.field와 x.staticMethod()는 A, 재정의된 x.method()는 B.

헷갈리는 지점 static 메서드를 객체로 호출할 수는 있어도 다형적 오버라이딩이 되지는 않는다.

직접 풀어보기 18문제

모두 유형 연습을 위해 직접 만든 문제입니다. C 예제의 printf·strlen은 필요한 표준 헤더가 포함된 상황을 가정합니다. Java는 표시된 클래스·main 위치에서 실행합니다. 단답은 동의어가 있을 수 있어 자동 판정 대신 자기 채점을 사용합니다.

Java · 기본 · 창작 01미풀이

문자열 비교

출력은?

String a=new String("WEB");
String b=new String("WEB");
System.out.print((a==b)+" "+a.equals(b));
정답과 풀이 확인

정답 false true

a와 b는 별도로 생성한 객체이므로 ==는 false, String.equals는 내용 비교여서 true다.

해설과 비교해 직접 채점
Java · 응용 · 창작 02미풀이

필드와 메서드

main의 출력은?

class P { int x=3; int get(){return x;} }
class C extends P { int x=8; int get(){return x;} }
class Main { public static void main(String[] args) {
 P p=new C();
 System.out.print(p.x+" "+p.get());
}}
정답과 풀이 확인

정답 3 8

p.x는 선언 타입 P의 3. p.get()은 실제 객체 C의 메서드이므로 8.

해설과 비교해 직접 채점
Java · 기본 · 창작 03미풀이

부모 생성자

new C()를 실행할 때 출력은?

class P { P(){System.out.print("P");} }
class C extends P { C(){System.out.print("C");} }
정답과 풀이 확인

정답 PC

C 생성자의 본문 전에 부모 P 생성자가 먼저 실행된다.

해설과 비교해 직접 채점
Java · 기본 · 창작 04미풀이

공유 필드

출력은?

class Box {
 static int n=0; int k=0;
 Box(){n++;k++;}
}
// main 내부
Box a=new Box(); Box b=new Box();
System.out.print(Box.n+" "+a.k);
정답과 풀이 확인

정답 2 1

n은 클래스 공유값이라 객체 생성 두 번으로 2. a.k는 a 생성 시 한 번만 증가하여 1.

해설과 비교해 직접 채점
Java · 응용 · 창작 05미풀이

오버로드 선택

main에서 f(x)의 출력은?

static void f(Object x){System.out.print("O");}
static void f(String x){System.out.print("S");}
// main 내부
Object x="hello";
f(x);
정답과 풀이 확인

정답 O

x의 선언 타입이 Object이므로 f(Object)가 컴파일 시 선택된다.

해설과 비교해 직접 채점
Java · 기본 · 창작 06미풀이

문자열 덧셈

출력은?

System.out.print(2+3+"X"+2+3);
정답과 풀이 확인

정답 5X23

2+3은 먼저 계산되어 5, 그 뒤 X부터 문자열 결합으로 2와 3이 각각 이어진다.

해설과 비교해 직접 채점
Java · 응용 · 창작 07미풀이

참조값 복사

main의 출력은?

static void f(int[] a) { a[0]=9; a=new int[]{7}; }
// main 내부
int[] x={1}; f(x);
System.out.print(x[0]);
정답과 풀이 확인

정답 9

메서드의 a[0]=9는 원본 배열을 수정한다. 이후 a=new int[]{7}은 지역 매개변수만 다른 배열로 바꾼다.

해설과 비교해 직접 채점
Java · 기본 · 창작 08미풀이

향상된 for

출력은?

int[] a={2,4};
for(int x:a) x*=3;
System.out.print(a[0]+" "+a[1]);
정답과 풀이 확인

정답 2 4

루프 변수 x는 각 int 원소의 복사본이다. x*=3이 배열에 반영되지 않는다.

해설과 비교해 직접 채점
Java · 기본 · 창작 09미풀이

예외 흐름

출력은?

try {
 System.out.print("A");
 int z=0; int n=5/z;
 System.out.print("B");
} catch(ArithmeticException e) {
 System.out.print("C");
} finally {System.out.print("D");}
정답과 풀이 확인

정답 ACD

A 출력 후 정수 0 나눗셈으로 ArithmeticException이 발생한다. B는 건너뛰고 catch의 C, finally의 D.

해설과 비교해 직접 채점
Java · 기본 · 창작 10미풀이

재귀 계산

f(5)의 값은?

static int f(int n) {
 if(n<2) return 1;
 return f(n-1)+f(n-2);
}
정답과 풀이 확인

정답 8

f(0)=f(1)=1, 이후 f(2)=2,f(3)=3,f(4)=5,f(5)=8이다.

해설과 비교해 직접 채점
Java · 심화 · 창작 11미풀이

초기화 순서의 함정

new C()의 출력은?

class P { P(){show();} void show(){} }
class C extends P {
 int x=7;
 void show(){System.out.print(x);}
}
정답과 풀이 확인

정답 0

P 생성자에서 C의 show가 동적 호출된다. 이 시점에는 C의 x=7 초기화 전이므로 기본값 0이다.

해설과 비교해 직접 채점
Java · 응용 · 창작 12미풀이

정적 메서드 숨김

출력은?

class P {static String f(){return "P";}}
class C extends P {static String f(){return "C";}}
// main 내부
P p=new C();
System.out.print(p.f());
정답과 풀이 확인

정답 P

static 메서드는 참조변수의 선언 타입 P 기준으로 선택된다. 실제 객체가 C인 것과 무관하다.

해설과 비교해 직접 채점
Java · 기본 · 창작 13미풀이

디폴트 메서드 재정의

출력은?

interface Greet { default String hi(){ return "I"; } }
class C implements Greet { public String hi(){ return "C"; } }
// main 내부
Greet g=new C();
System.out.print(g.hi());
정답과 풀이 확인

정답 C

구현 클래스가 default 메서드를 재정의했으므로 인터페이스의 기본 구현 대신 재정의한 hi()가 호출된다.

해설과 비교해 직접 채점
Java · 기본 · 창작 14미풀이

디폴트 메서드 상속

재정의 없이 인터페이스를 구현하면?

interface Greet2 { default String hi(){ return "Hello"; } }
class D implements Greet2 { }
// main 내부
Greet2 g=new D();
System.out.print(g.hi());
정답과 풀이 확인

정답 Hello

구현 클래스 D가 hi()를 재정의하지 않았으므로 인터페이스의 default 본문이 그대로 실행된다.

해설과 비교해 직접 채점
Java · 응용 · 창작 15미풀이

Java 증감 평가 순서

출력은?

int x=2; int y=x++ + ++x;
System.out.print(x+" "+y);
정답과 풀이 확인

정답 4 6

왼쪽 후위는 2를 사용하고 x=3, 오른쪽 전위는 x=4 후 4 사용.

해설과 비교해 직접 채점
Java · 기본 · 창작 16미풀이

문자열 결과 재대입

출력은?

String s="abc"; s.toUpperCase();
System.out.print(s+" "+s.substring(1));
정답과 풀이 확인

정답 abc bc

toUpperCase 반환을 저장하지 않아 s는 abc. substring(1)은 bc.

해설과 비교해 직접 채점
Java · 기본 · 창작 17미풀이

final과 배열

출력은?

final int[] a={1,2}; a[0]=8;
System.out.print(a[0]);
정답과 풀이 확인

정답 8

final은 참조 재대입을 금지하며 원소 변경은 가능하다.

해설과 비교해 직접 채점
Java · 응용 · 창작 18미풀이

선언 타입과 실제 타입 혼합

출력 결과를 쓰시오.

class A { int n=1; static String s(){return "A";} String f(){return "A";} }
class B extends A { int n=2; static String s(){return "B";} String f(){return "B";} }
// main 내부
A x=new B();
System.out.print(x.n+" "+x.s()+" "+x.f());
정답과 풀이 확인

정답 1 A B

필드 n과 static s는 선언 타입 A, 인스턴스 f는 실제 객체 B 기준이다.

해설과 비교해 직접 채점

기출과 연결하기

2024년 1회 · Java 객체 공유·C 비트 연산·응집도

2024년 2회 · Java 참조 비교·반정규화·DML·릴레이션 크기

2024년 3회 · 문자열 비교·Python 슬라이싱·LRU·상속·C 연결 구조

2025년 2회 · 인덱스 접근·속성 용어·언어 실행 추적

2025년 3회 · 패키지 다이어그램·조건 커버리지·C/Java·SQL

2026년 2회 · 구조체·상속·딕셔너리·외부 조인·상관 서브쿼리·SRT·서브넷

문법 문서·출처·확인 범위 보기