티스토리 뷰
3과목. 프로그래밍 일반 - 1. 프로그래밍 언어
산업인력공단 시행 사무자동화산업기사 필기이론 정리
2020.1.1. ~ 2022.12.31. 출제 기준에 맞게 정리하였으며, 여러 자료를 참고하여 작성하였지만 부족한 부분이 많이 있습니다. 이 자료는 참고용으로 사용하시고 실제 시험을 준비하시는 분들은 모의고사 문제집 위주로 풀어보시길 권해드립니다.
1. 프로그래밍설계
(1) 구조와 연산
① 프로그래밍 개요
- 알고리즘 : 특정 문제를 해결하는 방법
- 순서도 : 이 방법을 알기 쉽게 시각적으로 표현한 것
- 코딩 : 알고리즘을 프로그래밍 언어로 기술한 것
② 프로그래밍 과정
- 알고리즘 발견 → 순서도 작성 → 코딩(원시프로그램 작성) → 컴파일 → 링크 → 실행
③ 프로그래밍 언어의 분류
- 절차적 언어 : 선언문과 실행문을 포함한 블록구조. 배정문 사용
- 함수형 언어 : 배정문이 없고, 반복문을 사용하지 않고, 재귀적 함수이론에 바탕을 둠
- 논리형 언어 : 자연언어, 인공지능, 추론 컴퓨터 제작시 사용
- 객체지향 언어 : 자료의 추상화(정보 은닉 기법)
④ 연산의 기능
- 산술연산 : 더하기, 빼기, 곱하기, 나누기
- 논리연산 : 논리곱(AND), 논리합(OR), 논리부정(NOT)을 이용한 참 거짓 판별
- 자료의 비교, 판단
- 자료의 이동
- 자료 편집
⑤ 연산의 종류
- 자료의 성격에 따라
‧ 수치적 연산 : 수학적 연산에 사용
‧ 비수치적 연산 : 논리식에 사용
- 입력되는 수에 따라
‧ 단항연산 : 하나의 입력에 하나의 출력이 있는 연산(자료 이동 등)
‧ 이항연산 : 두개의 입력에 하나의 출력이 있는 연산(사칙연산 등)
(2) 프로그래밍 분석과 설계
① 프로그래밍 언어의 설계
- 좋은 프로그래밍 언어의 조건
‧ 언어의 구조와 개념이 단순 명료하며 통일성이 있을 것
‧ 프로그래밍 언어의 구조가 명료해야 함
‧ 언어의 개념을 확장시키기 쉬워야 함
‧ 응용문제에 있어서 자연스럽게 적용이 가능해야 함
‧ 신뢰성이 있어야 함
‧ 다른 기종과 호환이 되어야 하며, 다른 언어와 이식성이 있어야 함
‧ 추상을 지원할 수 있어야 하고 검증하기 쉬워야 함
‧ 프로그램의 작성, 번역, 실행, 운영 및 유지보수 등 각종 비용이 적게 들어야 함
② 프로그래밍 언어 설계시 고려 사항
- 개념의 명료성- 구문의 명료성
- 문제 해결에 대한 적합성- 프로그램의 추상화 지원
- 프로그램 검증의 용이성- 프로그램의 호환성
- 프로그램 언어의 효율성- 개발 환경이 편의성
- 표기의 일치성
2. 언어번역
(1) 구문
① 기본 구문 요소
- 문자집합, 식별자, 예약어, 핵심어, 연산식, 연산자, 주석, 잡음어, 구분문자 등
- 잡음어 : 특별한 정보를 갖지 않으면서 인간의 판독성 향상을 이해 사용됨
- 구분 문자 : 단지 문장이나 식에서 구문적인 단위의 시작과 끝을 나타내는 요소
② BNF(Backus-Naur Form) 표기법
- 구문형식을 정의하는 가장 보편적인 기법
- 1963년 ALGOL 60 구문 정의시 BNF 표기법이 최초 사용됨
<identifier> ::= <letter> | <identifier><letter> | <identifier><letter> <letter> ::= A | B | C | ... | X | Y | Z <digit> ::= 0 | 1 | 2 | ... | 8 | 9 |
‧ 생성 규칙 왼쪽에는 정의될 대상(Object)이 표현되며, 오른쪽에는 그 대상에 대한 정의 표현
‧ ::= : 정의한다는 의미로 좌측은 우측과 같으며 문법에서 →와 같음
‧ | : 택일, 또는 의 의미로 나열된 것 중에 하나를 의미
‧ <> 괄호로 묶여진 기호는 논터미널(Nonterminal) 기호라고 하며 BNF 규율로 다시 정의될 대상을 의미
‧ <> 괄호로 묶이지 않은 기호는 터미널(Terminal) 기호라고 하며 터미널 기호에는 각 언어에는 사용되는 문자집합(영문, 숫자, 특수문자)과 예약어가 있음
‧ BNF 표기에 사용된 특수기호들(::=, |, <>)을 메타기호라 하며 언어 표현에 사용됨
③ EBNF(Extended Backus-Naur Form)
- BNF를 확장하여 특수한 의미를 갖는 메타기호를 추가하고 반복되는 부분이나 선택적인 부분을 간결하게 표현
- 사용되는 논터미널 기호의 수를 줄여 구문을 간결하게 표현할 수 있음
- 0번 이상 반복되는 부분 - { }로 표시
- 선택적인 부분으로 생략 가능 - [ ]로 표시
- { }, [ ], |, ( ), ::= 과 같은 메타기호가 언어에서 터미널로 사용되는 경우 혼동을 피하기 위해 터미널 기호를 ‘ ’로 묶어 표현
④ 구문 도표(Syntax Diagram)
- 구문에 대한 형식 정의를 구문 도표로 표현하는 방법으로 순서도와 비슷함
- 구문 도표에서 논터미널은 네모칸, 터미널은 원이나 타원, 이들을 연결하는 지시선으로 표현
- 지시선(→) : 흐름 방향 표시
- 사각형(□) : 논터미널 기호
- 원 또는 타원(○) : 터미널 기호
⑤ 파스 트리(Parse Tree)
- 어떤 표현이 BNF에 의해 바르게 작성되었는지를 확인하기 위한 트리(tree)
- 대상을 근(root)으로 하고 단말 노드들을 왼쪽에서 오른쪽으로 나열하여 검증
- 파스 트리가 존재하면 주어진 BNF에 의해 작성되었음을 의미하고, 파스 트리가 존재하지 않으면 BNF에 의해 작성될 수 없음을 의미
- 파싱(Parsing) : 파스 트리를 발생시키는 과정
(2) 번역단계
① 번역기의 정의
- 어떤 언어로 작성된 원시프로그램(Source Language)을 다른 언어(목적 프로그램, Object Language)로 변환시키는 프로그램
② 프로그래밍 언어의 번역과정
- 원시프로그램 → 컴파일러 → 목적프로그램 → 링커 → 로더
③ 번역기의 종류
- 컴파일러 : 고급언어를 기계어로 번역
- 어셈블러 : 어셈블리어를 기계어로 번역
- 인터프리터 : 목적 프로그램을 생성하지 않고 필요할 때마다 기계어로 번역
- 링커 : 목적 프로그램에 대해 로드가 가능한(실행가능한) 모듈을 생성
- 로더 : 로드 모듈을 메모리에 적재
- 프리프로세서 : 원시 프로그램을 기준의 고수준 컴파일러 언어로 전환하는 기법
- 크로스컴파일러 : 원시 프로그램을 다른 기종에 맞는 기계어로 번역하는 컴파일러
- 디버거 : 번역된 프로그램의 오류를 찾음
④ 컴파일러와 인터프리터의 비교
구분 |
컴파일러 |
인터프리터 |
사용의 용이도 |
어렵다 |
쉽다 |
번역 단위 |
프로그램 단위 |
행 단위(명령 단위) |
출력 자료 |
입력프로그램과 동일한 목적 프로그램 |
직접 입력 프로그램을 실행 |
장점 |
반복문이나 부프로그램 호출이 많은 경우 |
큰 기억장치를 요구하지 않음 |
단점 |
생성된 목적 프로그램이 큰 기억장치를 요구 |
실행되는 동안 디코딩 시간을 많이 요구 |
활용 |
실행시간의 효율성(Efficiency)을 중시하는 프로그래밍 언어에서 사용 |
사용자의 유연성(Flexibility)을 중시하는 언어에서 사용 |
프로그램 크기 |
크다 |
작다 |
수행속도 |
빠르다 |
느리다 |
번역속도 |
느리다 |
빠르다 |
언어의 성격 |
정적(Static) |
동적(Dynamic) |
대표적 언어 |
포트란, 코볼, 파스칼, C/C++, Ada |
BASIC, LISP, APL. Peril, Postscript |
(3) 형식 변환 모델
① 형식 문법의 분류
문법 계층 |
언어 |
인식기(Recognizer) |
Type 0 |
Recursively Enumerable Set |
튜링기계(Turing Machine) |
Type 1 |
Context-Sensitive Language |
LBA(Linear Bounded Automata) |
Type 2 |
Context-Free Language |
푸시다운오토마타(Push Down Automata) |
Type 3 |
Regular Language |
유한상태오토마타(Finite Automata) |
② 정규 문법과 문맥 자유 문법
- 정규 문법(Regular Grammar)
‧ 어휘 분석 단계에서 사용
‧ 토큰의 구조가 표현 대상
- 문맥 자유 문법(Context-Free Grammar)
‧ 구문분석 단계에서 사용
‧ 프로그래밍 언어의 구조가 표현 대상
③ 어휘 분석-토큰 생성
- 원시 프로그램을 토큰이라는 문법적 단위로 분석
- 스캐너라 불리는 어휘 분석기에 의해 이루어짐
- 프로그래머가 쓴 주석을 처리
④ 구문분석(Parsing)
- 어휘 분석 과정에서 인식된 합성문자 토큰의 그룹을 단위로 하여 구문의 타당성을 검사하는 과정으로 이 과정에서 잘못된 구문을 발견하면 오류 정보를 출력함
⑤ 파싱 기법
- Universal 파싱
‧ Universal 파싱은 비효율적이어서 실제 프로그래밍 언어의 컴파일러로 사용하기에 부적합
‧ 실제적 파싱은 하향식과 상향식 두가지 기법을 사용함
- 하향식 파싱(Top-Down Parsing)
‧ 파스 트리의 루트(Root)로부터 시작하여 파스 트리를 만들어 감
‧ 좌측 유도
- 상향식 파싱(Bottom-Up Parsing)
‧ 파스 트리의 리프(Leaf)로부터 위쪽으로 파스 트리를 만들어 감
‧ Shift Reduce 파싱
3. 자료형
(1) 형과 객체의 특징
① 자료의 일반
- 자료형의 분류
‧ 자료형 : 값의 집합 + 연산자의 집합
‧ 기본자료형 : 더 이상 다른 구조로 나눌 수 없는 자료형
‧ 구조적 자료형 : 기본 자료형을 복합하여 만든 자료형
- 형 선언(Type Definition)
‧ 프로그래머가 자료의 크기나 구조를 정의하는 과정
‧ 모든 언어에서는 기본 자료형을 제공하며 기본 자료형을 이용하여 확장된 자료형을 만들 수 있음
② 변수와 상수
- 변수(Variable)
‧ 변수는 이름, 속성의 집합, 참조, 값 등 4요소로 구성
‧ 변수의 속성은 실수, 정수 등과 같이 변수가 가질 수 있는 값들의 자료형을 의미
‧ 변수는 프로그램이 동작하는 동안 값이 수시로 변경될 수 있음
‧ 변수의 속성은 컴팡리 시간에 한번 정해지면 그 다음부터는 일반적으로 변할 수 없음
- 변수의 종류
‧ 지역(Local) 변수 : 블록 안에서 선언하고 선언된 불록 안에서만 사용되는 변수
‧ 전역(Global) 변수 : 블록 밖에서 선언하고 프로그램 내 모든 블록에서 사용되는 변수
- 상수(Constant)
‧ 수명시간 동안 고정된 하나의 값과 이름을 가진 자료 객체
‧ 상수는 프로그램이 동작하는 동안 값이 절대로 바뀌지 않는 공간을 말함
③ 선언문(Declarations)
- 실행시 사용될 자료의 속성을 언어의 번역기에게 알려주는 문장
- 자료의 속성 : 자료형, 크기, 이름, 생성 시기, 소멸 시기, 참조하기 위한 첨자 등
④ 배정문(대입문)
- 변수의 내용을 변경하는 원시 연산이며 프로그램에서 가장 일반적으로 나타나는 연산문
- 예시 : A = B(포트란), MOVE B TO A(코볼), A := B(ALGOL), A ← B(APL)
- L-Value : 지정 연산자의 왼쪽 변수로 메모리 주소를 의미함
- R-Value : 지정 연산자의 오른쪽 변수로 값을 의미함
- 모든 변수 이름은 L-Value를 가지고, 상수는 R-Value만을 가짐
(2) 기본 자료형
① 논리형
- 논리합(OR) : 두 피연산자가 모두 거짓일 때만 거짓, 그 외에는 참
- 논리곱(AND) : 두 피연산자가 모두 참일 때만 참, 그 외에는 거짓
- 부정(NOT) : 참은 거짓, 거짓은 참
- 조건(Implies) : 첫번째 피연산자가 참이고 두번째 피연산자가 거짓일 때만 거짓
- 동치(Equivalence) : 두 피연산자가 모두 참이거나 거짓일 때 참, 두 피연산자의 값이 다르면 거짓
② 문자형
- 범용 고급 언어에서 문자열 처리에 대한 많은 특성을 가짐
- 문자열에 순서를 부여하여 문자열 비교에 보편적으로 사용
- 문자열을 분해하거나 조립하는 연산자를 제공하는데 어려움이 있음
- 문자열의 연산 결과는 컴파일 시간에 결정되므로 기억 장소를 동적으로 할당‧회수
③ 숫자형
- 종류 : 정수, 유리수, 실수, 정밀도 실수, 복소수 등
- 일반적으로 하드웨어에 의존하기 때문에 변경할 수 없는 자료형
- 수의 연산이 기계어로 바뀌기 때문에 실행 속도가 매우 빠름
- 기계어 표현이 하드웨어마다 다를 수 있어 프로그램 이식에는 어려움이 있음
- 정수나 실수는 기계어로 직접 표현이 가능하므로 보통 설명자(Descriptor)가 필요없음
(3) 구조와 자료형
① 배열(Array)
- 같은 자료형이 묶인 자료구조
- 배열을 특징짓는 요소 : 배열의 이름, 배열의 차원, 배열의 자료형, 첨자의 형과 범위
② 레코드(Record), 구조체(Structure)
- 다른 자로형의 자료구조
- COBOL, Pascal, C 등의 언어에서 제공
- 레코드는 포인터를 원소를 가질 수 있으므로 연속적인 레코드 나열이 가능
- 레코드 구조는 주기억 장치 내 하나의 블록으로 구성
- 기억장치의 구성 및 접근을 위해서 각 원소의 크기 및 변위(Offset)가 먼저 결정되어야 함
- 한 원소가 기억 장치 내에서 자신의 위치를 결정하려면 앞에 정의된 원소들의 크기를 알고 있어야 함
③ 포인터형
- 포인터란 객체에 대한 참조(Reference)를 말함
- 포인터 변수는 객체를 참조하기 위해 해당 객체의 주소를 값으로 가짐
- ALGOL, Pascal, C 등의 언어에서 포인터를 제공
- 프로그램이 실행되면 동적인 객체를 생성
- 객체 간의 다양한 관계를 쉽게 구현
- 필요없는 객체는 제거하여 주기억 장치의 효율성을 높임
- 다양한 방법의 연결에 비해 통일된 방법으로 객체 접근이 가능
4. 순서제어
(1) 묵시적, 명시적 순서 제어
① 묵시적 순서제어
- 프로그래머가 명시적 제어를 하지 않으면 해당 언어에서 정의한 순서대로 제어함
- 일반 언어에서 순서를 명시적으로 제어하는 문장이 없으면 문장 나열 순서로 제어
- 수식에서 괄호가 없으면 연산자 우선순위에 의해 수식이 계산됨
② 명시적 순서제어
- 해당 언어에서 각 문장이나 연산의 순서를 프로그래머가 직접 변경
- GOTO문이나 반복문을 사용해서 문장의 실행 순서를 변경
- 수식의 괄호를 사용해서 연산의 순서를 변경
(2) 수식에서의 순서제어 & (3) 비수치적 연산식에서 순서제어
① 연산자 우선 순위
높음 --------------------------------------------> 낮음 |
||||||||||
C언어 |
(), [], ., -> |
++, -- |
*, /, % |
+, - |
<<, >> |
<, <= |
==, != |
& |
^ |
&& |
② 수식 표기법
- 전위(Prefix) : 연산자가 피연산자 앞에 표시 (예: + 2 5)
- 중위(Infix)
‧ 연산자가 피연산자 가운데 표시 (예: 2 + 5)
‧ 일반적으로 가장 많이 사용
‧ 이항연산에 적합
- 후위(Postfix) : 연산자가 피연산자 뒤에 표시 (예: 2 5 +)
(4) 문장에서의 순서제어
① GOTO문 사용의 장단점
- 장점
‧ 간결한 GOTO문의 제어구조를 하드웨어로 제공
‧ 완전한 범용성을 가짐
‧ 이론적으로 거의 모든 알고리즘을 GOTO문만으로 표현 가능
‧ 많은 제어 구조들을 대신해서 사용할 수 있음
‧ 프로그램 언어에서 제어 구조용으로 사용됨
- 단점
‧ 관련된 프로그램의 분산을 초래함
‧ 프로그램이 빈약하게 디자인됨
‧ 디버깅이 어려움
‧ 프로그램을 이해하기 어려움
‧ 프로그램의 유지보수가 어려움
② 부프로그램(Subprogram)
- 주프로그램 또는 다른 부프로그램에 의해 사용되는 독립된 단위의 프로그램
- 특징
‧ 프로그램의 크기가 작아져 기억장소의 낭비를 방지
‧ 프로그램 자체의 실행속도는 느림
‧ 프로그램 재사용
‧ 프로그램의 이해와 유지보수가 쉬워짐
③ 서브루틴(Subroutine)
- 호출될 때마다 그 코드를 처음부터 다시 실행
- 반환 문장이 존재함
- 되부름이 허용하지 않는 루틴에서는 제어를 위한 기억장소 하나만 필요
- 제어를 위한 기억 장소는 자신이 완전히 실행되고 제어를 넘겨주는 위치임
④ 코루틴(Coroutine)
- 호출되면 자신이 가장 최근에 수행하고 있던 곳에서부터 다시 수행
- 제어를 반환한 코루틴은 일시 정지됨
- 반환 문장이 없음
- 동시실행 코루틴간에는 대칭관계
- 하나의 코루틴이 끝나면 전체 프로그램이 끝남
- 제어를 위한 기억장소는 코루틴이 다시 제어를 받을 때의 시작위치임
⑤ 부작용(Side Effect)
- 프로그래밍 언어에서 하나의 서브루틴이나 함수가 자신의 지역 변수에 속하지 않는 전역 변수나 매개변수의 값을 변경시키는 일
- 참조 호출(Call by Reference)과 이름 호출(Call by Name)에서 발생
- 전역 변수의 단점을 보완하기 위해 매개 변수 전달 기법을 사용
⑥ 별명(Aliasing)
- 한 단위 프로그램에서 동일한 기억 장소를 참조하는 변수에 두 개 이상의 이름이 붙은 것
- 실제 변수는 하나뿐이므로 한 변수의 값을 변화시키면 그 변수와 같은 기억 장소를 참조하는 다른 변수값도 같이 변하게 됨
PDF 다운받기
PDF파일은 3과목 전체가 포함되어 있습니다
'각종 자격증 자료' 카테고리의 다른 글
(사무자동화산업기사) 필기이론 : 4과목-1. 정보통신의 개념 (0) | 2020.02.18 |
---|---|
(사무자동화산업기사) 필기이론 : 3과목-2. 프로그래밍 언어 (0) | 2020.02.08 |
(사무자동화산업기사) 필기이론 : 2과목-4. 사무작업 형태 (0) | 2020.02.04 |
(사무자동화산업기사) 필기이론 : 2과목-3. 자료관리 운용 (0) | 2020.02.04 |
(사무자동화산업기사) 필기이론 : 2과목-2. 사무관리 표준화 (0) | 2020.02.03 |
- Total
- Today
- Yesterday