| English | 의미 |
|---|---|
| compiler/kəmˈpaɪlə/ | 컴파일러 |
| source code/sɔːs kəʊd/ | 소스 코드 |
| translator/trænˈsleɪtə/ | 번역기 |
| machine code/məˈʃiːn kəʊd/ | 머신 코드 |
| assembler/əˈsemblə/ | 어셈블러 |
| assembly language/əˈsemblɪ ˈlæŋɡwɪdʒ/ | 어셈블리 언어 |
| object code/ˈɒbdʒekt kəʊd/ | 오브젝트 코드 |
| executable/ɪɡˈzekjʊtəbl/ | 실행 파일 |
| interpreter/ɪnˈtɜːprɪtə/ | 인터프리터 |
| bytecode/ˈbaɪtkəʊd/ | 바이트코드 |
| portable/ˈpɔːtəbl/ | 이식 가능함 |
| virtual machine/ˈvɜːtʃuːəl məˈʃiːn/ | 가상 머신 |
| just-in-time compilation/dʒʌst ɪn taɪm ˌkɒmpɪˈleɪʃn/ | 지연 컴파일 |
| integrated development environment/ˈɪntɪɡreɪtɪd dɪˈveləpmənt enˈvaɪrənmənt/ | 통합 개발 환경 |
| context-sensitive prompts/ˈkɒntekst ˈsensɪtɪv prɒmpts/ | 문맥 민감提示 |
| auto-complete/ˈɔːtəʊ kəmˈpliːt/ | 자동 완성 |
| dynamic syntax checks/daɪˈnæmɪk ˈsɪntæks tʃeks/ | 동적 구문 검사 |
| prettyprint/ˈpretɪprɪnt/ | 코드 포맷팅 |
| breakpoints/ˈbreɪkpɔɪnts/ | 브레이크 포인트 |
| single stepping/ˈsɪŋɡl ˈstepɪŋ/ | 단위 실행 |
| report window/rɪˈpɔːt ˈwɪndəʊ/ | 보고서 창 |
컴퓨터가 자체 프로그램을 작성할 수 있을 거라고 믿은 사람은 아무도 없었다
- 1952 그레이스 호퍼는 프로그래머의 표기법을 기계어 명령어로 변환하는 첫 번째 컴파일러를 개발했다. 그녀는 나중에 이렇게 말했다. "누구도 그것이 가능하다고 믿지 않았다. 내가 작동하는 컴파일러를 가지고 있었지만 아무도 건드리려 하지 않았다. 그들은 컴퓨터가 산술 연산만 할 수 있다고 했다."
- 당신이 사용以来的 모든 언어는 이 개념 위에 세워져 있다: 당신은 사람들이 읽을 수 있는 소스 코드를 작성하고, 번역기가 프로세서를 실행하는 기계어를 생성한다.
- 세 가지 종류의 번역기와 하나의 유명한 하이브리드_program이 있으며, 시험에서는 언제 어떤 것을 사용할 것인지, 그리고 왜 그렇게 해야 하는지를 설명하길 원한다.
- 이 수업은 번역기에 대해 다루며, 컴파일과 인터프리팅 사이의Trade-offs, 자바가 두 가지를 혼합한 방식, 그리고 IDE가 제공하는 도구들에 관해 설명한다.
소스 코드, 기계어 및 어셈블러
- 프로세서는 기계어만 실행한다. 번역기(translator) 는 사람들이 읽을 수 있는 프로그램을 기계어로 변환한다.
- 어셈블러(assembler) 는 어셈블리 언어를 기계어로 번역한다: 각 기호화 명령어인
LDD,ADD,JMP는 정확히 하나의 기계어 명령어로 변환되며, 라벨과 기호적 주소는 실제 주소로 교체된다. - 어셈블리는 프로그래머가 하드웨어에 직접 제어를 필요로 하는 경우에 사용된다: 장치 드라이버, 임베디드 시스템, 게임의 가장 내부적인 루프 등.
각 번역기를 그 기능과 매칭하십시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
어셈블러: 어셈블리→기계어; 컴파일러: 한 번에 실행 파일 생성; 인터프리터: 실행 시 점-by-점(줄 단위).
컴파일러
- 컴파일러는 실행되기 전에 고수준 프로그램의 전체를 기계어로 변환하여 오브젝트 코드를 생성합니다. 이는 실행 가능한 파일을 생성하며, 번역 과정이 끝난 후 모든 구문 오류를 한 목록으로 함께 보고합니다.
- 프로그램 자체를 실행하지는 않습니다. 코드가 정상화되면 컴파일러가 설치되어 있지 않아도 실행 파일은 원하는 만큼 여러 번 실행할 수 있습니다.
- 실행 중에는 아무것도 변환하지 않으므로 실행 속도가 빠르지만, 기계어는 특정 프로세서와 운영 체제에만 종속됩니다.
컴파일러 경로: 소스 코드부터 실행 가능한 프로그램까지
컴파일러가 어떻게 작동하는지를 단계별로 살펴보십시오 — 실행 전에 전체 프로그램을 한 번에 번역합니다. interpreter는 줄 단위로 번역하고 실행하므로 이와 대비하여 설명하십시오.
컴파일러가 인터프리터와 다른 점은 다음과 같습니다:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
컴파일러는 한 번에 번역되어 컴파일러 없이 실행되는 실행 파일을 만듭니다. 인터프리터는 줄 단위로 실행합니다.
코드를 작성하는 것부터 실행하는 것까지 컴파일러 경로를 순서대로 배열하십시오.
난이도 3/5 · 200 코인 + 오늘 첫 완료 시 소액 보너스
컴파일러는 전체 프로그램을 한 번에 실행 파일로 번역하며, 해당 파일은 컴파일러 없이 실행됩니다.
인터프리터
- 인터프리터는 고수준 프로그램의 문장 하나를 한 번에 번역하고 바로 실행한 후 다음 문장으로 넘어갑니다.
- 실 가능한 파일을 생성하지 않습니다.symptom을 처음 encountering하면 해당 줄과 함께 보고하므로 수정 후 다시 실행할 수 있습니다.
- 프로그램이 실행될 때마다 소스 코드와 인터프리터가 모두 존재해야 하며, 매번 재번역되므로 실행 속도가 느리지만, 인터프리터가 있는 곳이라면 동일한 소스 코드를 어디에서나 실행할 수 있습니다.

