27|프로그램 설계와 언어 번역·모듈화·컴파일러·로더

글 요약

사무자동화산업기사 – 자료·구조·인터페이스·절차 설계와 N-S 차트, 모듈화의 응집도·결합도, 원시·목적·로드 모듈과 컴파일러·인터프리터·링커·로더의 기능을 정리합니다.

요구사항을 곧바로 코드로 옮기면 기능 사이의 관계가 복잡해지고 수정 범위도 커질 수 있습니다. 프로그램을 구현하기 전에는 데이터의 구조, 모듈의 책임, 사용자와 시스템 사이의 인터페이스, 처리 절차를 먼저 설계해야 합니다.

이 장에서는 프로그램 설계와 언어 번역의 핵심을 정리합니다. 자료·구조·인터페이스·절차 설계와 N-S 차트, 모듈화의 응집도·결합도를 살펴본 뒤 원시 프로그램이 전처리·컴파일·어셈블·링크·로딩을 거쳐 실행되는 과정과 컴파일러·인터프리터·어셈블러·크로스 컴파일러의 차이를 연결합니다.

이 장의 핵심 내용

  • 프로그램 설계는 요구사항을 실행 가능한 자료 구조·모듈 구조·인터페이스·처리 절차로 구체화하는 과정입니다.
  • 자료 설계는 데이터를 어떤 구조로 표현할지, 구조 설계는 모듈을 어떻게 나누고 연결할지 결정합니다.
  • 인터페이스 설계는 모듈·시스템·사용자 사이의 입출력과 상호작용 방식을 정의합니다.
  • 절차 설계는 각 기능을 수행하는 알고리즘과 처리 순서를 구체화합니다.
  • N-S 차트는 순차·선택·반복 구조를 중첩된 사각형으로 나타내는 구조적 설계 표현법입니다.
  • 모듈의 독립성을 높이려면 모듈 내부의 응집도는 높이고 모듈 사이의 결합도는 낮춰야 합니다.
  • 일반적인 번역 흐름은 전처리 → 컴파일 → 어셈블 → 링크 → 로딩 → 실행입니다.
  • 목적 파일은 기계어 코드와 데이터·심벌·재배치 정보를 포함할 수 있으며 보통 링크 과정을 거쳐야 실행 파일이 됩니다.
  • 링커는 목적 파일과 라이브러리를 결합하고 외부 심벌을 해결하며 주소를 재배치해 실행 파일 또는 로드 모듈을 만듭니다.
  • 로더는 실행 파일을 기억장치에 배치하고 필요한 재배치·동적 연결을 수행한 뒤 실행을 시작합니다.
  • 컴파일러는 프로그램을 미리 번역하여 목적 코드나 실행 파일을 만들고, 인터프리터는 명령을 읽어 가며 번역과 실행을 진행합니다.
  • 크로스 컴파일러는 컴파일을 수행하는 호스트와 생성된 프로그램이 실행될 타깃이 서로 다른 번역기입니다.

프로그램 설계는 무엇을 결정하는 과정인가?

프로그램 설계(Program Design)는 요구사항 분석 결과를 바탕으로 프로그램을 실제로 구현할 수 있도록 데이터 구조, 모듈의 구성과 관계, 외부 인터페이스, 알고리즘과 처리 절차를 구체화하는 과정입니다. 설계 결과는 구현·시험·유지보수의 기준이 됩니다.

설계 영역핵심 질문주요 산출물·예
자료 설계
Data Design
어떤 데이터를 어떤 형식과 구조로 저장할 것인가?레코드, 배열, 리스트, 파일 구조, 데이터 모델
구조 설계
Architecture Design
시스템을 어떤 모듈로 나누고 모듈 사이를 어떻게 연결할 것인가?모듈 계층, 구성 요소 관계, 호출 구조
인터페이스 설계
Interface Design
사용자·외부 시스템·모듈 사이에서 무엇을 주고받을 것인가?화면, API, 매개변수, 입출력 규약
절차 설계
Procedural Design
각 기능을 어떤 알고리즘과 순서로 수행할 것인가?의사코드, 순서도, N-S 차트, 처리 명세
N-S 차트
Nassi–Shneiderman Chart
순차·선택·반복 구조를 화살표 없이 어떻게 표현할 것인가?중첩된 사각형으로 구성된 구조적 도표
N-S 차트는 독립된 설계 단계라기보다 절차적 논리를 표현하는 구조적 도구로 이해하는 것이 정확합니다.

