| 구분 | 내용 |
|---|---|
| ( ) | - 회선교환 방식과 데이터그램 방식의 장점을 결합한 통신 기술이다. - 처음 패킷으로 최적의 경로를 고정하고, 경로가 고정되면 그 다음은 패킷으로 나누어 고속으로 전송할 수 있다. - 통신기술에는 ATM이 있으며, 정해진 시간 안이나 다량의 데이터를 연속으로 보낼 때 적합하다. |
| ( ) | - 패킷교환 방식으로 동작하면서 IP 주소를 사용하는 인터넷을 의미한다. - 각 전송패킷을 미리 정해진 경로 없이 독립적으로 처리하여 교환하는 방식이다. - 특정 교환기의 고장 시 모든 패킷을 잃어버리는 가상회선과 달리, 그 경로를 피해서 전송할 수 있으므로 더욱 신뢰가 가능하다. - 짧은 메시지의 패킷들을 전송할 때 효과적이고 재정렬 기능이 필요하다. |
정답
- 가상회선, 데이터그램
- 2계층(데이터링크 계층)에서 구현되는 터널링 기술 중 하나
- L2F와 PPTP가 결합된 프로토콜로 VPN과 인터넷 서비스 제공자(ISP)가 이용
- IPsec을 함께 사용하면 PPTP보다 훨씬 안전하지만 보안보다 익명화에 더 적합
정답
- L2TP

( )은/는 복잡한 시스템을 개발하기 쉽도록 클래스나 객체을 조합하는 패턴에 속하며,
대리라는 이름으로도 불린다. 내부에서는 객체 간의 복잡한 관계를 단순하게 정리해 주고,
외부에서는 객체의 세부인 내용을 숨기는 역할을 한다.
| 패턴 분류 | 주요 패턴 | 키워드 | 별칭(다른 이름) |
|---|---|---|---|
| 생성(Creational) | 싱글톤 (Singleton) | 하나의 인스턴스 | - |
| 팩토리 메서드 (Factory Method) | 하나의 객체 생성, 객체 생성을 분리, 가상 생성자 | 가상 생성자 패턴(Virtual Constructor Pattern) | |
| 추상 팩토리 (Abstract Factory) | 연관된 서브 클래스 묶어 한 번에 교체, 키트 패턴, 추상적 표현 | 키트 패턴(Kit Pattern) | |
| 빌더 (Builder) | 단계적으로 복잡한 객체 조립 | 조립자 패턴(Assembler Pattern) | |
| 프로토타입 (Prototype) | 기존 객체를 복사하여 생성 | 복제 패턴(Clone Pattern) | |
| 구조(Structural) | 어댑터 (Adapter) | 다른 인터페이스 통일, 인터페이스 변환, 순차적 접근 가능, 호환성 | 래퍼 패턴(Wrapper Pattern) |
| 프록시 (Proxy) | 객체 대신 요청 수행, 접근 제어, 대리 | 대리자 패턴(Representative Pattern) | |
| 퍼사드 (Facade) | 복잡한 서브시스템을 간단히 제공 | 통합 인터페이스 패턴(Unified Interface Pattern) | |
| 브릿지 (Bridge) | 구현부와 추상층 분리, 두 개의 별도 클래스 계층 | 핸들과 바디 패턴(Handle and Body Pattern) | |
| 데코레이터 (Decorator) | 기능을 동적으로 추가 | 포장지 패턴(Wrapper Pattern) | |
| 컴포지트 (Composite) | 폴더와 파일 합성, 복합 객체 안 복합 객체 | 부분-전체 패턴 | |
| 플라이웨이트 (Flyweight) | 인스턴스 공유하여 메모리 절약 | 경량 패턴 | |
| 행위(Behavioral) | 옵서버 (Observer) | 상태 변화 감시, 일대다 의존성, 이벤트 수신 | 퍼블리셔-서브스크라이버(Publisher-Subscriber Pattern) |
| 전략 (Strategy) | 알고리즘 교체 가능, 런타임에 교체 | 정책 패턴(Policy Pattern) | |
| 책임 연쇄 (Chain of Responsibility) | 요청 해결될 때까지 책임 넘어감 | ||
| 커맨드 (Command) | 명령어 하나로 합침, 추상클래스/구체 클래스 | 동작 캡슐화 패턴 | |
| 인터프리터 (Interpreter) | 언어에 문법 표현 정의 | ||
| 반복자 (Iterator) | 같은 명령 반복, 내부 표현 방법 노출 없이 순차적 접근 가능 | 커서 패턴 | |
| 중재자 (Mediator) | 복잡한 상호작용을 객체 정의, 결합도 감소 | 조정자 패턴 | |
| 메멘토 (Memento) | 특정 시점의 상태로 돌릴 수 있음 | 스냅샷 패턴 | |
| 상태 (state) | 객체 상태에 따라 동일 동작을 다르게 처리 | 오토마타 패턴 | |
| 템플릿 메소드 (Template Method) | 상위 클래스에서 골격 정의, 하위 클래스에서 세부 처리 구체화 | ||
| 방문자 (Visitor) | 처리 기능을 별도 클래스로 구성 |
정답
- Proxy