한 번 번역하여 배포하거나, 진행하면서 번역하기
인터프리터는 언제 오류를 보고합니까?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
인터프리터는 줄 단위로 실행하므로 해당 줄에 도달하는 순간 오류를 보고합니다 — 개발 중 Useful합니다.
인터프리터는 독립적인 실행 파일을 생성하지 않으므로, 프로그램을 실행하려면 인터프리터 자체가 설치되어야 합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
인터프리터는 매번 줄 단위로 번역하고 실행합니다 — 컴파일러와 달리 별도의 실행 파일로 배분할 것이 없습니다.
장단점 (채점 기준서 기준)
| 컴파일러 | 인터프리터 | |
|---|---|---|
| 실행 속도 | 빠름(이미 기계어) | 느림(매 행 시 번역됨) |
| 사용자에게 필요한 것 | 실행 파일만; 소스는 비공개 유지 | 소스 코드와 인터프리터 |
| 오류 탐지 | 번역 후 한 번에 전체 나열 | 개발 중 각 줄마다 즉시 보고 |
| 코드 변경 | 전체 재컴파일 | 편집 후 즉시 재실행 |
| 이식성 | 단일 플랫폼; 각 플랫폼마다 재컴필 필요 | 인터프리터가 있는 곳이라면 어디서나 실행 가능 |
다음과 같은 경우에 컴파일러를 선택해야 합니다:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
컴파일된 실행 파일은 빠르고 독립적입니다. 인터프리터는 빠른 개발과 이동식 스크립트에 적합합니다.
프로그램을 개발 중일 때 인터프리터를 사용하는 데 유리한 점은 무엇입니까? 모든 해당하는 것을 선택하십시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
빠른 편집-실행 사이클과 줄 단위의 오류 보고가 인터프리터의 강점입니다. 실행 속도는 컴파일러의 영역입니다.
worked example: 작성 중에는 인터프리터, 완성 후에는 컴파일러 사용
- 개발자가 프로그램을 작성할 때는 인터프리터를 사용하고, 완료된 후에는 컴파일러를 사용합니다. 각 도구가 어떻게 사용되는지 설명하십시오. [4]
- 개발 단계에서 인터프리터는 완전한 번역을 기다리지 않고 부분적으로 작성된 프로그램을 즉시 실행합니다. 오류를 encountered하면 해당 줄을 보고하므로 개발자는 수정 후 즉시 다시 실행할 수 있습니다: 디버깅을 용이하게 하는 빠른 수정-실 사이클입니다.
- 프로그램이 완성되면, 컴파일러는 전체 프로그램을 더 빠르게 실행할 수 있는 실행 파일로 번역하며, 사용자의 컴퓨터에 번역기를 필요로 하지 않고 소스 코드를 비공개로 유지합니다.
- 각 도구당 2점: 기능 및 해당 단계에 적합한 이유.
자바: 부분 컴파일, 부분 인터프리트
- 자바 소스는 바이트코드라는 압축적이며 이식 가능한 중간 형태로 컴파일되며, 이는 실제 프로세서를 위한 기계어가 아닙니다.
- 가상 머신, 즉 JVM은 바이트코드를 어떤 기계에서도 인터프리팅하거나, just-in-time 컴파일(JIT) 을 사용하여执行程序 중 가장 빈번히 사용하는 부분을 네이티브 코드로 변환합니다.
- 컴파일 단계에서는 조기에 구문 오류를 포착하고, 인터프리팅 단계에서는 하나의 바이트코드 파일을 JVM이 있는 곳이라면 어디에서나 실행할 수 있게 합니다. 콘솔 모드의 자바는 명령줄에서 실행되는 텍스트 프로그램으로 교재의 예시입니다.