설계의 목적: 구현 전에 구조와 책임을 분명히 하여 복잡성을 낮추고 변경·시험·재사용이 가능한 프로그램을 만드는 것입니다.

N-S 차트는 제어 구조를 어떻게 표현하는가?

N-S 차트는 프로그램의 논리를 사각형 블록의 포함 관계로 나타냅니다. 화살표보다 블록의 위아래 순서와 중첩을 사용하므로 구조적 프로그래밍의 순차·선택·반복을 명확하게 표현할 수 있습니다.

제어 구조표현 방식간단한 예
순차처리 블록을 위에서 아래로 차례로 배치입력 → 계산 → 출력
선택하나의 블록을 조건에 따라 두 개 이상의 영역으로 분할점수 ≥ 60이면 합격, 아니면 불합격
반복조건과 반복할 처리 블록을 하나의 영역으로 묶음데이터가 남아 있는 동안 처리 반복

N-S 차트의 장점

  • 순차·선택·반복의 구조가 명확하게 보입니다.
  • 임의의 점프로 흐름이 흩어지는 것을 줄일 수 있습니다.
  • 의사코드나 구조적 프로그램으로 옮기기 쉽습니다.

N-S 차트의 한계

  • 규모가 커지면 블록이 깊게 중첩될 수 있습니다.
  • 모듈 사이의 전체 호출 관계를 표현하는 데는 별도 구조도가 더 적합할 수 있습니다.
  • 데이터 구조와 인터페이스를 모두 설명하는 도구는 아닙니다.

모듈화는 왜 필요한가?

모듈화(Modularity)는 하나의 큰 프로그램을 명확한 책임을 가진 작은 단위로 분리하는 것입니다. 모듈은 입력을 받아 하나의 기능이나 관련된 기능 집합을 수행하고 결과를 제공하는 독립적인 프로그램 구성 단위입니다.

  • 복잡한 문제를 작은 단위로 나누어 이해하기 쉬워집니다.
  • 모듈별로 구현·시험·수정할 수 있어 오류 위치를 찾기 쉽습니다.
  • 검증된 모듈을 다른 프로그램이나 기능에서 재사용할 수 있습니다.
  • 여러 개발자가 모듈 단위로 작업을 분담하기 쉽습니다.
  • 변경이 다른 모듈에 미치는 영향을 줄일 수 있습니다.

주의: 모듈을 지나치게 잘게 나누면 호출 관계와 인터페이스가 많아져 오히려 복잡성이 커질 수 있습니다. 기능의 책임과 변경 이유를 기준으로 적절한 크기를 정해야 합니다.

응집도와 결합도는 모듈 독립성을 어떻게 나타내는가?

모듈 독립성은 모듈이 하나의 책임에 집중하면서 다른 모듈의 내부 구현에 적게 의존하는 정도입니다. 이를 판단할 때 모듈 내부의 관계를 나타내는 응집도와 모듈 사이의 의존 관계를 나타내는 결합도를 함께 봅니다.

비교 항목응집도 Cohesion결합도 Coupling
관찰 대상하나의 모듈 내부 요소 사이의 관련성서로 다른 모듈 사이의 의존성
좋은 방향높을수록 좋음낮을수록 좋음
좋은 상태하나의 명확한 기능과 책임에 집중필요한 정보만 단순한 인터페이스로 교환
나쁜 상태관련 없는 기능이 한 모듈에 섞임다른 모듈의 내부 데이터와 처리 방식에 강하게 의존
기대 효과이해·시험·재사용·변경이 쉬움변경 전파와 오류 영향을 줄임
효과적인 모듈 설계의 기본 원칙은 높은 응집도와 낮은 결합도입니다.

높은 응집도의 예

