정보처리기사/[주간컴공] 필기 (완)

(주간컴공) 제4과목 프로그래밍 언어 활용 / 프로그래밍 언어 기초

web_seul 2022. 4. 12. 20:56

S1. 프로그래밍 언어

1. 프로그래밍 언어의 개념

1) 자연어

  - 사람들이 일상적으로 사용하는 언어

  - 앞뒤 문맥, 상황, 경험을 토대로 의미를 이해

  - 모호성과 부정확성 때문에 컴퓨터에게 명령전달이 어려움

2) 기계어

  - 컴퓨터가 별다른 해석없이 읽을 수 있는 언어

  - 명확한 의미와 정확한 문법으로 구성

  - 0과 1만 사용하여 구성하기 때문이 학습이 매우 어려움

3) 프로그래밍 언어

  - 하드웨어 : 컴퓨터를 구성하는 물리적인 기계장치

  - 소프트웨어 : 하드웨어를 효율적으로 운영하기 위해 개발되는 프로그램의 총칭

    하드웨어를 제어하기 위해 규칙을 정하고 지시를 내림, 프로그래밍 : 소프트웨어(프로그램)를 제작하는 절차, 코딩: 코드를 통해 프로그램을 작성하는 일

  프로그래밍 언어 : 하드웨어가 명령을 수행하기 위한 지침(표기법, 문법, 구문), 문법: 정확한 형태의 구문, 코드 : 정확한 의미 체계

4) 저급 언어와 고급언어

  - 저급언어(Low Level Language) : 컴퓨터가 이해하기 쉽게 작성된 프로그래밍 언어, 실행 속도가 매우 빠르지만 배우기가 어렵고, 호환성이 떨어짐, 기계어, 어셈블리어 등이 있으나 특수한 경우가 아니면 사용하지 않음

  - 고급언어(High Level Language) : 사람이 이해하기 쉽게 작성된 프로그래밍 언어, 배우기쉽고 호환성이 높지만 기계어로 번역이 필요함, C, Java, Python등

 

2) 언어 번역 프로그램

1) 원시 프로그램과 목적프로그램

  - 원시프로그램 : 사용자(프로그래머)가 작성한 프로그램, 고급 프로그래밍 언어로 작성된 프로그램 파일

  - 목적프로그램 : 원시프로그램이 기계어로 번역된 프로그램, 번역을 위한 별도의 프로그램이 필요

2) 컴파일러 (원시프로그램 -> 목적프로그램 , 링커 -> 실행파일로 병합 - 로더 -> 프로그램 실행)

  - 정의 : 고급 언어로 작성된 원시 프로그램을 목적 프로그램으로 번역해주는 프로그램, 프로그램 실행에 필요한 정보가 전부 번역, 번역속도는 비교적 느리지만 실행속도는 빠름, 대표적으로 C, C++ 등의 언어가 컴파일러 방식으로 번역됨

  - 링커 : 하나 이상의 목적 프로그램과 라이브러리를 단일 실행 파일로 병합해주는 프로그램

  - 로더 : 프로그램을 주기억 장치에 적자해여 실행해주는 운영체제의 일부분, 할당-연결-재배치-적재 순으로 진행

3) 인터프리터

  - 고급언어로 작성된 원시 프로그램을 목적 프로그램으로 번역하지않고 즉시 결과를 출력해주는 프로그램, 전체를 번역하지 않고, 한번에 한 줄씩 번역하여 실행하는 방식, 번역속도는 빠르나 실행속도는 비교적 느림, Basic, Python등의 언어가 인터프리터 방식으로 번역됨

4) 어셈블러 

  - 저급 언어인 어셈블리어로 작성된 원시프로그램을 목적 프로그램으로 번역해주는 프로그램

    어셈블리어 : 명령을 연상할 수 있는 연상기호와 기계어를 1:1로 대응한 프로그래밍 언어, 일반적으로 하드웨어 제어에 사용

 

3. 프로그래밍 언어의 언어별 특성

1) C

  - 1972년에 개발된 언어, UNIX운영체제 구현에 사용되는 언어

  - 문법의 간결성, 효율적 실행, 효과적인 포인터 타입 제공이라는 특징으로 가장많이 사용됨

2) C++

  - C언어에 객체지향 기술을 더한 프로그래밍 언어

  - C언어에 대해 상위 호환성을 가짐

  - 객체지향을 염두에 두고 만들어진 언어가 아닌 C언어에 객체지향을 더했기 때문에 C++의 표준 규격은 매우 복잡한 편

3) Java

  - 객체지향 기술을 염두에 두고 만들어진 프로그래밍 언어

  - Java언어는 컴파일을 거쳐야함

  - 컴파일을 통해 생성된 Class파일을 가상 머신을 통해 실행

  - C++에 비해 단순하고 분산 환경 및 보안성 지원

4) JavaScript

  - 1995년에 개발된 객체지향 스크립트 언어로 웹페이지 동작을 구현

  - 빠른 시간에 코드를 완성할 수 있고 확장성이 좋으며 배우기 쉽다

  - 보안이나 성능이 다른언어에 비해 부족함

5) Python

  - 배우기 쉽고 이식성이 좋은 언어

  - 다양한 함수들도 많이 제공되어 스타트업과 글로벌 기업에서도 많이 사용

  - 인터프리터 언어이면서 객체지향 언어, 스크립트 언어