한 번 작성, 어디서나 실행: 하나의 바이트코드 파일, 플랫폼별 하나의 JVM
Java는 JVM 위에서 실행되는 바이트코드에 컴파일됩니다. 주요 장점은:
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
바이트코드는 플랫폼 독립적이며, 어떤 JVM에서도 실행 가능합니다(JIT가 핫 코드에 대해 네이티브 속도에 가까운 성능 제공).
Java의 컴파일러는 플랫폼 독립적인 ____을 생성하며, 가상머신이 이를 해석합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
바이트코드는 중간 형식입니다: 한 번 컴파일된 후 any 플랫폼의 JVM에 의해 실행됩니다. 이것이 자바가 부분적으로 컴파일되고 부분적으로 해석되는 이유입니다.
worked example: 왜 바이트코드로 컴파일한 뒤 인터프리팅하는가?
- 자바가 왜 기계어로 직접 컴파일하지 않고 바이트코드로 컴파일하는지 설명하십시오.
- 컴파일러는 특정 프로세서와 운영 체제를 위한 기계어를 생성하므로, 한 기계에서 컴파일된 프로그램은 다른 기계에서 실행되지 않습니다.
- 자바의 컴파일러는 대신 가상 머신을 타겟으로 하므로 바이트코드는 모든 플랫폼에서 동일합니다. 각 플랫폼은 이를 인터프리팅하기 위해 자체 JVM을 제공합니다.
- 비용은 속도입니다: 바이트코드를 인터프리팅하는 것은 네이티브 코드를 실하는 것보다 느리므로, JVM은 hotpath 부분에 just-in-time 컴파일을 추가합니다.
IDE와 네 가지 기능 그룹
- 통합 개발 환경(IDE) 은 프로그램 작성, 번역, 실행, 디버깅을 위한 단일 애플리케이션입니다. 교재는其特征를 네 가지 그룹으로 분류합니다.
- 코딩용: 컨텍스트 기반 프롬프트가 해당 지점에 맞는 식별자, 키워드 또는 파라미터를 팝업하며, 자동 완성이 이름을 완성해 줍니다.
- 초기 오류 탐지용: 동적 구문 체크는 번역 전 입력 중 실수를 강조 표시합니다. 표시용: prettyprint은 일관된 두공을 사용하여 키워드, 식별자, 문자열, 주석을 서로 다른 색상으로 표시하며, 확대 및 축소는 블록 본체를 숨겨 outlines를 볼 수 있게 합니다.
- 디버깅용: breakpoint는 표시된 줄에서 프로그램 정지; 싱글 스텝은 줄 단위로 실행; 창은 변수 및 표현식의 값을 표시; 보고 창은 오류, 경고, 출력을 나열합니다.

