언어의 분류와 예외 처리
쉽게 말하면
프로그래밍 언어는 만드는 방식에 따라 나뉘어요. 순서대로 명령을 적는 절차적 언어(C), 객체로 만드는 객체지향 언어(Java), 짧게 써서 바로 실행하는 스크립트 언어(Python, JavaScript)가 있어요. 사람이 쓴 코드를 기계어로 바꾸는 방식도 두 가지예요. 전체를 한 번에 번역하는 컴파일러와 한 줄씩 바로 실행하는 인터프리터예요. 실행 중 생기는 오류는 예외 처리로 대비해요.
시험용 정의
프로그래밍 언어는 절차적 언어(명령을 순서대로, C, ALGOL, COBOL, FORTRAN), 객체지향 언어(객체 단위, Java, C++, C#, Smalltalk), 스크립트 언어(소스를 바로 실행, 서버용 PHP·JSP·Python, 클라이언트용 JavaScript), 선언형 언어(무엇을 할지 기술, 함수형 LISP·Haskell, 논리형 Prolog, HTML, SQL)로 나뉜다. 번역기는 컴파일러, 인터프리터, 어셈블러가 있고 실행 과정은 원시 코드 → 컴파일 → 목적 코드 → 링커(라이브러리 연결) → 로더(메모리 적재) → 실행이다. 변수 이름 표기법은 카멜(myName), 파스칼(MyName), 스네이크(my_name), 헝가리안(접두어로 형 표시, nCount, strName)이다. 예외 처리는 실행 중 오류에 대비하는 것으로 Java·Python은 try(실행), catch / except(예외 처리), finally(항상 실행)를 쓴다.
비유로 이해하기
통역에 비유하면 컴파일러는 책 한 권을 미리 다 번역해 번역본을 주는 번역가, 인터프리터는 연설을 한 문장씩 바로 옮기는 동시통역사다. 번역본은 읽기 빠르지만 만드는 데 시간이 걸리고, 동시통역은 바로 시작하지만 매번 통역해야 한다.
자세히
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| 원시 코드 | 사람이 작성한 소스 코드 |
| 목적 코드 | 컴파일 결과로 만들어진 기계어 코드 |
| 링커 | 목적 코드와 라이브러리를 연결해 실행 파일을 만든다 |
| 로더 | 실행 파일을 메모리에 올린다 |
| 라이브러리 | 자주 쓰는 기능을 모아 둔 코드 묶음 (표준·외부 라이브러리) |
| 예외 | 프로그램 실행 중 생기는 비정상 상황 (0으로 나누기, 파일 없음) |
컴파일러 vs 인터프리터
| 구분 | 컴파일러 | 인터프리터 |
|---|---|---|
| 번역 단위 | 전체 | 한 줄(문장)씩 |
| 목적 프로그램 | 생성 | 생성 안 함 |
| 실행 속도 | 빠름 | 느림 |
| 번역 속도 | 느림 | 빠름 (바로 실행) |
| 언어 예 | C, C++, (Java는 바이트코드로 컴파일 후 JVM이 실행) | Python, JavaScript, BASIC |
예외 처리 (Java)
try {
int z = 0;
System.out.println(10 / z);
} catch (ArithmeticException e) {
System.out.println("E");
} finally {
System.out.println("F"); // 예외가 있든 없든 실행
}
// 출력: E, F대표 예외: ArithmeticException(0으로 나눔), ArrayIndexOutOfBoundsException(배열 범위 밖), NullPointerException(null 참조), ClassNotFoundException, IOException. Python은 try / except / else / finally.
변수 이름 표기법
| 표기법 | 예 | 규칙 |
|---|---|---|
| 카멜 | userName | 첫 단어 소문자, 이후 단어 첫 글자 대문자 |
| 파스칼 | UserName | 모든 단어 첫 글자 대문자 (클래스 이름) |
| 스네이크 | user_name | 단어 사이를 밑줄로 |
| 헝가리안 | strUserName, nCount | 앞에 자료형을 뜻하는 접두어 |
기출에서 더 나온 것
| 말 | 뜻 |
|---|---|
| stdlib.h | 문자열을 수로 바꾸는 atoi·atof, 메모리 할당 malloc 등이 있는 C 표준 헤더 |
| string.h | strlen·strcpy·strcmp 같은 문자열 처리 함수가 있는 헤더 |
| atoi() | 문자열을 정수로 바꾼다 (atof는 실수로) |
| PHP 연산자 | @는 오류 메시지 숨김, ===는 값과 자료형까지 같은지 비교, <>는 같지 않음. #은 연산자가 아니라 주석 |
| IDE | 통합 개발 환경. 코딩·컴파일(고급 언어를 기계어로)·디버깅·배포를 한 도구에서 |
시험에 이렇게 나와요
- 스크립트 언어 → JavaScript·PHP·Python·Basic 등 (Cobol은 아님)
- Python → 귀도 반 로섬이 만든 인터프리터 방식 객체지향 언어
- JavaScript → 클래스가 아니라 프로토타입으로 상속
- 표준 라이브러리 → 언어에 기본으로 들어 있음, 외부 라이브러리 → 따로 설치
- 예외 → 실행 중 생기는 오류 (문법 오류는 컴파일 단계)
- 언어 선택 기준 → 시스템 특성·사용자 요구·컴파일러 가용성·개발자 경험 (컴파일러 독창성은 아님)
확인 문제
Q1. 원시 프로그램 전체를 한 번에 번역해 목적 프로그램을 만든 뒤 실행하는 번역기는?
- 어셈블러
- 컴파일러
- 링커
- 인터프리터
정답 보기
2번 컴파일러
컴파일러는 전체를 번역해 실행 파일을 만든다(실행 빠름). 인터프리터는 한 줄씩 해석해 바로 실행한다(목적 프로그램 없음). 어셈블러는 어셈블리어를 기계어로 바꾼다.
Q2. 스크립트 언어가 아닌 것은?
- C
- PHP
- Python
- JavaScript
정답 보기
1번 C
C다. 컴파일해서 실행 파일을 만드는 컴파일 언어다. JavaScript·PHP·Python은 인터프리터가 바로 실행하는 스크립트 언어다.
Q3. 변수 이름 앞에 자료형을 뜻하는 접두어를 붙이는 표기법은?
- 스네이크 표기법
- 헝가리안 표기법
- 파스칼 표기법
- 카멜 표기법
정답 보기
2번 헝가리안 표기법
nCount, strName 등.
Q4. 목적 프로그램과 라이브러리를 연결해 실행 가능한 모듈을 만드는 것은?
- 로더
- 링커
- 컴파일러
- 인터프리터
정답 보기
2번 링커
링커다. 컴파일러가 만든 목적 프로그램과 라이브러리를 이어 실행 가능한 모듈을 만든다. 로더는 그 모듈을 메모리에 올린다.
Q5. Java 예외 처리에서 예외 발생 여부와 상관없이 항상 실행되는 블록은?
- finally
- catch
- try
- throw
정답 보기
1번 finally
finally다. 예외가 나든 안 나든 항상 실행된다. try는 예외가 날 수 있는 코드, catch는 예외를 받아 처리하는 블록이다.
헷갈리기 쉬운 O·X
인터프리터는 목적 프로그램을 만든 뒤 실행한다.
정답 보기
X 목적 프로그램 없이 바로 해석·실행한다.
SQL과 HTML은 선언형 언어로 분류할 수 있다.
정답 보기
O 무엇을 원하는지 기술한다.
파스칼 표기법은 첫 단어를 소문자로 시작한다.
정답 보기
X 그건 카멜. 파스칼은 모든 단어 첫 글자가 대문자.