○도메인 ○차수 ○속성 ○튜플
○디그리 ○카디널리티 ○릴레이션 스키마 ○릴레이션 인스턴스
| 용어 | 의미 | else |
|---|---|---|
| 릴레이션 | 테이블 구조를 가진 데이터 집합 | 관계형 DB의 핵심 단위 |
| 속성 | 릴레이션의 열 | 필드 |
| 튜플 | 릴레이션의 행 | 레코드 |
| 도메인 | 속성이 가질 수 있는 값의 범위 | ex) 나이 -> 정수 |
| 차수 | 릴레이션의 속성 개수 | 열의 수 |
| 카디널리티 | 릴레이션의 튜플 개수 | 행의 수 |
| 릴레이션 인스턴스 | 실제 데이터가 저장된 릴레이션 | 데이터는 변함, 구조는 고정 |
| 릴레이션 스키마 | 릴레이션의 구조(정의) | 속성명 + 도메인+ 제약조건 등 |
| 용어 | 의미 | 비고 |
|---|---|---|
| 기본키 | 튜플을 유일하게 식별 | 중복X, NULL X |
| 후보키 | 기본키 후보가 되는 속성들 | 유일성 O |
| 대체키 | 후보키 중 기본키로 선택되지 않은 키 | |
| 외래키 | 다른 릴레이션의 기본키를 참조하는 속성 | 참조 무결성 제약과 관련 |
| 슈퍼키 | 튜플을 식별할 수 있는 모든 속성의 집합 | 최소성을 만족하지 않아도 됨 |
정답
- ① 튜플
- ② 릴레이션 인스턴스
- ③ 카디널리티
a = {'한국', '중국', '일본'}
a.add('베트남')
a.add('중국')
a.remove('일본')
a.update({'홍콩', '한국', '태국'})
print(a)
a.add('베트남') : 베트남 추가a.add('중국') : 중국은 중복이라 추가Xa.remove('일본') : 일본 삭제a.update({'홍콩', '한국', '태국'})print(a){'베트남', '중국', '태국', '홍콩', '한국'} 출력됨set 은 중복 불가, 순서 없음| 자료형 | 설명 | 예시 | 중복 허용 여부 | 순서 유지 여부 | 변경 가능 여부 | 주요 메소드 |
|---|---|---|---|---|---|---|
| list | 순서 있는 값들의 모음 | [1, 2, 3] | 중복 허용 | 순서 유지 | 변경 가능 | append, pop |
| tuple | 변경 불가한 리스트 | (1, 2, 3) | 중복 허용 | 순서 유지 | 변경 불가 | - |
| set | 중복 없는 값들의 집합 | {1, 2, 3} | 중복 불가 | 순서 없음 | 변경 가능 | add, remove, update |
| dictionary | 키-값 쌍의 집합 | {'a': 1, 'b': 2} | 키 중복 불가 | 파이썬 3.7부터 입력 순서 유지 | 변경 가능 | keys, values, items |
정답
{'베트남', '중국', '태국', '홍콩', '한국'}

[조건]
- WHERE사용하지 말아야 한다.
- SELECT절에 별칭을 사용하여 작성해야 한다.
- SQL 구문 마지막에 세미콜론(;)은 생락 가능하다.
- 반드시 GROUP BY와 HAVING 을 사용해야 한다.
- 집계 함수를 사용해야 한다.
성적 테이블 불러오기과목이름 기준으로 묶기 (GROUP BY)MIN(점수), MAX(점수) 계산AVG(점수) 계산하여, HAVING)| SQL 절 | 역할 | 내용 |
|---|---|---|
SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 | 결과에 출력할 컬럼 선택 | 각 과목의 이름과 해당 과목의 최소/최대 점수를 가져옴 |
FROM 성적 | 조회할 테이블 지정 | 테이블 이름 : 성적 |
GROUP BY 과목이름 | 그룹핑 기준 설정 | 과목이름을 기준으로 데이터를 묶음 |
HAVING AVG(점수) >= 90 | 그룹핑 결과에 조건 부여 | 과목별 평균 점수가 90 이상인 것만 선택 |
GROUP BY SELECT에 나오는 컬럼은 GROUP BY에 포함되거나, 집계 함수를 통해 나와야 함| 함수 | 역할 |
|---|---|
COUNT() | 데이터 개수 세기 |
SUM() | 합계 구하기 |
AVG() | 평균 구하기 |
MIN() | 최소값 구하기 |
MAX() | 최대값 구하기 |
HAVINGGROUP BY 로 만들어진 각 그룹에 조건을 걸 때 사용WHERE과 유사하나, HAVING은 그룹에 대해 필터링HAVING에서는 집계 함수 사용 가능정답
SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수
FROM 성적
GROUP BY 과목이름 HAVING AVG(점수) >= 90;

| 구분 | 설명 | 관점 |
|---|---|---|
| 외부 스키마 | 사용자가 보는 데이터베이스의 일부 | 사용자 관점 |
| 개념 스키마 | 데이터베이스의 전체 논리적 구조, 테이블 관계 정의 | 조직(설계자) 관점 |
| 내부 스키마 | 데이터가 실제로 물리적 저장되는 방법을 정의 | 저장장치 관점 |
정답
- 외부 스키마
- 개념 스키마
- 내부 스키마
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 obj = new Child();
System.out.println(obj.getX());
}
}
Child()Child(int x)Parent()Parent(int x)getX() 호출 : Parent의 x 반환 -> 500Child의 생성자가 호출될 때, 먼저 부모 클래스의 생성자 호출이 일어남Child(int x) 생성자가 호출될 때 암묵적으로 super() 가 호출됨Parent() 생성자 실행| 개념 | 설명 |
|---|---|
| this() | 같은 클래스 내 다른 생성자 호출할 때 사용 |
| super() | 부모 클래스의 생성자 호출할 때 사용 (자식 생성자 시작 전에 항상 부모 생성자가 호출됨) |
| 필드 섀도잉 | 부모 클래스와 자식 클래스가 동일한 이름의 필드를 가질 때, 서로 별개의 필드로 존재 |
| 메소드 오버라이딩 | 부모 메소드를 자식이 재정의하는 것 |
| 생성자 호출 순서 | 자식 생성자가 실행되기 전 반드시 부모 생성자가 먼저 호출됨 |
정답
- 500