주문 금액 계산 모듈이 수량·가격·할인 규칙을 이용해 주문 금액을 계산하는 책임에만 집중합니다.

강한 결합도의 예

주문 모듈이 결제 모듈의 내부 변수와 저장 구조를 직접 수정하면 결제 모듈 변경이 주문 모듈까지 전파됩니다.

암기 기준: 모듈 내부는 강하게 모으고, 모듈 사이는 약하게 연결합니다. 즉, 응집도는 높게 하고 결합도는 낮게 합니다.

원시 프로그램은 어떤 과정을 거쳐 실행되는가?

언어 번역 과정은 ‘원시 프로그램 → 컴파일러 → 목적 프로그램 → 링커 → 로드 모듈 → 로더 → 실행’으로 단순화할 수 있습니다. 다만, 실제 C 계열 도구 체인에서는 전처리·컴파일·어셈블·링크 단계가 순서대로 진행되고, 운영체제의 로더와 런타임 링커가 실행 이미지를 기억장치에 구성합니다.

단계입력주요 처리대표 출력
전처리원시 코드와 전처리 지시문헤더 포함, 매크로 확장, 조건부 컴파일 등의 사전 처리확장된 원시 코드
컴파일고급 언어 원시 코드구문·의미 분석, 최적화, 저수준 코드 생성어셈블리 코드 또는 중간 코드
어셈블어셈블리 코드기계 명령과 목적 파일 형식으로 변환재배치 가능한 목적 파일
링크목적 파일과 라이브러리외부 심벌 해결, 단면 결합, 주소 재배치실행 파일 또는 로드 모듈
로딩실행 파일과 공유 라이브러리기억장치 배치, 필요한 재배치·동적 연결, 실행 환경 구성실행 중인 프로세스 이미지
실행기억장치에 적재된 프로그램시작 지점부터 명령 수행프로그램 결과
‘번역’은 넓게는 ‘전처리·컴파일·어셈블·링크’을 포함하는 전체 빌드 과정을 가리킬 수 있습니다.
여기서 라이브러리는 어셈블 단계에서 생성되는 결과가 아니라, 목적 파일과 함께 링커에 입력되는 별도의 자료입니다.

시험 흐름: ‘원시 프로그램 → 컴파일러 → 목적 프로그램 → 링커 → 로드 모듈 → 로더 → 실행’의 순서를 기본으로 기억하고, 전처리와 어셈블 단계를 세부 과정으로 연결합니다.

언어 번역 과정의 용어는 어떻게 구분하는가?

용어의미실행 가능 여부
원시 프로그램
Source Program
프로그래머가 고급 언어나 어셈블리어로 작성한 번역 전 프로그램그 자체로 CPU가 직접 실행하지 못하는 경우가 일반적
목적 프로그램·목적 파일
Object Program·Object File
번역 결과로 생성된 기계어 코드·데이터·심벌·재배치 정보를 포함하는 파일보통 다른 목적 파일·라이브러리와 링크하기 전에는 직접 실행할 수 없음
라이브러리
Library
여러 프로그램에서 재사용하도록 미리 작성·번역된 함수와 코드의 집합독립 실행보다 다른 프로그램에 연결하여 사용
로드 모듈·실행 파일
Load Module·Executable
링커가 목적 파일과 라이브러리를 결합하여 로더가 적재할 수 있게 만든 프로그램운영체제와 형식이 지원하면 실행 가능
프로세스 이미지실행 파일의 코드·데이터·스택·힙·공유 라이브러리가 기억장치에 배치된 상태CPU가 실제로 실행하는 상태
목적 프로그램과 로드 모듈을 구분할 수도 있지만, 실제 도구와 파일 형식에 따라 용어의 사용 범위가 다를 수 있습니다.

목적 프로그램 주의: ‘기계어로 번역된 상태’라고 해서 항상 즉시 실행 가능한 것은 아닙니다. 목적 파일은 미해결 심벌과 재배치 정보를 포함할 수 있으므로 링크 과정을 거쳐야 합니다.

링커는 목적 파일을 어떻게 실행 파일로 만드는가?