코딩, 오류 탐지, 표시, 디버깅
IDE의 디버거에 포함되는 기능은 무엇입니까?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
디버거를 사용하면 브레이크포인트를 설정하고, 코드를 줄 단위로 스텝하며, 변수 값을 검사할 수 있습니다.
각 IDE 기능을 syllabus 그룹과 매칭하십시오.
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
코딩, 초기 오류 탐지, 표시, 디버깅: syllabus가 명시한 네 가지 그룹으로, 여기에는 각각 하나의 기능이 있습니다.
worked example: Calculate()의 버그 찾기
- 함수
Calculate()가 예상치 못한 값을 반환합니다. IDE의 디버깅 기능이 원인을 찾는 데 어떻게 도움이 되는지 묘사하십시오. [4] Calculate()첫 번째 줄에 breakpoint를 설정하여, 전체를 실행하는 대신 그 지점에서 정지하도록 합니다.- 함수를 싱글 스텝으로 한 줄씩 실행합니다. 각 단계 후 변수 값 및 IDE에 감시하도록 요청한 표현식의 값을 읽어내어 기대값과 비교합니다.
- 값이 틀어진 첫 번째 줄이 논리 오류의 위치입니다. 보고 창은沿途의 runtime 오류 메시지 및 출력을 보여줍니다.

일시정지, 단계 실행,inspect
디버거를 사용하여 논리 오류를 찾는 단계를 순서대로 배열하십시오.
난이도 3/5 · 200 코인 + 오늘 첫 완료 시 소액 보너스
일시 정지, 스텝, 검사, 비교, 위치 파악. 각각은 syllabus에서 나열한 디버깅 기능 중 하나입니다.
놓칠 수 있는 점
- 컴파일러는 프로그램을 실행하지 않는다. 전체를 번역하여 실행 가능한 파일을 생성한다.
- 인터프리터는 첫 번째 오류에서 멈추지만, 컴파일러는 모든 오류를 나열한다. 이 둘을 바꾸어 쓰면 안 된다.
- "빠르다"에는 런타임에라는 조건이 필요하고, "이동 가능하다"에는 인터프리터가 있는 곳이라면 어디서나 동일한 소스가 실행된다는 조건이 필요하다.
- IDE 기능을 커리큘럼의 네 가지 그룹으로 분류하라: 브레이크 포인트는 디버깅,prettyprint은 표현, 컨텍스트 민감 프롬프트는 코딩이다. 바이트코드는 기계 언어가 아니다.
이해했습니다
- 어셈블러: 어셈블리 명령어 하나당 기계 언어 명령어 하나 · 컴파일러: 프로그램 전체를 실행 전에 번역하여 실행 가능한 파일과 모든 오류 목록을 생성함 · 인터프리터: 문장 하나씩 순차적으로 실행하며 첫 번째 오류에서 멈추고 실행 가능한 파일 없음
- 컴파일러는 속도, 배포 및 소스의 비공개성을 위해 사용하며, 인터프리터는 빠른 편집-실행 사이클, 이동 가능성 및 초급자를 위해 사용된다.
- Java는 JVM이 해석하거나 JIT 컴파일하는 이동 가능한 바이트코드로 컴파일됨: 부분적으로 컴파일되고 부분적으로 해석됨
- 네 가지 그룹의 IDE 기능: 코딩(컨텍스트 민감 프롬프트), 초기 오류 탐지(동적 구문 검사), 표현(prettyprint, 확장 및 축소), 디버깅(브레이크 포인트, 단일 스텝, 변수, 리포트 창)