방송대 컴퓨터과학개론 11강: 프로그래밍 언어 분류와 코드 변환 과정
사람이 쓴 한 줄의 프로그램은 곧바로 실행되지 않습니다. 단어를 가려내고, 문법에 맞는 구조인지 확인하고, 변수와 연산의 의미를 해석한 뒤 기계가 처리할 코드로 바뀌어야 합니다. 이 글은 프로그래밍 언어의 여러 전형을 비교하고, 형식문법·파스 트리·어휘 분석·구문 분석·코드 생성·형 검사가 어떻게 한 흐름으로 연결되는지 추적합니다.
컴퓨터는 의도를 읽지 못하므로 프로그램은 여러 번 번역된다
프로그래밍 언어는 사람의 의도를 추상화하고 압축해 컴퓨터에 전달하는 언어입니다. 사람이 이해하기 쉬운 표현을 제공하면서도, 같은 문장을 언제나 같은 의미로 해석할 수 있도록 구문과 의미가 명확해야 합니다. 최종적으로는 컴퓨터가 실행할 수 있는 이진 코드로 변환되어야 합니다.
일상 언어는 문맥에 따라 한 문장을 둘 이상의 의미로 해석할 수 있습니다. 프로그램에서는 이런 애매함이 실행 결과를 바꿀 수 있으므로, 세 층을 분리해 확인합니다.
| 확인 층 | 핵심 질문 | 문제가 생기는 예 |
|---|---|---|
| 구문 | 기호 배열이 문법에 맞는가? | 괄호나 연산자의 위치가 규칙과 다름 |
| 의미 | 문법적으로 맞는 표현이 일관된 뜻을 갖는가? | 정수와 문자열을 더하는 연산의 뜻이 정의되지 않음 |
| 실행 표현 | 하드웨어가 처리할 명령으로 바꿀 수 있는가? | 고급언어 문장을 변환하지 않고 CPU에 전달함 |
판단 핵심: “사람이 읽을 수 있다”와 “컴퓨터가 실행할 수 있다”는 같은 조건이 아닙니다. 명확한 문법과 의미, 실행 코드로의 변환이 모두 필요합니다.
기계어에서 고급언어로 갈수록 표현은 사람의 사고에 가까워진다
기계어는 0과 1의 이진 명령으로 하드웨어를 직접 제어할 수 있는 수준의 언어입니다. 기계 구조에 따라 명령과 비트 배열이 달라 사람이 작성하기 어렵고 범용성도 낮습니다. 어셈블리어는 기계 명령을 알파벳 중심의 기호로 바꾸어 읽기 쉽게 만들지만, 실행 순서를 하드웨어 관점에서 세밀하게 생각해야 합니다.
고급언어는 연산, 흐름 제어, 메모리 접근 등을 자연어에 가까운 표현으로 추상화합니다. 사람이 문제 해결 과정에 집중하기 쉬운 대신, 번역기가 이를 기계어 수준으로 바꾸는 과정이 필요합니다.
| 전형 | 표현의 중심 | 장점 | 주요 부담 |
|---|---|---|---|
| 기계어 | 0과 1의 명령 비트 | 하드웨어가 직접 처리 | 사람이 읽고 작성하기 매우 어려움 |
| 어셈블리어 | 기계 명령에 대응하는 기호 | 기계어보다 판독이 쉬움 | 기계 구조와 실행 순서를 알아야 함 |
| 고급언어 | 문제와 알고리즘에 가까운 구문 | 의도 표현과 프로그램 작성이 쉬움 | 실행 전 분석과 변환이 필요 |
오개념 교정: 어셈블리어는 기계어를 단순히 “영어로 번역한 자연어”가 아닙니다. 기계 명령과 밀접하게 대응하는 기호 언어이므로 여전히 하드웨어 의존성이 큽니다.
고급언어의 전형은 문제를 표현하는 관점으로 구분한다
고급언어를 하나의 서열로 보기는 어렵습니다. 각 전형은 계산을 무엇으로 보고 프로그램을 어떻게 조직하는지에 따라 구분됩니다. 하나의 현대 언어가 여러 전형의 성질을 함께 가질 수도 있으므로, 언어 이름보다 코드의 중심 표현을 확인하는 편이 정확합니다.
| 전형 | 프로그램을 보는 관점 | 강의자료의 대표 사례 | 판별 단서 |
|---|---|---|---|
| 초창기 고급언어 | 연산·제어·메모리 접근을 자연어에 가깝게 표현 | Fortran, COBOL, BASIC | 저수준 명령을 사람이 읽기 쉬운 문장으로 추상화 |
| 함수형 | 수식과 함수 적용의 연속 | LISP, Scheme, ML | 함수 결과를 다른 함수의 입력으로 연결 |
| 구조적 | 조건·반복·블록·함수로 제어 흐름 조직 | ALGOL 60, Pascal, C, Modula-2 | 명확한 블록 구조와 단계적 제어 |
| 논리형 | 사실과 규칙으로 도메인을 기술하고 질의 | Prolog | 실행 절차보다 성립 관계와 추론 규칙을 선언 |
| 객체지향 | 객체의 성질과 연산을 함께 조직 | Simula 67, Smalltalk-80, C++, Java | 객체·멤버 변수·메소드가 중심 |
| 스크립트 | 운영체제 관리, 자동화와 자료 처리 | 셸, awk, sed, Perl, Python | 작업 연결과 반복 실행을 간결하게 기술 |
코드 모양을 분류 단서로 사용하는 예
다음처럼 수식이 중첩되고 한 함수의 결과가 다른 함수의 입력이 되는 표현은 함수형 전형을 보여 줍니다.
(+ 3 2)
(length (a b c))
(+ 1 (if t 2 3))
반면 “father(a,b)” 같은 사실과 두 father 관계를 연결하는 규칙으로 grandfather 관계를 정의한다면 논리형 전형입니다. 객체에 상태와 동작을 함께 묶으면 객체지향 전형입니다. 괄호가 많다는 겉모양만으로 분류하지 말고 계산의 기본 단위가 함수인지, 사실과 규칙인지, 객체인지 확인해야 합니다.
형식문법은 허용되는 문장을 네 요소로 만든다
언어에는 사용할 수 있는 단어의 집합과 단어를 나열하는 규칙이 있습니다. 프로그래밍 언어는 보통 형식문법으로 구조를 기술하며, 문장 구조를 파스 트리로 나타내면 문법의 모호성이나 잘못된 조합을 찾기 쉽습니다.
- 단말 심벌: 더 이상 다른 심벌로 펼치지 않는 실제 단어·기호이며 파스 트리의 잎 노드가 됩니다.
- 비단말 심벌: 단말·비단말의 조합으로 구성되는 문법 범주이며 내부 노드가 됩니다.
- 생성 규칙: 한 비단말을 다른 단말 또는 비단말의 배열로 바꾸는 규칙입니다.
- 시작 심벌: 가장 위에서 분석을 시작하는 비단말이며 파스 트리의 루트가 됩니다.
강의의 간단한 문장 문법을 HTML에서 읽을 수 있도록 기호를 이스케이프해 나타내면 다음과 같습니다.
<문장> → <명사구> <동사구>
<명사구> → <관사> <명사> | <명사>
<동사구> → <동사> <명사구> | <동사>
<관사> → "a" | "the"
<명사> → "cat" | "rat" | "dog"
<동사> → "eat" | "ate" | "see" | "sees" | "saw"
기호 읽기: 화살표는 왼쪽 비단말을 오른쪽 구조로 대체한다는 뜻이고, 세로줄 |은 여러 대안 중 하나를 선택한다는 뜻입니다.
파스 트리는 생성 규칙을 적용한 흔적을 위에서 아래로 보여 준다
문장 “The cat ate the rat”을 분석할 때 루트인 <문장>에서 시작합니다. <문장>을 <명사구>와 <동사구>로 펼치고, 각 비단말을 생성 규칙에 따라 더 작은 비단말과 단말로 바꿉니다.
- <문장> → <명사구> <동사구>
- 첫 <명사구> → <관사> <명사> → “The” “cat”
- <동사구> → <동사> <명사구>
- <동사> → “ate”, 두 번째 <명사구> → “the” “rat”
잎을 왼쪽에서 오른쪽으로 읽으면 원래 문장이 복원됩니다. 내부 노드는 단어가 어떤 문법 범주에 속하고 서로 어떤 덩어리를 이루는지 보여 줍니다.
직접 만든 짧은 점검
같은 문법에서 “cat saw dog”도 문장이 됩니다. 두 명사구가 모두 <명사> 하나로 생성될 수 있고, saw가 <동사>의 단말이기 때문입니다. 반면 “the ate rat”은 첫 <명사구>에서 관사 뒤에 명사가 없으므로 이 문법으로 완전한 파스 트리를 만들 수 없습니다.
판단 핵심: 단어가 사전에 있다는 사실만으로 문장이 되지 않습니다. 시작 심벌에서 생성 규칙을 적용해 모든 단어를 빠짐없이 단말 잎으로 연결할 수 있어야 합니다.
소스 코드는 어휘 분석·구문 분석·코드 생성을 거쳐 실행 형태가 된다
고급언어로 쓴 코드는 사람이 읽기 쉽지만 컴퓨터가 그대로 실행할 수 없습니다. 변환 과정은 크게 어휘 분석 → 구문 분석 → 코드 생성 순서로 진행됩니다.
| 단계 | 입력에서 하는 일 | 대표 결과 | 찾아내는 문제 |
|---|---|---|---|
| 어휘 분석 | 문자열을 단어 단위로 나누고 종류를 분류 | 토큰의 나열 | 허용되지 않은 문자·단어 |
| 구문 분석 | 토큰 배열이 문법에 맞는지 확인 | 파스 트리 | 괄호·연산자·문장 구조 오류 |
| 코드 생성 | 확정된 변수·상수·제어 흐름을 저수준 명령으로 변환 | 어셈블리어 또는 기계어 코드 | 실행 표현으로 만들 수 없는 구성 |
한 문장을 단계별로 추적하는 학습 예제
학습을 위해 C와 비슷한 문장 하나를 가정합니다.
total = price + 2;
- 어휘 분석은 total, =, price, +, 2, ;를 각각 이름·대입 연산자·이름·덧셈 연산자·숫자·구분 기호 토큰으로 나눕니다.
- 구문 분석은 “대입문 → 왼쪽 변수 = 오른쪽 수식 ;” 구조가 성립하는지 확인하고 트리를 만듭니다.
- 의미 확인에서는 total에 저장할 수 있는 값인지, price와 2의 덧셈이 허용되는지 검사합니다.
- 코드 생성은 price를 읽고 2를 더한 뒤 total의 저장 위치에 쓰는 저수준 명령으로 바꿉니다.
토큰화에 성공했다고 프로그램이 올바른 것은 아닙니다. 모든 단어를 알아봐도 배열이 문법에 맞지 않을 수 있고, 문법이 맞아도 자료형이 맞지 않을 수 있습니다.
대입문은 오른쪽 값을 계산해 왼쪽이 가리키는 장소에 저장한다
대입문은 변수나 기억장치 주소에 값을 저장하는 명령형 언어의 핵심 기능입니다. 일반적인 형태는 <수식1> = <수식2>입니다. 왼쪽 수식의 l-value는 값이 저장될 위치, 즉 주소를 가리킵니다. 오른쪽 수식의 r-value는 계산되어 저장될 실제 값을 뜻합니다.
x = x + 1;
이 문장은 수학의 등식이 아닙니다. 실행 순서는 다음과 같습니다.
- 오른쪽의 x가 가리키는 주소에서 현재 값 33을 읽습니다.
- 읽은 값에 1을 더해 r-value 34를 만듭니다.
- 왼쪽 x의 l-value, 즉 같은 저장 주소에 34를 씁니다.
따라서 실행 전 x=33, 실행 후 x=34입니다. “양변의 x를 지우면 0=1이므로 틀린 문장”이라는 판단은 대입을 수학적 등호로 해석한 오개념입니다.
구분법: 오른쪽에서 변수 이름이 나오면 대개 그 위치의 값을 읽고, 왼쪽에서는 값을 저장할 위치를 지정합니다. 같은 철자의 x라도 문맥상 역할이 다릅니다.
형 검사는 허용되지 않은 연산과 정보 손실을 실행 전에 또는 실행 중에 막는다
변수형은 상수와 변수가 어떤 종류의 값을 갖는지 정합니다. 형 검사는 정수를 문자열로 나누거나 복잡한 구조체를 곱하는 것처럼 의미가 정의되지 않은 연산을 찾아내고, 부적절한 변환으로 정보가 손실되는 일을 줄입니다.
형 검사가 이루어지는 시점에 따라 정적 형 검사와 동적 형 검사를 구분합니다. 정적 검사는 주로 컴파일 과정에서, 동적 검사는 프로그램 실행 중에 이루어집니다. 실제 언어는 두 방식을 어느 정도 함께 사용할 수 있으며, 서로 다른 자료형 연산을 허용하고 변환하는 규칙도 언어마다 다릅니다.
| 구분 | 검사 시점 | 오류를 만나는 때 | 판단 예 |
|---|---|---|---|
| 정적 형 검사 | 컴파일 과정 | 실행 코드 생성 전 | 선언된 정수 변수에 호환되지 않는 값을 대입 |
| 동적 형 검사 | 실행 중 | 해당 연산이 실제 수행될 때 | 실행 경로에서 값의 현재 형을 확인 |
예를 들어 C에서 다음 코드는 문자열 리터럴이 가리키는 주소를 정수 덧셈에 사용하므로 올바른 숫자 덧셈이 아닙니다. 컴파일러 경고를 무시하고 출력된 임의의 수를 정답처럼 받아들이면 안 됩니다.
int x = 10 + "30";
printf("%d", x);
언어에 따라 숫자와 문자열의 혼합 연산을 자동 변환하는 규칙이 있을 수도 있고, 허용하지 않을 수도 있습니다. 그러므로 “10과 문자열 30을 더하면 언제나 40 또는 1030”이라고 암기하지 말고 해당 언어의 형 규칙을 확인해야 합니다.
형 변환은 목표 형과 손실 가능성을 확인한 뒤 명시한다
형 변환(type casting)은 올바른 연산을 위해 변수나 데이터의 형을 수동으로 바꾸는 것입니다. 컴파일러 경고에서 cast가 언급된다면, 단순히 문법을 맞추라는 뜻이 아니라 서로 다른 형을 어떤 의미로 결합하려는지 다시 확인해야 합니다.
정수 나눗셈의 손실을 막는 직접 구성 예제
int sum = 7;
int count = 2;
double average = (double)sum / count;
- sum과 count가 모두 정수이므로 그대로 나누면 정수 나눗셈 규칙이 먼저 적용될 수 있습니다.
- 실수 결과 3.5가 목적이라면 계산 전에 sum을 double로 명시적으로 변환합니다.
- 한 피연산자가 실수가 되어 나눗셈이 실수 연산으로 수행되고 average에 3.5가 저장됩니다.
형 문제 해결 순서: 피연산자 각각의 현재 형 확인 → 연산자가 허용하는 조합 확인 → 원하는 결과형 결정 → 정보 손실 여부 검토 → 필요한 경우에만 명시적 변환 적용.
오류 위치는 문자·구조·의미·실행 단계로 좁힌다
프로그램이 실행되지 않거나 결과가 이상할 때는 “문법 오류”라고 뭉뚱그리지 말고 변환 파이프라인을 거꾸로 점검합니다.
- 문자와 토큰: 이름, 숫자, 연산자와 구분 기호가 올바르게 인식되는가?
- 문법 구조: 토큰 배열이 생성 규칙을 만족해 파스 트리를 만들 수 있는가?
- 역할과 형: 왼쪽이 저장 가능한 위치인지, 오른쪽 값과 연산의 자료형이 호환되는가?
- 실행 의미: 대입·분기·호출 순서가 의도한 결과를 만드는가?
- 코드 변환: 분석이 끝난 구성이 어셈블리어 또는 기계어 명령으로 생성되는가?
이 순서를 사용하면 “토큰은 모두 맞지만 괄호 구조가 틀린 경우”와 “구문은 맞지만 문자열과 정수의 연산이 허용되지 않는 경우”를 분리할 수 있습니다. 오류 단계가 다르면 고치는 방법도 달라집니다.
핵심 개념 정리
- 프로그래밍 언어는 사람의 의도를 명확한 구문과 의미로 표현하고 실행 코드로 변환하기 위한 언어다.
- 기계어·어셈블리어·고급언어는 하드웨어와 사람의 사고 중 어디에 더 가까운지로 구분할 수 있다.
- 함수형·구조적·논리형·객체지향·스크립트 전형은 계산과 프로그램을 조직하는 중심 관점이 다르다.
- 형식문법은 단말 심벌, 비단말 심벌, 생성 규칙과 시작 심벌로 문장 구조를 기술한다.
- 어휘 분석은 토큰을 만들고, 구문 분석은 파스 트리를 만들며, 코드 생성은 실행 가능한 저수준 명령을 만든다.
- 대입은 오른쪽 값을 계산해 왼쪽 주소에 저장하고, 형 검사는 연산 호환성과 정보 손실을 점검한다.
처음 보는 코드도 “어떤 전형인가”만 묻지 말고 변환의 층을 따라 읽으세요. 문자를 토큰으로 나누고, 생성 규칙으로 구조를 만들고, 각 수식의 값·주소·형을 확인한 뒤 실행 명령을 생각하면 분류 문제와 파스 트리, 대입문, 형 검사 문제를 하나의 분석 절차로 해결할 수 있습니다.
예상문제 10선
1. 프로그래밍 언어가 갖추어야 할 조건을 가장 잘 설명한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
- ① 오답: 프로그램은 같은 표현이 일관된 의미를 갖도록 모호성을 제한해야 합니다.
- ② 오답: 고급언어 코드는 사람이 읽기 쉬워도 CPU가 직접 실행할 이진 명령으로 바꾸는 과정이 필요합니다.
- ③ 정답: 사람의 의도를 압축해 전달하면서 구문·의미가 명확하고 실행 형태로 변환 가능해야 합니다.
- ④ 오답: 기계어의 구성은 하드웨어 구조에 따라 달라질 수 있으므로 동일한 비트 배열을 요구하지 않습니다.
2. 기계어와 어셈블리어의 관계를 올바르게 설명한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
- ① 정답: 어셈블리어는 기계 명령과 밀접하게 대응하는 기호를 사용해 기계어보다 판독성을 높입니다.
- ② 오답: 기계어는 0과 1의 명령으로 구성되어 사람의 자연어와 거리가 멉니다.
- ③ 오답: 어셈블리어도 기계어로 변환되어야 하며 대상 하드웨어에 따라 명령이 달라질 수 있습니다.
- ④ 오답: 기계어와 어셈블리어는 고급언어보다 하드웨어 구조에 더 가깝습니다.
3. 수식의 연속과 함수 적용을 기본으로 하고 한 함수의 결과를 다른 함수의 입력으로 사용하는 전형은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
- ① 오답: 구조적 전형은 조건·반복·블록과 함수 호출로 제어 흐름을 조직하는 데 초점이 있습니다.
- ② 오답: 논리형 전형은 사실과 규칙을 정의하고 질의에 대해 추론합니다.
- ③ 오답: 객체지향 전형은 객체의 성질과 연산을 함께 정의하는 사고가 중심입니다.
- ④ 정답: 함수형 전형은 수식과 함수 적용을 연결해 계산을 표현합니다.
4. 파스 트리의 잎 노드에 놓이며 더 이상 다른 심벌로 펼치지 않는 요소는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
- ① 오답: 시작 심벌은 가장 상위 비단말로 파스 트리의 루트가 됩니다.
- ② 정답: 실제 단어나 기호인 단말 심벌은 생성의 끝에 놓여 잎 노드가 됩니다.
- ③ 오답: 비단말 심벌은 다른 심벌의 조합으로 펼쳐지며 주로 내부 노드에 놓입니다.
- ④ 오답: 생성 규칙은 심벌을 대체하는 방법이지 트리의 노드 종류가 아닙니다.
5. 시작 심벌에서 생성 규칙을 적용해 만든 파스 트리가 올바른 문장을 나타내는지 확인하는 방법은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
- ① 오답: 내부 노드는 문법 범주와 결합 구조를 보여 주므로 분석에 필요합니다.
- ② 오답: 생성이 완료된 잎은 더 펼치지 않는 단말 심벌이어야 합니다.
- ③ 정답: 루트에서 규칙을 적용한 결과의 잎들이 원래 단어 배열과 정확히 일치해야 합니다.
- ④ 오답: 개별 단어가 허용되어도 배열이 생성 규칙을 어기면 올바른 문장이 아닙니다.
6. 고급언어 소스에서 실행 가능한 코드가 만들어지는 기본 순서는?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
- ① 오답: 구문 분석 전에 문자 배열에서 토큰을 먼저 추출해야 합니다.
- ② 오답: 구조가 확정되기 전에 실행 코드를 만들 수 없습니다.
- ③ 오답: 토큰의 문법 구조를 확인하지 않고 코드를 만들면 명령과 제어 흐름을 확정할 수 없습니다.
- ④ 정답: 토큰을 만들고 문법 구조를 확인한 뒤 그 분석 결과로 저수준 코드를 생성합니다.
7. 대입문 x=x+1에서 왼쪽 x의 l-value가 뜻하는 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ①
- ① 정답: 왼쪽 수식은 오른쪽에서 계산한 값을 써 넣을 저장 장소를 가리킵니다.
- ② 오답: 계산되어 저장될 값은 오른쪽 수식의 r-value입니다.
- ③ 오답: 토큰 길이는 어휘 분석 정보이며 저장 위치의 의미와 다릅니다.
- ④ 오답: 형 변환은 자료형을 바꾸는 연산이고 l-value는 주소 역할입니다.
8. 형 검사를 수행하는 주된 이유로 가장 적절한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ②
- ① 오답: 변수 이름 길이는 식별자 규칙의 문제이며 자료형 호환성 검사 목적이 아닙니다.
- ② 정답: 연산이 의미 있는 형 조합인지 확인해 오류와 값 손실 가능성을 줄입니다.
- ③ 오답: 프로그래밍 언어는 의미의 모호성을 줄이는 방향으로 정의되어야 합니다.
- ④ 오답: 파스 트리 전개는 구문 분석의 문제이고 형 검사는 값의 종류와 연산을 다룹니다.
9. 정적 형 검사와 동적 형 검사를 올바르게 비교한 것은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ④
- ① 오답: 두 검사 방식의 일반적인 시점을 서로 뒤바꾸었습니다.
- ② 오답: 토큰과 생성 규칙은 어휘·구문 분석의 대상이며 형 검사의 구분축이 아닙니다.
- ③ 오답: 핵심 차이는 변수 이름이 아니라 형을 확인하는 시점입니다.
- ④ 정답: 정적 검사는 실행 전 컴파일 단계, 동적 검사는 실행 시점의 값과 연산을 중심으로 합니다.
10. 정수 sum=7과 count=2로 실수 평균 3.5를 얻으려 할 때 가장 적절한 방법은?
정답입니다.
오답입니다. 답안을 다시 선택해 보세요.
정답 및 해설 보기
정답: ③
- ① 오답: 문자열 연결은 수치 평균을 계산하는 나눗셈이 아닙니다.
- ② 오답: 정수 나눗셈이 먼저 끝나면 소수 부분이 이미 사라져 나중에 결과형만 바꿔도 복구되지 않습니다.
- ③ 정답: 계산 전에 피연산자 하나를 double로 바꾸면 실수 나눗셈이 적용되어 3.5를 얻습니다.
- ④ 오답: 경고 무시는 연산 의미나 정보 손실 문제를 해결하지 못합니다.
참고 자료와 작성 기준
이 글은 해당 차시 강의자료를 바탕으로 학습 목적에 맞게 재구성한 비공식 학습자료입니다. 코드 분석 과정, 직접 구성한 예제와 문제 해설은 학습자의 이해를 돕도록 구성하고 검토했습니다.
- 작성·편집: 올에이클래스 학습연구팀
- 주요 근거: 한국방송통신대학교 컴퓨터과학개론 11강 「프로그래밍 언어(1)」 강의자료, 2024
- 편집 원칙: 올에이클래스 편집 정책
- 최종 내용 검토: 2026-09-06
댓글
댓글 쓰기