프로그래밍 8 · SQL·DB 4 · 보안 3 · 네트워크 2 · SW공학 2 · AJAX 1. 자바 생성자 체인과 추상 클래스, 비트 분해 빈칸이 갈림길이다
왜 이 장을 하나
2023년 1회는 코드 8문항이 전부 짧다. 대신 static 카운터의 출력 순서, this(500) 생성자 체인, 인자 없는 getName() 처럼 한 줄의 규칙이 답을 가른다. 용어 12문항은 2회분 진단보다 쉬운 편이라 여기서 15문항 아래면 용어 장을 다시 봐야 한다.
다루는 것2023년 1회 20문항 · 복원본
시계150분 · 실제 시험과 같다
끝나면문항마다 가는 장이 표로 나온다
01푸는 법
왜 이걸 하나 — 세트는 시험장과 같은 조건에서만 숫자가 된다. 조건은 E01 과 같다.
규칙은 E01 진단의 01절 그대로다. 시작을 누르면 150분이 돌고, 1회독 100분 · 2회독 40분 · 검토 10분으로 나눈다. 한 문항에 5분이 넘으면 답 칸을 비우고 넘어가며, 정답은 20문항을 다 적은 뒤에 연다.
이 회차의 배점은 프로그래밍 8문항(40점) · SQL·DB 4문항(20점) · 보안 3문항(15점) · 네트워크 2문항(10점) · SW공학 2문항(10점) · AJAX 1문항(5점)이다. 코드 문항 수만큼 5분씩을 1회독에서 먼저 떼어 두고, 남는 시간을 용어에 쓴다. 용어는 아는 것을 바로 적고 모르는 것은 비운다 — 용어에서 고민하는 시간이 코드 한 문항의 값이다.
자가 판정은 답안지에 그대로 적었을 때 채점자가 맞다고 할 것인가 하나다. 철자 하나, 줄바꿈 하나, 기호 대신 이름이면 틀렸다를 누른다. 후하게 준 5점은 시험장에서 사라진다.
02실전 세트
왜 이걸 하나 — 20문항을 한 번에 150분 안에 푸는 것 자체가 연습이다. 분야 장의 문제와 같은 문항이어도 조건이 다르다.
시작을 누르면 시계가 돌고 화면을 닫아도 이어진다. 다 적은 뒤 문항마다 정답 보기 → 맞았다 · 틀렸다를 누르면 위 막대에 점수와 분야별 결과가 모인다. 이 세트에서 채점한 기록은 분야 장의 같은 문항에도 그대로 보인다.
2023-1회 · 1번Java
다음 Java 프로그램의 실행 결과를 쓰시오.
class StaticData {
public int value = 20;
static int count = 0;
}
public class Main {
public static void main(String[] args) {
int value = 10;
StaticData.count = value;
StaticData item = new StaticData();
System.out.println(StaticData.count++);
System.out.println(item.count);
System.out.println(value);
System.out.print(item.value);
}
}
정답10 11 10 20
static 변수 b는 모든 객체가 공유하는 "공용 게시판"입니다. Static.b=a로 b=10이 되고, Static.b++는 10을 출력한 뒤 11로 증가. st.b는 같은 static이므로 11. 지역변수 a는 10, st.a는 인스턴스 변수 초기값 20. 복원된 코드를 실행해 위 출력을 그대로 얻었다. (JDK 17) 그랜드라이프 가답안 표기는 「10111020」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
배열 이름 a와 포인터 p는 같은 곳(문자열 시작 주소)을 가리키는 쪽지입니다. %s는 \0 전까지 전부 출력, *p와 *a는 첫 글자 'A'. for문으로 한 글자씩 출력해도 결국 Art. 복원된 코드를 실행해 위 출력을 그대로 얻었다. (gcc(도커 alpine)) 그랜드라이프 가답안 표기는 「ArtAAArtArt」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2023-1회 · 3번C
다음 C 프로그램의 실행 결과를 쓰시오.
#include <stdio.h>
int main(void) {
char *left = "qwer";
char *right = "qwtety";
for (int i = 0; left[i] != '\0'; i++) {
for (int j = 0; right[j] != '\0'; j++) {
if (left[i] == right[j]) {
printf("%c", left[i]);
}
}
}
return 0;
}
정답qwe
a의 q,w,e,r을 하나씩 들고 b에서 찾습니다. q(있음), w(있음), e(있음), r(없음) → "qwe". 이중 반복문은 "명단 대조 작업"으로 생각하면 됩니다. 복원된 코드를 실행해 위 출력을 그대로 얻었다. (gcc(도커 alpine)) 그랜드라이프 가답안 표기는 「qwe」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2023-1회 · 4번웹기술
JavaScript와 XML을 이용해 웹 페이지 전체를 새로고침하지 않고 서버와 비동기적으로 데이터를 교환하는 기술은? (Asynchronous JavaScript and XML)
정답AJAX
"페이지 전체를 다시 인쇄하지 않고 필요한 칸만 고쳐 쓰는 기술". 지도 앱에서 화면 이동 시 전체 새로고침 없이 지도만 갱신되는 것이 대표 예입니다.
2023-1회 · 5번네트워크
패킷교환 방식 2가지를 쓰시오. (하나는 연결형으로 경로를 미리 설정, 하나는 비연결형으로 각 패킷이 독립적으로 전송)
정답가상 회선 방식, 데이터그램 방식
가상 회선 = "미리 예약한 관광버스 노선"(순서 보장), 데이터그램 = "각자 택시 타고 알아서 도착"(순서 뒤바뀔 수 있음). 2024년 2회에 동일 개념 재출제!
2023-1회 · 6번보안
시스코의 L2F와 마이크로소프트의 PPTP를 조합한 VPN 터널링 프로토콜로, 자체 암호화 기능이 없어 IPsec과 함께 사용되는 것은?
정답L2TP
L2F + PPTP = L2TP(Layer 2 Tunneling Protocol). "터널만 뚫고 잠금장치(암호화)는 없어서 IPsec이라는 자물쇠를 함께 채운다"고 기억하세요.
2023-1회 · 7번보안
22번 포트를 사용하며, 암호화된 원격 로그인·원격 명령 실행·파일 전송을 제공하는 보안 프로토콜은?
정답SSH
Telnet(23번)의 "통화 내용이 다 들리는 스피커폰"을 암호화 이어폰으로 바꾼 것이 SSH(22번). 포트 번호 22와 함께 세트로 암기.
2023-1회 · 8번보안
악성코드 3종을 구분하시오. ㄱ) 자가 복제하며 네트워크로 스스로 전파됨 ㄴ) 정상 프로그램으로 위장해 숨어들며 자가 복제하지 않음 ㄷ) 자가 복제는 가능하나 스스로 전파되지 못하고 숙주 파일이 필요함
정답ㄱ 웜(Worm) / ㄴ 트로이 목마 / ㄷ 바이러스
웜 = "스스로 번식하고 스스로 이사 다니는 벌레", 바이러스 = "숙주(파일)가 있어야 사는 병원체", 트로이 목마 = "선물 상자로 위장한 병사"(복제 능력 없음). 전파 능력의 유무로 구분!
2023-1회 · 9번C
다음 C 프로그램에서 ①과 ②에 들어갈 연산자와 값을 순서대로 쓰시오.
#include <stdio.h>
int main(void) {
int input = 101110;
int place = 1;
int sum = 0;
while (input != 0) {
sum += (input ① 10) * place;
place *= ②;
input /= 10;
}
printf("%d", sum);
return 0;
}
정답① %, ② 2
input%10은 "맨 오른쪽 자릿수 한 개 떼기", input/10은 "뗀 자리 버리기". 자릿수마다 2의 거듭제곱(di)을 곱해 더하면 10진수가 됩니다. n%10, n/10 콤보는 코드 문제 단골 부품! 빈칸에 답을 넣어 실행하면 출력이 「46」 로 나오는 것을 확인했다. (gcc(도커 alpine)) 그랜드라이프 가답안 표기는 「① %, ② 2」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2023-1회 · 10번네트워크
IP 패킷 전송 중 오류 발생 시 오류 정보를 보고하고 진단하는 프로토콜로, ping 명령이 사용하는 것은?
정답ICMP
IP는 "말없이 배달만 하는 택배기사"라 문제가 생겨도 보고를 못 합니다. ICMP가 "배달 실패 사유서"를 써주는 역할. ping = ICMP Echo 요청/응답.
2023-1회 · 11번디자인패턴
특정 객체에 대한 접근을 제어하기 위해 그 객체의 대리자(surrogate)를 두어 원래 객체의 작업을 대신 처리하게 하는 GoF 디자인 패턴은?
정답Proxy (프록시)
"연예인(실제 객체)에게 직접 연락 못 하고 매니저(프록시)를 거친다". 키워드 "대리"가 보이면 무조건 Proxy.
2023-1회 · 12번DB
관계형 DB 용어: ① 릴레이션의 행(Row)에 해당하는 것 ② 실제 저장된 값(튜플)들의 집합 ③ 튜플의 개수
학생 테이블에서 이름이 '민수'인 튜플을 삭제하는 SQL문을 작성하시오. (구문 끝에 세미콜론 포함)
정답DELETE FROM 학생 WHERE 이름 = '민수';
DELETE는 FROM과 세트, 문자열은 작은따옴표. WHERE를 빼먹으면 전체 삭제가 되므로 실전에서도 감점. DELETE 구문은 3년간 2회 이상 출제된 필수 암기 문법.
2023-1회 · 14번C
다음 C 프로그램에서 ①과 ②에 들어갈 변수명을 순서대로 쓰시오.
#include <stdio.h>
void swap(int *arr, int idx1, int idx2) {
int temp = arr[idx1];
arr[idx1] = arr[idx2];
arr[①] = temp;
}
void bubbleSort(int *arr, int length) {
for (int i = 0; i < length - 1; i++) {
for (int j = 0; j < length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
}
}
}
int main(void) {
int values[] = {
85, 75, 50, 100, 95
};
int size = 5;
bubbleSort(values, ②);
return 0;
}
정답① idx2, ② size
swap은 "두 컵의 물을 빈 컵(t) 하나로 맞바꾸기" — t에 A를 붓고, A에 B를 붓고, B에 t를 부으면 끝. 마지막 단계가 ①. 정렬 함수엔 배열과 크기를 전달하므로 ②는 nx. 확인 방법: 컴파일만 확인. (gcc(도커 alpine)) 그랜드라이프 가답안 표기는 「① idx2, ② size」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2023-1회 · 15번Python
다음 Python 프로그램의 실행 결과에 남는 집합 원소를 쓰시오. 원소의 출력 순서는 고려하지 않는다.
세트(set)는 "중복을 자동으로 거르는 주머니". add('중국')은 이미 있어서 무시, remove('일본')로 제거, update는 여러 개 한꺼번에 추가(중복 '한국'은 무시). 최종 5개 원소. 확인 방법: 집합 원소 비교(순서 무관). (Python 3.12) 그랜드라이프 가답안 표기는 「한국, 중국, 베트남, 홍콩, 태국(순서 무관)」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2023-1회 · 16번SQL
성적 테이블에서 과목이름별 최소점수·최대점수를 구하되, 평균 점수가 90 이상인 과목만 조회하는 SQL을 작성하시오. (컬럼 별칭: 최소점수, 최대점수)
정답SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 성적 GROUP BY 과목이름 HAVING AVG(점수) >= 90;
"과목별로 묶어라"=GROUP BY, "묶음의 평균 조건"=HAVING(WHERE 아님!). 그룹 조건에 WHERE를 쓰면 오답 — WHERE는 묶기 전 개별 행, HAVING은 묶은 후 그룹 조건입니다.
2023-1회 · 17번Java
다음 Java 프로그램의 실행 결과를 쓰시오.
abstract class Vehicle {
String name;
abstract public String getName(String value);
public String getName() {
return "Vehicle name: " + name;
}
}
class Car extends Vehicle {
public Car(String value) {
name = value;
}
public String getName(String value) {
return "Car name: " + value;
}
}
public class Main {
public static void main(String[] args) {
Vehicle vehicle = new Car("Spark");
System.out.println(vehicle.getName());
}
}
정답Vehicle name: Spark
자식 객체 생성 시 부모 생성자가 먼저 실행되지만, 오버라이딩된 메서드는 항상 자식 것이 실행됩니다(동적 바인딩). "포장은 부모여도 행동은 내용물(자식)이 한다." 복원된 코드를 실행해 위 출력을 그대로 얻었다. (JDK 17) 그랜드라이프 가답안 표기는 「Vehicle name: Spark」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2023-1회 · 18번DB
스키마 3계층: ① 사용자 관점의 뷰 ② 조직 전체의 논리적 구조 ③ 물리적 저장 구조
정답① 외부 스키마 ② 개념 스키마 ③ 내부 스키마
아파트로 비유: 외부=각 세대에서 보는 우리 집 구조, 개념=전체 설계도, 내부=배관·전기 배선도. "외개내" 순서로 암기.
2023-1회 · 19번테스트
다음 제어 흐름에서 분기 커버리지를 만족하도록 두 개의 실행 경로를 쓰시오.
제어 흐름도(그림을 표로 옮김)
노드
내용
다음
1
POINTER = FALSE
2
2
X > K ?
YES → 3, NO → 4
3
POINTER = TRUE
4
4
X = X + 2
5
5
CALL SUB(X, POINTER, RESULT)
6
6
RESULT > 1 ?
YES → 1, NO → 7
7
PRINT RESULT
끝
정답1234561, 124567 (또는 1234567, 124561)
결정 노드는 2(X > K)와 6(RESULT > 1) 둘이고, 분기 커버리지는 각 결정의 참 · 거짓을 한 번씩 지나면 된다. 1234561 은 2 의 YES(→3)와 6 의 YES(→1)를, 124567 은 2 의 NO(→4)와 6 의 NO(→7)를 지나 네 분기가 다 덮인다. 6 에서 방향을 서로 바꾼 1234567 · 124561 도 같은 기준을 만족한다. 경로는 노드 번호를 이어 적고, 6 에서 1 로 돌아간 경로는 1 로 끝난다. 2025-2회 11번에 같은 흐름도가 다시 나왔다. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
2023-1회 · 20번Java
다음 Java 프로그램의 실행 결과를 쓰시오.
class Parent {
int x = 100;
Parent() {
this(500);
}
Parent(int x) {
this.x = x;
}
int getX() {
return x;
}
}
class Child extends Parent {
int x = 4000;
Child() {
this(5000);
}
Child(int x) {
this.x = x;
}
}
public class Main {
public static void main(String[] args) {
Child item = new Child();
System.out.println(item.getX());
}
}
정답500
this(값)은 "같은 클래스의 다른 생성자에게 일을 넘기는 것". 생성자 체인을 따라가며 마지막에 x에 무엇이 저장되는지 추적하면 됩니다. 복원된 코드를 실행해 위 출력을 그대로 얻었다. (JDK 17) 그랜드라이프 가답안 표기는 「500」. 복원 출처는 grandlife.co.kr 회차별 복원 페이지(2026-09-14 대조). 공식 원문이 아니라 문장·변수명·값이 실제와 다를 수 있고, 문항 번호도 복원본마다 다르다.
03채점 뒤 할 일
왜 이걸 하나 — 점수보다 어느 장으로 돌아가느냐가 결과다. 문항마다 가는 장이 정해져 있다.
코드 8문항 중 C 4 · Java 3 · Python 1 이다. 빈칸 채우기가 둘(9번 자릿수 분해, 14번 버블 정렬)이라 코드를 끝까지 읽기 전에 빈칸부터 채우려는 습관을 경계한다. 빈칸은 그 줄이 무엇을 하려는지 앞뒤 줄이 말해 준다.
Java 세 문항이 전부 클래스 규칙이다. 1번은 static 필드가 인스턴스 사이에 공유되고 count++ 가 값을 먼저 찍는다는 것, 17번은 인자 없는 getName() 이 부모 것 하나뿐이라 오버라이딩이 아니라는 것, 20번은 this(500) 이 같은 클래스의 다른 생성자를 부른다는 것이다. 셋 다 E05 · E06 의 03절 첫 그림이다.
용어 12문항은 보안 3(L2TP · SSH · 악성코드 3종) · 네트워크 2(패킷 교환 · ICMP) · DB 4(용어 3칸 · DELETE · GROUP BY HAVING · 스키마) · 디자인 패턴(Proxy) · 커버리지 경로 · AJAX 다. 19번 분기 커버리지는 경로 두 개를 적는 문제라 부분 점수가 있다.
문항마다 가는 장
틀린 문항의 「가는 장」을 열면 그 문항이 04절에 그대로 있고, 앞뒤로 같은 꼴의 문항이 붙어 있다. 몰라서 틀렸으면 그 장 03절부터, 알았는데 틀렸으면 05절만 읽는다. 판정 기준은 E01 의 03절 표와 같다.