프로그래밍 언어 활용
목차 23
프로그래밍 언어 활용은 언어가 어떻게 생겼고(세대·분류) 어떻게 기계어로 번역되며(번역기) 어떤 사고방식으로 짜이는지(패러다임)를 한눈에 조감하는 단원이다. 깊이 파기보다 키워드 매칭·함정 소거가 핵심으로, 매 회차 1~2문항이 안정적으로 나오는 효자 영역이다. 특히 스크립트 언어 고르기와 컴파일러 vs 인터프리터 8행 분별은 만나면 반드시 맞춰야 한다. 코드 추적은 39강 C언어부터 본격화되고, 38강은 이론·분류 지도다.
핵심 암기: 언어 4세대 ★기어고초★(기계어·어셈블리어·고급·초고급) · 3대 번역기 ★컴인어★(컴파일러·인터프리터·어셈블러) · 선정 5기준 ★범적효이친★(범용·적정·효율·이식·친밀) · 사용 목적 6분류 ★범과사인시스★ · 패러다임 4대장 ★절객함논★(절차·객체지향·함수형·논리형) · 저급은 기계어·어셈블리어 둘뿐 · C는 절차적 · Java는 하이브리드 · Python은 인터프리터·동적 타입
PART A — 언어 정의와 4세대
프로그래밍 언어란 — 프로그램 vs 언어 ·언어 정의·
[정의] 프로그래밍 언어 = 사람이 컴퓨터에 작업 절차를 알려주기 위한 기호 체계. 한 줄로 줄이면 사람과 기계 사이의 공용어다. 프로그램은 그 언어로 구현한 명령어 + 데이터의 집합(결과물).
[표] 프로그램 ↔ 언어 분별
| 용어 | 정의 | 한 줄 |
|---|---|---|
| 프로그래밍 언어 | 프로그램 작성을 위한 기호 체계 | 도구 |
| 프로그램 | 언어로 구현한 명령어 + 데이터 집합 | 결과물 |
💡 메뉴판(언어)이 있어야 주문이 되고, 주문이 있어야 음식(프로그램)이 나온다 — 언어는 도구, 프로그램은 결과물.
🔑 암기 "언어 = 도구(기호 체계) / 프로그램 = 결과물(명령어+데이터)"
⚠️ 함정 "프로그램 = 기호 체계 / 언어 = 명령어 집합" ❌(→ 자리 바꿔치기·언어가 기호 체계·프로그램이 결과물).
🎯 빈출 용어 정의 매칭. 간헐 출제지만 이후 분류의 전제 용어.
언어 4세대 — ★기어고초★ ·세대·시험 1순위·
[정의] 언어의 발전 단계를 4세대로 묶은 두음 = ★기어고초★. 1세대 기계어 → 2세대 어셈블리어 → 3세대 고급 언어 → 4세대 초고급 언어.
[표] 4세대 + 대표
| 글자 | 세대 | 이름 | 대표 | 한 줄 |
|---|---|---|---|---|
| 기 | 1세대 | 기계어 | 0과 1 | CPU 직접 이해·번역기 0개 |
| 어 | 2세대 | 어셈블리어 | MOV·ADD | Mnemonic·어셈블러로 1:1 |
| 고 | 3세대 | 고급 언어 | FORTRAN·C·Java·Python | 컴파일러/인터프리터로 번역 |
| 초 | 4세대 | 초고급 언어 | SQL·보고서 생성기 | 비절차적·"무엇을(WHAT)"만 |
💡 4세대는 "어떻게(HOW)"가 아니라 "무엇을(WHAT)"만 적는 언어다. SELECT * FROM members WHERE age > 30처럼 원하는 결과만 말하면 처리는 시스템이 알아서 한다 — 비절차적·사용자 중심·초고급은 모두 같은 4세대를 가리키는 세 이름.
🔑 암기 "★기어고초★ — 기계어·어셈블리어·고급·초고급. 4글자 순서를 벗어나면 전부 함정"
⚠️ 함정 "4세대 = 어셈블리어" ❌(→ 어셈블리어는 2세대·매년 1순위 함정) / "3세대 = SQL" ❌(→ SQL은 4세대) / "1세대 = FORTRAN" ❌(→ FORTRAN은 3세대).
🎯 빈출 세대↔언어 짝짓기. 4세대에 어셈블리어 끼우기가 매 회차 단골.
저급 vs 고급 — 기·어 저급 / 고·초 고급 ·세대·시험 1순위·
[정의] 언어는 친화 대상으로도 둘로 나뉜다. 저급 언어 = 기계 친화(기계어·어셈블리어 둘뿐) / 고급 언어 = 사람 친화(나머지 전부). ★기어고초★에서 기·어가 저급, 고·초가 고급.
[표] 저급 vs 고급 종합
| 구분 | 저급 언어 | 고급 언어 |
|---|---|---|
| 친화 대상 | 컴퓨터(기계) | 사람 |
| 포함 언어 | 기계어 · 어셈블리어 (2개만) | FORTRAN · C · Java · Python · SQL … |
| 가독성 | 낮음 | 높음 |
| 이식성 | 낮음(CPU 의존) | 높음 |
| 실행 속도 | 매우 빠름 | 상대적으로 느림 |
| 번역 | 어셈블러만(또는 0개) | 컴파일러 또는 인터프리터 |
[참고] 어셈블리어는 기계어의 0과 1을 영어 약자(Mnemonic)로 바꾼 2세대 저급 언어다. 어셈블러가 단어 하나 = 단어 하나로 1:1 변환한다.
MOV A, 5 ; A 레지스터에 5 넣기
MOV B, 3 ; B 레지스터에 3 넣기
ADD A, B ; A = A + B (결과 8)
🔑 암기 "저급 = 기계어 · 어셈블리어 둘뿐 / 고 · 초는 전부 고급"
⚠️ 함정 "C는 시스템 언어라 저급 언어" ❌ → C는 시스템 프로그래밍에 많이 쓰여 '저급 같은 느낌'이지만 엄연한 고급 언어(3세대). 매년 단골 함정.
🎯 빈출 "저급 언어로 바르게 묶인 것" → 기계어·어셈블리어. C·Python·FORTRAN을 저급에 끼우면 함정.
PART B — 사용 목적별 분류
사용 목적 6분류 — ★범과사인시스★ ·분류·
[정의] 언어를 "무엇을 하려고 만들었나"로 나눈 분류. 5대 분류 + 스크립트 별도 = 6분류. 두음 ★범과사인시스★(범용·과학·사무·인공지능·시스템 + 스크립트).
[표] 사용 목적별 분류
| 글자 | 분류 | 대표 언어 | 용도 |
|---|---|---|---|
| 범 | 범용 | BASIC · Pascal · C · C++ | 응용 분야 제한 없음 |
| 과 | 과학 | FORTRAN · ALGOL | 수치 계산 |
| 사 | 사무 | COBOL | 보고서 · 십진수 산술 |
| 인 | 인공지능 | LISP · Prolog | 기호 계산 · 추론 |
| 시스 | 시스템 | BLISS · ALGOL · C | OS · 시스템 도구 개발 |
| — | 스크립트 | Perl · PHP · ASP · JSP · JS · Python | 파일 관리 · 자동화 |
🔑 암기 "★범과사인시스★ — 범용·과학·사무·인공지능·시스템 + 스크립트 별도. COBOL의 CO = Common Business = 사무"
⚠️ 함정 "COBOL = 과학용 / FORTRAN = 사무용" ❌(→ 자리 바꿔치기·COBOL=사무 / FORTRAN=과학) / "LISP는 함수형이니 인공지능 아님" ❌(→ 패러다임은 함수형이지만 사용 목적은 인공지능·두 차원 분리).
🎯 빈출 분류↔대표 언어 매칭. COBOL·FORTRAN 자리 바꾸기가 매년 단골.
스크립트 언어 6종 ·분류·시험 1순위·
[정의] 스크립트(script) = 차례대로 실행되는 명령을 한 파일에 적어둔 것(원래 뜻은 '대본'). 파일 관리·필터링·자동화에 쓰이며 인터프리터 기반으로 한 줄씩 실행된다. 시험에선 매년 1문항이 굳어 나온다.
[표] 스크립트 6종
| 언어 | 주 용도 | 한 줄 |
|---|---|---|
| Perl | 텍스트 처리 | 초기 웹 CGI |
| PHP | 서버 웹 | Hypertext Preprocessor |
| ASP | 서버 웹 | Active Server Pages |
| JSP | 서버 웹 | Java Server Pages |
| JavaScript | 브라우저·서버 | 웹 프론트 필수·서버 확장 |
| Python | 만능 | AI·데이터·자동화 |
[표] 스크립트 ↔ 컴파일러 언어
| 구분 | 스크립트(인터프리터 계열) | 컴파일러 언어 |
|---|---|---|
| 번역 방식 | 한 줄씩 인터프리터 | 전체 한 번에 컴파일 |
| 종류 | Perl · PHP · ASP · JSP · JS · Python | C · C++ · Java · Go · Rust |
| 목적 프로그램 | 생성 X | 생성 O |
🔑 암기 "스크립트 6종(Perl·PHP·ASP·JSP·JS·Python) + 컴파일러 3종 NO(C·C++·Java) = 9글자 즉답 카드"
⚠️ 함정 "스크립트 언어가 아닌 것" 보기에 C·C++·Java가 끼어든다 — 이 셋은 절대 스크립트가 아니다(컴파일러 언어).
🎯 빈출 "스크립트가 아닌 것은?" 소거형. 매 회차 1순위 효자 문제.
PART C — 3대 번역기 ★컴인어★
3대 번역기 — ★컴인어★ 개관 ·번역기·시험 1순위·
[정의] 사람의 언어(고급 언어)를 기계의 언어(기계어)로 바꿔주는 것이 번역 프로그램. 3대 번역기 두음 ★컴인어★ = 컴파일러 · 인터프리터 · 어셈블러.
고급 언어 (Python · Java · C) ──▶ [ 번역기 ] ──▶ 기계어 (0과 1)
★컴인어★
[표] 3대 번역기 입력·출력
| 글자 | 번역기 | 입력 | 출력 | 방식 |
|---|---|---|---|---|
| 컴 | 컴파일러 | 고급 언어 | 목적 프로그램(기계어) | 전체를 한 번에 |
| 인 | 인터프리터 | 고급 언어 | 즉시 실행(목적 프로그램 X) | 한 줄씩 |
| 어 | 어셈블러 | 어셈블리어 | 기계어 | 1:1 대응 |
💡 어셈블러는 어셈블리어 전용 번역기다. 고급 언어 → 기계어는 컴파일러, 어셈블리어 → 기계어는 어셈블러 — 입력 언어가 다르다.
🔑 암기 "★컴인어★ — 컴파일러(고급→기계어 전체) / 인터프리터(고급→즉시 한 줄씩) / 어셈블러(어셈블리어→기계어 1:1)"
⚠️ 함정 "어셈블러가 고급 언어를 번역" ❌(→ 어셈블리어 전용·고급 언어는 컴파일러).
🎯 빈출 번역기↔입출력 매칭. 매년 빈출 1순위다.
컴 · 컴파일러 — 전체 번역, 목적 프로그램 O ·번역기·
[정의] 컴파일러 = 원시 프로그램 전체를 한 번에 기계어로 번역해 목적 프로그램을 만드는 번역기. 한 번 만든 번역본을 직접 실행하므로 실행이 빠르다.
hello.c (원시 코드) ──▶ [컴파일러] 전체 번역 ──▶ hello.exe (목적 프로그램) ──▶ 실행
[표] 컴파일러 특성
| 항목 | 내용 |
|---|---|
| 번역 단위 | 프로그램 전체 |
| 결과물 | 목적 프로그램 생성 O |
| 번역 속도 | 느림(전체를 한 번에) |
| 실행 속도 | 빠름(번역본 직접 실행) |
| 오류 발견 | 컴파일 시점에 한꺼번에 |
| 대표 언어 | C · C++ · Java · Go · Rust |
💡 책 한 권을 통째로 번역해 번역본을 만드는 번역가 — 한 번 번역해두면 다음부턴 번역본만 읽으면 되니 빠르다.
🔑 암기 "컴파일러 = 전체 번역 / 목적 프로그램 O / 번역 느림·실행 빠름 / C·C++·Java"
⚠️ 함정 "컴파일러는 번역 속도가 빠르다" ❌ → 번역은 느림·실행이 빠름(두 속도 정반대·자리 바꿔치기 매년).
🎯 빈출 번역/실행 속도 정반대 함정이 단골.
컴파일 단계 + 조연 2명(프리프로세서·링커) ·번역기·
[정의] 컴파일러가 거치는 과정. 필기에선 단계 이름과 순서, 그리고 프리프로세서·링커의 시점만 잡으면 충분하다(깊은 이론은 실기에서).
[표] 컴파일 핵심 5단계
| 순서 | 단계 | 영문 | 하는 일 |
|---|---|---|---|
| ① | 어휘 분석 | Lexical | 토큰 쪼개기 |
| ② | 구문 분석 | Syntax | 문법 확인 |
| ③ | 의미 분석 | Semantic | 의미 확인 |
| ④ | 최적화 | Optimization | 더 빠르게 다듬기 |
| ⑤ | 코드 생성 | Code Generation | 기계어 생성 |
[흐름] 조연 2명 — 프리프로세서(전)·링커(후)
원시코드(.c) ──▶ [프리프로세서] ──▶ [컴파일러] ──▶ 목적파일(.o) ──▶ [링커] ──▶ 실행파일(.exe)
| 조연 | 시점 | 역할 |
|---|---|---|
| 프리프로세서 | 컴파일 전 | 매크로 치환(#define · #include 처리) |
| 링커 | 컴파일 후 | 목적 프로그램 + 라이브러리 연결 → 실행 파일 |
🔑 암기 "단어 나눔(어휘)→문법(구문)→의미→최적화→코드 생성 / 전처리는 프리프로세서·연결은 링커"
⚠️ 함정 "#include·#define을 컴파일러가 처리" ❌ → 프리프로세서가 컴파일 전에 처리. 매년 단골.
🎯 빈출 단계 순서 + "#include는 프리프로세서" 두 가지.
인 · 인터프리터 — 한 줄씩, 목적 프로그램 X ·번역기·
[정의] 인터프리터 = 원시 프로그램을 한 줄씩 읽어 즉시 번역 + 실행하는 번역기. 목적 프로그램을 만들지 않는다(매 실행마다 다시 번역).
hello.py ──▶ 줄1 번역+실행 ──▶ 줄2 번역+실행 ──▶ 줄3 번역+실행 ──▶ …
(목적 프로그램 생성 X · 매 실행마다 다시 번역)
[표] 인터프리터 특성
| 항목 | 내용 |
|---|---|
| 번역 단위 | 한 줄씩 |
| 결과물 | 목적 프로그램 없음 |
| 번역 속도 | 빠름(한 줄만) |
| 실행 속도 | 느림(매 실행마다 재번역) |
| 오류 발견 | 실행 중 한 줄씩 |
| 대표 언어 | Python · JavaScript · Ruby · BASIC · LISP |
💡 회의장의 동시통역사 — 발화자가 한 문장 말하면 바로 통역한다. 번역본(책)을 안 만들어서 같은 회의가 또 열리면 처음부터 다시 통역. UNIX 쉘이 ls -l 한 줄을 즉시 해석·실행하는 것도 인터프리터 계열(37강 회수).
🔑 암기 "인터프리터 = 한 줄씩 / 목적 프로그램 X / 번역 빠름·실행 느림 / Python·JS — 컴파일러와 정반대"
⚠️ 함정 "인터프리터가 목적 프로그램을 생성" ❌ → 생성하지 않는다(생성하는 건 컴파일러).
🎯 빈출 목적 프로그램 생성 여부 + 실행 속도. 컴파일러와 짝지어 출제.
하이브리드 — Java JVM · JIT · 바이트 코드 · WORA ·번역기·시험 1순위·
[정의] 컴파일러 + 인터프리터를 합친 하이브리드 방식. 대표가 Java로, 매년 1~2문항이 여기서 나온다.
[1단계] Hello.java ──▶ javac(컴파일러) ──▶ Hello.class (바이트 코드·기계 독립)
[2단계] Hello.class ──▶ JVM(인터프리트 + JIT) ──▶ 기계어 ──▶ 실행
[표] 핵심 용어
| 용어 | 의미 |
|---|---|
| 바이트 코드 | 기계어도 원시 코드도 아닌 중간 형태·기계 독립적 |
| JVM | 바이트 코드를 기계어로 변환·실행하는 가상 머신 |
| JIT 컴파일러 | 자주 쓰이는 코드(핫스팟)를 미리 기계어로 변환 → 속도 향상 |
| WORA | Write Once, Run Anywhere — 한 번 작성, 모든 OS에서 실행 |
💡 Python도 .pyc 바이트 코드를 만들어 재실행 속도를 개선한다 — Java와 같은 원리(단, Python의 분류는 인터프리터).
🔑 암기 "Java = javac + JVM + JIT = 하이브리드 / 바이트 코드(중간 형태) + WORA(어디서나 실행)"
⚠️ 함정 "Java는 순수 컴파일러 언어" / "순수 인터프리터 언어" — 둘 다 ❌(→ 하이브리드가 정답).
🎯 빈출 Java 번역 방식 + 바이트 코드·WORA 용어. 매 회차 출제.
컴파일러 vs 인터프리터 — 8행 종합 + 함정 4종 ·번역기·매 회차 1순위·
[정의] 38강 PART C의 결정 카드. 이 8행 표가 매 회차 거의 같은 형태로 나온다 — 통째로 외운다.
[표] 8행 종합
| # | 비교 항목 | 컴파일러 | 인터프리터 |
|---|---|---|---|
| 1 | 번역 단위 | 전체 프로그램 한 번에 | 한 줄씩 |
| 2 | 목적 프로그램 | 생성 O | 생성 X |
| 3 | 번역 속도 | 느림(전체 처리) | 빠름(한 줄만) |
| 4 | 실행 속도 | 빠름(번역본 실행) | 느림(매번 재번역) |
| 5 | 메모리 사용 | 적음 | 많음 |
| 6 | 오류 발견 | 컴파일 시점에 전체 | 실행 중 한 줄씩 |
| 7 | 수정·디버깅 | 번거로움(재컴파일) | 편함(수정 후 바로 실행) |
| 8 | 대표 언어 | C · C++ · Java · Go · Rust | Python · JS · Ruby · BASIC · LISP |
[표] ⚠️ 단골 함정 4종 (매년 돌아가며 출제)
| # | 함정 | 진실 |
|---|---|---|
| ① | 컴파일러는 번역 속도가 빠르다 | 번역 느림 / 실행 빠름 — 정반대 |
| ② | 인터프리터는 목적 프로그램을 생성한다 | 목적 프로그램 없음 |
| ③ | Java는 순수 컴파일러 언어다 | 하이브리드(javac + JVM + JIT) |
| ④ | Python은 컴파일러 언어다 | 인터프리터(.pyc는 있지만 분류는 인터프리터) |
🔑 암기 "컴파일러 = 전체·목적O·실행빠름·C/Java / 인터프리터 = 한줄·목적X·실행느림·Python/JS"
🎯 빈출 8행 표 + 함정 4종이 PART C의 절반 이상. 이 한 장이면 번역기 분별 문제 거의 100% 즉답.
PART D — 패러다임 ★절객함논★
패러다임 4대장 — ★절객함논★ ·패러다임·
[정의] 패러다임 = 프로그래밍의 사고방식·스타일. 같은 문제도 어떤 사고방식으로 접근하느냐에 따라 완전히 다른 코드가 나온다. 4대장 두음 ★절객함논★ = 절차적 · 객체지향 · 함수형 · 논리형.
[표] 패러다임 4대장
| 글자 | 패러다임 | 중심 사고 | 대표 언어 |
|---|---|---|---|
| 절 | 절차적 | 순서대로 실행 | C · Pascal · FORTRAN |
| 객 | 객체지향 | 객체들의 상호작용 | Java · C++ · Python · C# |
| 함 | 함수형 | 함수 조합·불변성 | LISP · Haskell · Scala · F# |
| 논 | 논리형 | 사실과 규칙의 추론 | Prolog |
💡 한 언어가 한 패러다임만 쓰는 건 옛날 얘기다. Python은 절차 + 객체지향 + 함수형을 모두 지원하는 멀티 패러다임 언어.
🔑 암기 "★절객함논★ — 절차·객체지향·함수형·논리형. 네 사고방식 + 대표 언어 매칭"
⚠️ 함정 "패러다임은 언어마다 하나로 고정" ❌(→ 멀티 패러다임 언어 존재·Python).
🎯 빈출 패러다임↔대표 언어 매칭. 다음 카드들에서 함정에 집중.
절 · 절차적 / 구조적 — ★순반선★ 3구조 ·패러다임·
[정의] 절차적 프로그래밍 = 문제를 순서대로 해결('이거 하고, 저거 하고…' 절차의 나열). 과거 GOTO 남용으로 코드가 스파게티처럼 엉키자, 이를 막는 구조적 프로그래밍이 등장했다 — GOTO 금지 + 하향식 설계 + 모듈화 3원칙.
[표] 구조적 프로그래밍 3대 논리 구조 — ★순반선★
| 글자 | 구조 | 영문 | 예시 |
|---|---|---|---|
| 순 | 순차 | Sequence | 위에서 아래로 차례대로 |
| 반 | 반복 | Iteration | for · while · do-while |
| 선 | 선택 | Selection | if · else · switch |
💡 대표 언어는 C · Pascal — C는 시스템 프로그래밍, Pascal은 교육용. 이 3구조(순차·반복·선택)는 39강 C언어의 if·for·while로 실제 코드에서 다시 만난다.
🔑 암기 "★순반선★ — 순차·반복·선택 3구조 / 구조적 = GOTO 금지·하향식·모듈화"
⚠️ 함정 "구조적 프로그래밍은 GOTO를 적극 활용" ❌ → 구조적 프로그래밍은 GOTO를 쓰지 않는다(GOTO 남용을 막으려 등장).
🎯 빈출 3구조 매칭 + "GOTO 사용" 부정 함정. 매년 빈출.
객 · 객체지향 — ★캡상다추★ 4특성 + 'C는 절차적' 함정 ·패러다임·시험 1순위·
[정의] 객체지향(OOP) = 현실 세계를 객체들의 집합으로 모델링. 데이터(속성)와 함수(메소드)를 하나로 묶은 객체들이 메시지를 주고받는다. 4대 특성 두음 ★캡상다추★(7강 등록·42강 Java에서 본격).
[표] 객체지향 4대 특성 — ★캡상다추★
| 글자 | 특성 | 한 줄 |
|---|---|---|
| 캡 | 캡슐화 | 데이터 + 메소드를 묶고 외부에 감춤 |
| 상 | 상속 | 부모의 속성·메소드를 자식이 물려받음 |
| 다 | 다형성 | 같은 메시지에 객체마다 다르게 반응 |
| 추 | 추상화 | 세부는 숨기고 핵심만 노출 |
[표] C 계열 패러다임 분별
| 언어 | 패러다임 |
|---|---|
| C | 절차적 (객체지향 X) |
| C++ | 객체지향 (+ 절차적 멀티) |
| Java | 객체지향 |
| Python | 멀티(절차+객체+함수) |
🔑 암기 "★캡상다추★ — 캡슐화·상속·다형성·추상화 / C는 절차적·C++/C#이 객체지향"
⚠️ 함정 "C는 객체지향 언어" ❌ → C는 절차적(이름 비슷한 C++·C#이 객체지향). C ↔ C++ 자리 바꾸기가 매년 단골.
🎯 빈출 "객체지향 언어가 아닌 것" 보기에 C가 끼어든다. 4특성 매칭도 빈출.
함 · 논 — 함수형 / 논리형 종합 ·패러다임·🌟 여기만·
[정의] 패러다임 남은 둘. 함수형 = 모든 것을 함수 조합으로(순수 함수·불변성) / 논리형 = 사실(Fact) + 규칙(Rule)을 주면 언어가 자동 추론. 각각 한 줄씩만 잡아도 충분하다.
[표] 함수형 vs 논리형
| 항목 | 함수형 | 논리형 |
|---|---|---|
| 핵심 | 함수 조합·순수 함수·불변성 | 사실 + 규칙 → 자동 추론 |
| 대표 언어 | LISP(원조 1960) · Haskell · Scala · F# | Prolog |
| 비유 | 재료를 넣으면 같은 결과가 나오는 자판기(부작용 없음) | 규칙만 주면 결과를 스스로 추론 |
💡 LISP과 Prolog는 둘 다 인공지능 분야로도 분류된다 — LISP은 패러다임은 함수형·사용 목적은 인공지능, Prolog는 논리형·인공지능. 패러다임과 사용 목적은 별개 차원.
🔑 암기 "함수형 = LISP·자판기(불변) / 논리형 = Prolog·규칙 추론 / 둘 다 인공지능 분류"
⚠️ 함정 "LISP만 인공지능이고 Prolog는 아니다" ❌(→ Prolog도 인공지능 분류).
🎯 빈출 대표 언어 매칭(LISP=함수형·Prolog=논리형). 간헐.
PART E — 언어 선정 기준
언어 선정 5기준 — ★범적효이친★ ·선정 기준·시험 1순위·
[정의] 신규 프로젝트에서 "어떤 언어로 개발할까"를 결정할 때 보는 5가지 기준. 두음 ★범적효이친★ = 범용성 · 적정성 · 효율성 · 이식성 · 친밀성.
[표] 선정 5기준
| 글자 | 기준 | 영문 | 핵심 질문 |
|---|---|---|---|
| 범 | 범용성 | Generality | 여러 분야에 두루 쓸 수 있는가 |
| 적 | 적정성 | Suitability | 프로젝트 요구사항에 잘 맞는가 |
| 효 | 효율성 | Efficiency | 실행 속도·자원 사용이 효율적인가 |
| 이 | 이식성 | Portability | 다른 OS·기계로 옮겨도 잘 도는가 |
| 친 | 친밀성 | Familiarity | 개발팀이 얼마나 익숙한가 |
🔑 암기 "★범적효이친★ — 범용·적정·효율·이식·친밀 5축만. 보안성·확장성·생산성은 절대 NO"
⚠️ 함정 선정 기준에 보안성(Security)·확장성(Scalability)·생산성(Productivity)·유지보수성·호환성을 끼워 넣는다 — 5축 외 그럴듯한 단어는 전부 ❌.
🎯 빈출 "선정 기준에 포함되지 않는 것" 소거형. 매년 1문항. 한글 5글자만 외우면 즉답.
기출 다지기
[기출 1 출제] 다음 중 스크립트 언어가 아닌 것은? (소거형 · 매년 변형)
- ① PHP
- ② Perl
- ③ Python
- ④ C
정답 및 해설 보기
정답: ④ C
스크립트 언어는 한 줄씩 즉시 실행되는 인터프리터 기반 언어다. C는 전체를 번역한 뒤 실행하는 컴파일러 언어라 스크립트가 아니다. 보기에 C·C++·Java가 보이면 즉시 골라낸다.
| 선지 | 분류 | 정답? |
|---|---|---|
| ① PHP | 스크립트 | X |
| ② Perl | 스크립트 | X |
| ③ Python | 스크립트 | X |
| ④ C | 컴파일러 | O |
🔑 스크립트 6종(Perl·PHP·ASP·JSP·JS·Python) + 컴파일러 3종 NO(C·C++·Java) = 9글자 즉답.
[기출 2 출제] 컴파일러에 대한 설명으로 옳지 않은 것은? (부정형)
- ① 원시 프로그램 전체를 한 번에 번역한다.
- ② 번역 결과로 목적 프로그램을 생성한다.
- ③ 실행 속도가 인터프리터보다 빠르다.
- ④ 대표 언어로 Python, JavaScript가 있다.
정답 및 해설 보기
정답: ④ — Python · JavaScript는 인터프리터
Python·JavaScript는 인터프리터 언어다. 컴파일러 대표는 C·C++·Java·Go·Rust.
| 선지 | 판정 | 설명 |
|---|---|---|
| ① 전체를 한 번에 번역 | O | 컴파일러 정의 그대로 |
| ② 목적 프로그램 생성 | O | .exe·.class 등 |
| ③ 실행 속도 빠름 | O | 번역본 직접 실행 |
| ④ Python · JS | X | 정답 — 인터프리터 계열 |
🔑 컴파일러 = C·C++·Java·Go·Rust / 인터프리터 = Python·JS·Ruby·BASIC·LISP. 5개씩만 외우면 분류 자리 바꾸기 100% 차단.
[기출 3 출제] 프로그래밍 언어의 세대 구분과 해당 언어의 짝이 잘못 연결된 것은? (짝짓기 오류형)
- ① 1세대 — 기계어
- ② 2세대 — 어셈블리어
- ③ 3세대 — FORTRAN, C, Java
- ④ 4세대 — 어셈블리어
정답 및 해설 보기
정답: ④ — 4세대는 초고급 언어(SQL 등)
4세대는 초고급·비절차적 언어로 대표는 SQL·보고서 생성기. 어셈블리어는 2세대다.
| 세대 | 글자 | 대표 |
|---|---|---|
| 1세대 | 기 | 기계어 (0과 1) |
| 2세대 | 어 | 어셈블리어 (Mnemonic) |
| 3세대 | 고 | FORTRAN · C · Java 등 |
| 4세대 | 초 | SQL · 보고서 생성기 (비절차적) |
🔑 ★기어고초★ 4글자 순서를 벗어나면 전부 함정. 4세대에 어셈블리어 · 3세대에 SQL · 1세대에 FORTRAN이 돌아가며 출제.
[기출 4 출제] Python에 대한 설명으로 가장 거리가 먼 것은? (거리형)
- ① 귀도 반 로섬이 개발한 언어이다.
- ② 객체지향, 인터프리티드 스크립트 언어이다.
- ③ 정적 타입(Static Typing)을 사용하는 언어이다.
- ④ 바이트 코드를 생성하여 재실행 시 속도를 개선한다.
정답 및 해설 보기
정답: ③ — Python은 동적 타입
Python은 동적 타입(Dynamic Typing) 언어다. 변수 선언 시 타입을 명시하지 않고 실행 시점에 타입이 결정된다.
| 선지 | 판정 | 설명 |
|---|---|---|
| ① 귀도 반 로섬 개발 | O | 1991년 |
| ② 객체지향·인터프리티드 | O | 멀티 패러다임 |
| ③ 정적 타입 | X | 정답 — 동적 타입(정적은 C·Java) |
| ④ 바이트 코드 생성 | O | .pyc(Java JVM과 유사 원리) |
🔑 정적 타입(컴파일 시점 결정) = C·C++·Java·Go / 동적 타입(실행 시점 결정) = Python·JS·Ruby.
[기출 5 출제] 저급 언어(Low-level Language)에 해당하는 것으로 바르게 묶인 것은? (묶음형)
- ① 기계어, 어셈블리어
- ② 기계어, C 언어
- ③ 어셈블리어, Python
- ④ C 언어, FORTRAN
정답 및 해설 보기
정답: ① 기계어, 어셈블리어
저급 언어는 컴퓨터 친화적인 언어로 기계어·어셈블리어 두 가지뿐이다.
| 언어 | 분류 | 이유 |
|---|---|---|
| 기계어 | 저급 | 1세대·2진수·CPU 직접 이해 |
| 어셈블리어 | 저급 | 2세대·1:1 대응 |
| C | 고급 | 3세대·사람 친화 문법 |
| Python · FORTRAN | 고급 | 3세대 |
🔑 ★기어고초★에서 기·어만 저급, 고·초는 고급. C는 시스템에 많이 쓰여도 엄연한 고급 언어(단골 함정).
[기출 6 출제] 개발 언어의 선정 기준에 포함되지 않는 것은? (소거형)
- ① 효율성(Efficiency)
- ② 이식성(Portability)
- ③ 친밀성(Familiarity)
- ④ 보안성(Security)
정답 및 해설 보기
정답: ④ — 보안성은 선정 기준 X
선정 기준은 ★범적효이친★ — 범용성·적정성·효율성·이식성·친밀성 5가지. 보안성은 포함되지 않는다.
| 함정 단어 | 정답 |
|---|---|
| 보안성(Security) | X |
| 확장성(Scalability) | X |
| 생산성(Productivity) | X |
| 유지보수성·호환성 | X |
🔑 ★범적효이친★ 5축 외 어떤 단어도 정답 아님. 영어가 어려워도 한글 5글자만 외우면 끝.
[기출 7 출제] 다음 중 객체지향 언어가 아닌 것은? (소거형)
- ① C
- ② C++
- ③ Java
- ④ Python
정답 및 해설 보기
정답: ① C — 절차적 언어
C는 절차적 언어(객체지향 X)다. 이름이 비슷한 C++·C#은 객체지향이 맞고, Python은 멀티 패러다임(객체지향 포함)이다.
| 선지 | 패러다임 | 정답? |
|---|---|---|
| ① C | 절차적 | O |
| ② C++ | 객체지향(+절차) | X |
| ③ Java | 객체지향 | X |
| ④ Python | 멀티(객체 포함) | X |
🔑 C ↔ C++ 자리 바꾸기가 매년 단골. C는 절차적·C++/C#이 객체지향 한 줄로 즉답.
한 장 요약
| 주제 | 암기·핵심 | 결정 카드 |
|---|---|---|
| 언어 4세대 | ★기어고초★ | 기계어·어셈블리어·고급·초고급 / 4세대에 어셈블리어 ❌ |
| 저급 언어 | 기계어·어셈블리어 둘뿐 | C·Python은 고급(함정) |
| 사용 목적 6분류 | ★범과사인시스★ | COBOL=사무 / FORTRAN=과학(자리 바꿈 함정) |
| 스크립트 6종 | Perl·PHP·ASP·JSP·JS·Python | 아닌 것 = C·C++·Java |
| 3대 번역기 | ★컴인어★ | 컴파일러·인터프리터·어셈블러 |
| 컴파일러 vs 인터프리터 | 8행 종합표 | 컴=전체·목적O·실행빠름 / 인=한줄·목적X·실행느림 |
| Java 번역 | 하이브리드 | javac + JVM + JIT + WORA(순수 컴파일러 ❌) |
| 패러다임 4대장 | ★절객함논★ | 절차·객체지향·함수형·논리형 |
| 구조적 3구조 | ★순반선★ | 순차·반복·선택 / GOTO 금지 |
| 객체지향 4특성 | ★캡상다추★ | 캡슐화·상속·다형성·추상화 / C는 절차적 |
| 선정 5기준 | ★범적효이친★ | 범용·적정·효율·이식·친밀 / 보안성 ❌ |
| 단골 함정 5쌍 | 정답 |
|---|---|
| C = 객체지향 | C = 절차적 (C++·C#이 객체지향) |
| 컴파일러 = 목적 프로그램 X | 생성 O (인터프리터가 안 만듦) |
| Java = 순수 컴파일러 | 하이브리드(javac + JVM + JIT) |
| Python = 정적 타입 | 동적 타입 (정적은 C·Java) |
| 선정 기준에 보안성 | ★범적효이친★ 5가지만 |
🎯 합격 한 끗: 38강은 ★기어고초★ · ★컴인어★ · ★범적효이친★ 핵심 두음 3개에 스크립트 6종과 컴파일러 vs 인터프리터 8행 표만 얹으면 출제 범위 절반이 즉답으로 풀린다. 깊이 파는 단원이 아니라 키워드 매칭·함정 소거의 효자 영역 — 저급은 기계어·어셈블리어 둘뿐, C는 절차적, Java는 하이브리드, 선정 기준에 보안성 NO 네 함정만 외워두면 1~2문항을 안정적으로 가져온다. 37강까지 운영체제(33~37강)를 마쳤고, 38강이 4과목의 또 다른 축인 프로그래밍 언어로 들어선 첫 강이다. 여기서 잡은 ★순반선★(순차·반복·선택)은 39강 C언어의 if·for·while로, ★캡상다추★(객체지향 4특성)는 42강 Java OOP로 실제 코드에서 다시 만난다.