링커(Linker) 또는 링키지 에디터(Linkage Editor)는 독립적으로 만들어진 여러 목적 파일과 라이브러리를 결합하여 하나의 실행 파일이나 로드 모듈을 만듭니다.

링커의 기능설명
심벌 해결한 목적 파일에서 참조한 함수·변수의 정의를 다른 목적 파일이나 라이브러리에서 찾음main.ocalculate()calc.o에서 찾음
단면 결합각 목적 파일의 코드·데이터 영역을 실행 파일의 영역으로 합침여러 .text.data 영역 결합
재배치최종 배치 주소에 맞게 코드와 데이터의 주소 참조를 수정함수와 전역 변수의 최종 주소 반영
라이브러리 연결필요한 라이브러리 코드 또는 공유 라이브러리 참조를 포함표준 입출력 함수 연결
실행 파일 생성운영체제가 적재할 수 있는 파일 형식과 진입점을 구성ELF·PE 형식의 실행 파일

정적 링크

필요한 라이브러리 코드를 실행 파일에 포함합니다. 실행 파일은 커질 수 있지만 배포 시 외부 라이브러리 의존성을 줄일 수 있습니다.

동적 링크

공유 라이브러리를 실행 시점 또는 적재 시점에 연결합니다. 코드 공유와 업데이트에 유리하지만 필요한 라이브러리의 호환성이 중요합니다.

링커 오류: 선언만 있고 실제 정의를 찾지 못한 외부 함수나 변수는 ‘정의되지 않은 심벌’ 오류의 원인이 됩니다.

로더는 실행 파일을 어떻게 기억장치에 배치하는가?

로더(Loader)는 보조기억장치의 실행 파일을 주기억장치의 프로세스 주소 공간에 배치하고 실행할 수 있는 상태를 만듭니다. 로더의 일반 기능은 할당·연결·재배치·적재로 다음과 같습니다.

로더 관련 기능의미
할당
Allocation
프로그램의 코드와 데이터가 들어갈 기억장치 영역을 확보하고 배치 주소를 정함
연결
Linking
외부 심벌과 다른 모듈 또는 공유 라이브러리 사이의 참조를 연결함
재배치
Relocation
실제 적재 주소에 맞도록 주소 의존적인 코드와 데이터를 수정함
적재
Loading
기계 명령과 데이터를 기억장치에 물리적·논리적으로 배치함
실행 시작프로그램의 진입점에 제어를 넘겨 실행을 시작함
현대 시스템에서는 정적 링커·운영체제 로더·런타임 링커가 기능을 나누어 수행하므로 구현에 따라 역할의 경계가 달라질 수 있습니다.

절대 로더의 기능별 수행 주체

기능수행 주체
할당·연결프로그래머
재배치어셈블러
적재로더
절대 로더는 프로그램이 정해진 절대 주소에서 실행된다는 전제의 단순한 로더입니다.

연결과 로딩의 구분: 일반적으로 목적 파일을 하나의 실행 파일로 결합하는 주체는 링커이고, 실행 시 공유 라이브러리를 연결하는 작업은 런타임 링커 동적 로더가 수행할 수 있습니다.

언어 번역기에는 어떤 종류가 있는가?

종류입력주요 기능대표 출력·결과
컴파일러
Compiler
고급 언어 원시 프로그램프로그램 전체 또는 큰 번역 단위를 분석하고 저수준 코드로 변환목적 코드·어셈블리 코드·실행 파일
인터프리터
Interpreter
원시 코드 또는 중간 코드명령을 읽어 가며 번역·실행전통적 분류에서는 독립 목적 프로그램을 만들지 않고 실행 결과를 생성
어셈블러
Assembler
어셈블리 프로그램니모닉과 심벌을 기계 명령·목적 파일로 변환목적 파일
크로스 컴파일러
Cross Compiler
호스트에서 작성한 원시 프로그램호스트와 다른 타깃 환경용 코드를 생성타깃용 목적 파일·실행 파일
링키지 에디터
Linkage Editor
여러 목적 파일과 라이브러리심벌 해결·재배치·결합로드 모듈·실행 파일
전처리기
Preprocessor
전처리 지시문이 포함된 원시 코드매크로 확장·파일 포함·조건부 컴파일 등의 사전 변환확장된 원시 프로그램