6) PHP

  - html에 포함되어 동작하는 서버측 스크립트 언어

  - C언어, Java와 유사한 문법을 사용

  - 객체지향 프로그래밍을 지원

  - 많은 오픈소스 프레임워크와 라이브러리 사용가능

  - 비교적 보안에 취약함

 

S2. 프로그래밍 기본 개념

1. 변수와 상수

1) 상수

  - 항상 변하지 않는 값

  - 일반적으로 상요하는 숫자, 문자 등

  - 항상 고정된 하나의 값(이름)을 가짐

2) 변수

  - 수시로 변할 수 있는 값

  - 특정 값을 기억장치에 저장하기 위해서 사용하는 공간

  - 가장 최근에 저장된 값만 기억됨

  - 반드시 이름을 지정하여 사용

 

2. 선언과 할당

1) 식별자와 예약어

  - 식별자(Identifier) : 변수, 함수 등 데이터와 기능을 고유하게 구분하기 위해서 명명된 이름, 프로그래밍 언어에 따라 식별자에 사용될 문자에 제한

  - 예약어(Keyword) : 프로그래밍 언어가 미리 선점한 식별자, 각 예약어마다 시스템의 특수한 기능을 수행하도록 정해져있음

2) 선언과 할당

  - 명시적 선언 : 키워드, 식별자 등을 통해서 변수 등의 속성을 부여

  - 묵시적 선언 : 별도의 선언문 없이 상수에 의해 속성이 부여

  - 할당  변수에 데이터를 연결하는 과정, 상수 및 다른 변수, 기능 등을 바인딩

 

3. 소프트웨어 개발 절차

1) 문제 분석 : 해결해야할 문제를 정확히 인지하고 해결을 위한 기초 데이터 및 공식 등을 확인하는 단계

2) 기능 결정 : 문제 해결을 위해 수행해야하는 기능, 작업을 결정(프로그램 작동 방법이 아님)하는 단계

3) 설계 : 프로그램의 전체 구조(흐름)을 설계, 결정된 기능을 수행하기 위한 알고리즘을 순서도, 의사코드 등으로 설계

4) 구현 : 설계한 프로그램과 알고리즘을 프로그래밍 언어로 구현

5) 테스트/디버그 : 프로그램을 실행하여 오류(버그)가 있는 경우 수정(디버그), 비정상적인 모든 경우에 대해 테스트

6) 유지 관리 : 사용자 피드백을 통한 프로그램 업그레이드 단계

 

4. 알고리즘

1) 알고리즘의 정의 : 문제를 해결하기 위해 수행해야할 기능(해법)의 집합, 알고리즘+더이터구조=효율적인 프로그램

2) 알고리즘의 특성 : 입력은 존재하지않을 수 있음, 출력은 반드시 1개 이상 존재, 모든 기능은 명확한 의미와 완벽한 구성을 갖춰야 함, 모든 기능은 지정한 횟수만큼 반복된 후 종료되어야 함, 모든 기능은 실제로 연산 가능한 것들이어야 함

3) 알고리즘 성능 판단의 기준 : 특정 입력에 대해 기대 출력값이 동일한지 판다, 알고리즘 표현이 간단하고 이해가 용이한지 판다, 입력 데이터에 비례하여 몇 번의 명령을 실행하여 결과를 출력하는지 분석, 평균적인 명령 수행시간과 최악의 명령 수행시간의 차이를 분석

4) 순서도와 의사코드

  - 순서도(Flow Chart) : 약속된 도형과 기호를 사용하여 알고리즘을 표현한 양식, 쉽고 공통된 형식으로 표현하기 때문에 서로 다른 프로그래밍 언어로 변환이 용이

  - 의사코드(Pseudo Code) : 일반적인 언어로 코드를 흉내내어 알고리즘을 표현한 코드, 특정 프로그래밍 언어의 문법에 따른 것이 아니기 때문에 컴퓨터에서 실행은 불가능, 특정 언어로 프로그래밍 하기전에 알고리즘의 모델을 대략적으로 모델링하는 경우에 사용

5) 알고리즘 설계기법

  - 동적계획법(Dynamic Programming) : 어떤 문제를 해결하기 위해 그 문제를 더 작은 문제의 연장선(Bottom-up)으로 생각하여, 작은 문제의 해(풀이)를 활용

  - 탐욕적 알고리즘(Greedy Algorithrm) : 분기마다 가장 최적의 해를 선택하여 결과를 도출, 반드시 종합적인 최적 해를 보장하지 못함

  - 재귀적 알고리즘(Recursion Algorithrm) : 풀이 도중 같은 풀이를 다시 불러오는 과정의 반복, 호출의 역순으로 결과를 냄

  - 근사 알고리즘(Approximation Algorithrm) : 최적 해를 구할 수는 없지만 비교적 빠른 시간에 근사해를 계산

  - 분할 정복법(Divide and Coonquer) : 크고 방대한 문제를 효율적으로 풀 수 있는 단위로 작게 나눠 계산한 뒤 다시 합치는 방식(Top-down), 중복x

  - 퇴각 검색법(Backtracking) : 분기구조(tree) 탐색에서 탐색이 실패하는 경우, 새로운 탐색이 가능한 분기까지 탐색 과정을 되돌려 진행하는 방식, 깊이 우선 탐색 알고리즘(Depth First Search)

 

반응형