표현 주의: 주석 제거·상수 치환·매크로 확장은 전처리기의 대표 기능으로 출제될 수 있습니다. 다만 실제 언어에서는 주석 처리와 상수 처리의 단계가 서로 다를 수 있습니다.

컴파일러와 인터프리터는 무엇이 다른가?

비교 항목컴파일러인터프리터
번역 시점실행 전에 프로그램을 미리 번역실행 과정에서 명령을 읽으며 번역
번역 단위프로그램 전체 또는 큰 단위문장·명령 또는 실행 가능한 중간 단위
목적 프로그램일반적으로 목적 코드나 실행 파일을 생성전통적 시험 분류에서는 별도 목적 프로그램을 생성하지 않음
반복 실행번역된 결과를 사용하므로 일반적으로 빠름실행할 때 번역 과정이 반복되어 상대적으로 느릴 수 있음
오류 확인번역 단계에서 여러 오류를 함께 보고할 수 있음실행한 지점의 오류를 즉시 확인하기 쉬움
배포 요소타깃용 실행 파일과 필요한 라이브러리인터프리터 또는 실행 환경과 원시·중간 코드
대표적인 교재 예C, FORTRAN, COBOL, PascalBASIC, LISP
현대 언어는 바이트코드·가상 머신·JIT 컴파일을 함께 사용할 수 있으므로 언어 자체보다 구현 방식으로 구분하는 것이 더 정확합니다.

컴파일 방식이 유리한 경우

  • 같은 프로그램을 여러 번 실행할 때
  • 실행 성능과 최적화가 중요할 때
  • 원시 코드를 배포하지 않고 실행 파일을 제공할 때

인터프리트 방식이 유리한 경우

  • 코드를 작성하고 즉시 결과를 확인할 때
  • 대화형 실행과 빠른 시험이 중요할 때
  • 동적인 실행 환경과 높은 유연성이 필요할 때

시험 답안과 실제 구현: 시험에서는 컴파일러와 인터프리터를 대조적으로 구분하지만, Java·Python·JavaScript 등의 구현은 바이트코드와 인터프리터·JIT 컴파일을 함께 사용할 수 있습니다.

크로스 컴파일러는 어떤 기계의 코드를 만드는가?

크로스 컴파일러는 컴파일러가 실행되는 호스트 시스템과 생성된 프로그램이 실행될 타깃 시스템이 서로 다른 컴파일러입니다. 개발 도구를 직접 실행하기 어려운 임베디드 장치·마이크로컨트롤러·모바일 장치용 프로그램을 개발할 때 활용합니다.

구분의미
호스트컴파일러가 실제로 실행되는 개발 컴퓨터x86-64 Windows 또는 Linux PC
타깃생성된 목적 코드와 실행 파일이 동작할 시스템ARM 기반 임베디드 보드
출력타깃의 명령어 집합·ABI·운영체제 형식에 맞춘 코드ARM ELF 실행 파일

핵심: 크로스 컴파일러는 현재 컴퓨터용 코드가 아니라 다른 기종 또는 다른 실행 환경용 기계어를 생성합니다.

전처리기는 컴파일 전에 무엇을 처리하는가?

전처리기(Preprocessor)는 컴파일러가 본격적으로 구문과 의미를 분석하기 전에 원시 코드의 일부를 확장하거나 선택합니다. 다음은 C 계열 전처리 지시문의 대표적인 형태입니다.

#include <stdio.h>
#define MAX_COUNT 100

#if MAX_COUNT > 50
const char *message = "large";
#else
const char *message = "small";
#endif
  • #include는 다른 파일의 내용을 포함합니다.
  • #define은 매크로 이름과 치환 내용을 정의합니다.
  • #if·#else·#endif는 조건에 따라 컴파일할 코드 영역을 선택합니다.
  • 전처리 결과는 컴파일러가 분석할 확장된 원시 프로그램이 됩니다.

전처리와 컴파일: 전처리기는 소스 텍스트를 변환하고, 컴파일러는 변환된 프로그램의 구문·의미를 분석하여 저수준 코드를 생성합니다.

하나의 C 프로그램을 단계별로 번역하면 어떻게 되는가?

다음 명령은 GCC 계열 도구에서 각 번역 단계의 중간 결과를 확인하는 예입니다. 시험에서 명령어 자체를 암기할 필요는 없지만 각 파일이 어느 단계에서 만들어지는지 이해하는 데 도움이 됩니다.

gcc -E main.c -o main.i    # 전처리 결과
gcc -S main.i -o main.s    # 어셈블리 코드
gcc -c main.s -o main.o    # 목적 파일
gcc main.o util.o -o app   # 링크하여 실행 파일 생성
파일단계의미
main.c원시 프로그램프로그래머가 작성한 C 코드
main.i전처리 결과헤더와 매크로 등이 확장된 원시 코드
main.s컴파일 결과타깃 기계의 어셈블리 코드
main.o어셈블 결과링커가 입력으로 사용하는 목적 파일
app링크 결과운영체제가 적재할 수 있는 실행 파일

시험에서 자주 혼동되는 개념

목적 파일과 실행 파일

목적 파일은 다른 모듈과 연결할 재배치 가능한 중간 결과이고, 실행 파일은 링크를 마쳐 로더가 적재할 수 있는 결과입니다.

링커와 로더

링커는 목적 파일과 라이브러리를 결합하여 실행 파일을 만들고, 로더는 실행 파일을 기억장치에 배치해 실행을 준비합니다.

컴파일러와 어셈블러

컴파일러는 고급 언어를 저수준 코드로 변환하고, 어셈블러는 어셈블리어를 기계어 목적 파일로 변환합니다.

컴파일러와 인터프리터

컴파일러는 실행 전에 번역 결과를 만들고, 인터프리터는 실행 과정에서 명령을 읽고 처리한다는 점이 핵심입니다.

링커와 링키지 에디터

두 용어는 여러 목적 파일과 라이브러리를 연결하여 로드 모듈이나 실행 파일을 만드는 도구를 가리키는 경우가 많습니다.

전처리기와 컴파일러

전처리기는 매크로·파일 포함·조건부 영역을 먼저 처리하고, 컴파일러는 프로그램의 구문과 의미를 분석합니다.

호스트와 타깃

호스트는 컴파일러가 실행되는 시스템이고, 타깃은 생성된 프로그램이 실행될 시스템입니다.

응집도와 결합도

응집도는 모듈 내부의 관련성이고 결합도는 모듈 사이의 의존성입니다. 좋은 설계는 높은 응집도와 낮은 결합도를 지향합니다.

전체 흐름: 설계에서 책임이 분명한 모듈을 만들고, 원시 프로그램을 목적 파일로 번역한 뒤 링커가 실행 파일을 생성하며 로더가 이를 기억장치에 배치합니다.

이번 장 핵심 요약

  1. 프로그램 설계는 요구사항을 자료 구조·모듈 구조·인터페이스·처리 절차로 구체화합니다.
  2. 자료 설계는 데이터의 구조를, 구조 설계는 모듈의 분할과 관계를 결정합니다.
  3. 인터페이스 설계는 사용자·시스템·모듈 사이의 입출력 규약을 정의합니다.
  4. 절차 설계는 기능을 수행하는 알고리즘과 처리 순서를 정의합니다.
  5. N-S 차트는 순차·선택·반복을 중첩된 사각형으로 나타냅니다.
  6. 모듈화는 큰 프로그램을 명확한 책임을 가진 작은 단위로 나눕니다.
  7. 응집도는 모듈 내부의 관련성이고 높을수록 좋습니다.
  8. 결합도는 모듈 사이의 의존성이고 낮을수록 좋습니다.
  9. 원시 프로그램은 프로그래머가 작성한 번역 전 프로그램입니다.
  10. 목적 파일은 기계어 코드와 심벌·재배치 정보를 가진 중간 결과일 수 있습니다.
  11. 링커는 목적 파일과 라이브러리를 결합하고 심벌을 해결해 실행 파일을 만듭니다.
  12. 로더는 실행 파일을 기억장치에 배치하고 실행을 시작합니다.
  13. 로더의 일반 기능은 할당·연결·재배치·적재로 정리할 수 있습니다.
  14. 컴파일러는 고급 언어를 목적 코드나 저수준 코드로 번역합니다.
  15. 인터프리터는 명령을 읽어 가며 번역과 실행을 진행합니다.
  16. 어셈블러는 어셈블리어를 기계어 목적 파일로 번역합니다.
  17. 크로스 컴파일러는 호스트와 다른 타깃 환경용 코드를 생성합니다.
  18. 링키지 에디터는 여러 목적 모듈과 라이브러리를 연결합니다.
  19. 전처리기는 매크로 확장·파일 포함·조건부 컴파일 등을 컴파일 전에 처리합니다.
  20. 좋은 모듈 설계와 정확한 번역 단계의 이해는 프로그램의 구현·시험·유지보수를 돕습니다.

복습 문제

요구사항을 자료 구조·모듈·인터페이스·알고리즘으로 구체화하는 과정은?

프로그램 설계입니다.

모듈 내부 요소 사이의 기능적 관련 정도는?

응집도입니다.

두 모듈 사이의 상호 의존 정도는?

결합도입니다.

효과적인 모듈 설계에서 응집도와 결합도는 각각 어떻게 해야 하는가?

응집도는 높이고 결합도는 낮춰야 합니다.

순차·선택·반복 구조를 중첩된 사각형으로 표현하는 도표는?

N-S 차트 또는 나시–슈나이더만 차트입니다.

프로그래머가 고급 언어나 어셈블리어로 작성한 번역 전 프로그램은?

원시 프로그램입니다.

여러 목적 파일과 라이브러리를 결합해 로드 모듈을 만드는 도구는?

링커 또는 링키지 에디터입니다.

실행 파일을 주기억장치에 배치하고 실행을 준비하는 시스템 프로그램은?

로더입니다.

로더의 일반 기능 네 가지는?

할당, 연결, 재배치, 적재입니다.

고급 언어 프로그램을 미리 번역하여 목적 코드를 생성하는 번역기는?

컴파일러입니다.

명령 단위로 번역과 실행을 진행하는 번역기는?

인터프리터입니다.

어셈블리어를 기계어로 번역하는 프로그램은?

어셈블러입니다.

현재 컴퓨터가 아니라 다른 기종용 기계어를 생성하는 컴파일러는?

크로스 컴파일러입니다.

주석 처리·매크로 확장·조건부 컴파일 등을 컴파일 전에 수행하는 프로그램은?

전처리기(Preprocessor)입니다.

컴파일러·인터프리터 설명 중 전통적인 시험 기준에서 목적 프로그램을 생성하지 않는 것은?

인터프리터입니다.

원시 프로그램 이후의 기본 수행 순서는?

원시 프로그램 → 컴파일러 → 목적 프로그램 → 링커 → 로드 모듈 → 로더 → 실행입니다.

절대 로더에서 적재를 담당하는 주체는?

로더입니다.

절대 로더에서 재배치를 담당하는 주체는?

어셈블러입니다.

목적 파일에서 참조한 함수의 정의를 다른 파일에서 찾아 연결하는 작업은?

심벌 해결 또는 외부 참조 해결입니다.

참고자료

이 글은 사무자동화산업기사 제2과목 프로그래밍 일반의 프로그램 설계·모듈화·언어 번역·번역기·링커·로더 개념을 이해하고 복습할 수 있도록 재구성한 정리입니다. 교재의 번역 과정과 번역기 분류는 시험 대비를 위해 단순화된 모델이며, 실제 언어와 운영체제에서는 전처리·컴파일·어셈블·정적 링크·동적 링크·JIT 컴파일 등의 단계와 역할이 구현에 따라 달라질 수 있으므로 최신 출제기준과 사용 환경의 공식 문서를 함께 확인해야 합니다.


같은 주제의 다른 글

이 글과 같은 카테고리에 있는 이전 글과 다음 글을 확인해보세요.