1. 프로그래밍 언어
1) 좋은 프로그래밍 언어의 조건
- 구조가 명확, 언어 개념이 단순, 명료, 확장성이 있는 것
- 응용시 자연스러운 적용 가능, 외적인 지원이 가능할 것
- 효율적이고 작성한 프로그램의 신뢰성 높은 것
- 기종간의 높은 호환성
2) 언어의 세대별 구분과 발전 과정
O 1세대 언어(1950년대)
- 2진수를 이용한 프로그래밍 언어
- 프로그래밍이 어렵고 오류 발생율 높다.
- 하드웨어에 대한 정확한 이해가 필요
- 개발 언어 : 어셈블리어(저급언어), FORTRAN I/ALGOL 58(수치,과학용 언어), FLOWMATIC(자료처리용언어), IPL 5(리스트 처리용 언어)
O 2세대 언어(1950년대 말 - 1960년대 초)
- 고급언어 개발에 중점
- 개발 언어 : FORTRAN II, ALGOL 60, COBOL, LISP등
O 3세대 언어(1960년대 중반 - 1970년대)
- 폰 노이만의 프로그램 내장방식 적용, 절차적 언어 다수 개발
- 개발 언어 : APL, SNOBOL 4, PL/1, ALGOL 68, PASCAL, EL1, CLU, ADA, CHILL 등
O 4세대 언어(1980년대)
- 비절차적 언어로 대화식 환경 제공(프로그래머와 컴퓨터 간의 그래픽 인터페이스)
- 프로그램 개발시간 단축(문제해결 과정의 절차를 프로그램에서 지원)
- 프로그램 생산성 향상(사용하기 쉽고 빠른 효율적인 환경 제공)
- 프로그램 문서화와 유지보수 용이(일상적인 영어로 명령어 구성)
O 5세대 언어(1990년대)
- 인공지능 분야에 기반을 둔 언어로 지식기반 시스템, 전문가 시스템, 추론 엔진, 자연어처리 등의 특징을 가짐
* 절차 언어와 비절차 언어의 차이
- 절차 언어(Procedual Language) : 기존 고급언어들로 프로그래밍할 때 문제해결을 어떻게, 어떤 절차로 할 것인지를 정의하는 문제해결 중심의 언어
- 비절차 언어(NonProcedual Language) : 4세대 언어로 무엇을 할 것 인지와 결과가 무엇인지만을 정의하는 것
3) 각 언어별 특징
O 기계어(Machine Language)
- 컴퓨터의 구조적 특성을 나타내는 언어로 각 컴퓨터마다 서로 다른 기계어를 가짐
- 0과 1로 모든 정보를 나타내므로 프로그램 작성이 어렵고 복잡함
- 번역과정이 불필요하여 처리 속도가 빠름
O 어셈블리어(Assembly Language)
- 기계어를 1:1로 대응되는 기호(Symbolic)로 대체한 언어(기계어 단점 보완)
- 명령어를 기계어로 변환해 주는 어셈블러라는 번역기가 필요
- 기계의 특성을 잘 알아야 하며 프로그램 작성은 기계어보다는 쉽다
O 과학기술용 언어 FORTRAN(FORmula TRANslation)
- 수학적 성질을 갖는 문제를 컴퓨터로 해결하기 위해 만들어진 언어
- 명령문이 일반 수식과 비슷하고 문법이 간단하여 사용이 쉽다
- 다양한 기본 함수(library function)를 내장
- 발전 : FORTRAN I -> II -> IV -> FORTRAN 77 .....
O 사무처리용 언어 COBOL(COmmon Business Oriented Language)
- 영어 문장의 형태로 프로그램 작성 쉽고 이해가 용이
- 대량 데이터 처리에 용이, 입출력 기능이 뛰어남, 호환성 좋고 문서화 기능 보유
O 수치계산용 언어 ALGOL(ALGOrithmetic Language)
- PASCAL, C, Ada 등의 언어 발전에 영향 미침
O 범용성 언어 BASIC(Beginner's All-purpose Symbolic Code)
- 다트머스(Dartmouth)대학의 John G. Kemeny교수/Thomas E. Kurtz교수가 개발
- 대화식으로 프로그램을 작성하고 수행 가능한 언어(인터프리터 사용)
O 교육용 언어 PASCAL
- ALGOL 60을 모체로 1969년 취리히 공과대 ETH연구소의 니콜라 워드교수가 개발
- 범용/교육용 언어로 문법 간결, 체계적, 명백한 형태로 구성되어 편하게 사용 가능
O C 언어
- ALGOL 60을 모체로, Bit 연산 가능, H/W 제어 가능, UNIX OS를 구성하는
시스템 프로그램
- 구조적 프로그래밍 기법 채택, block 구조 가진 언어, 이식성 매우 높다.
- 포인터에 의한 번지 연산등 다양한 연산기능 가짐
O ADA - 미국 국방성의 국방 표준언어 개발을 위해 만들어진 언어로 파스칼과 같은 구조적
언어보다 입출력 기능이 뛰어나서 대량 자료 처리에 편리함
O C++
- 1983년 AT&T벨 연구소의 Bjarne Stroustrup이 C언어를 기반으로 객체지향 개념 을 결합시켜 개발함
- 실세계의 문제를 객체로 모델링하여 표현, 필요한 자료구조와 그에 대한 연산을 모아 클레스(Class)로 나타냄으로써 자료의 추상화와 은닉을 제공한다.
* 객체지향 프로그래밍(OOP, Object Oriented Programming)
- Simula언어에서 객체지향 개념을 제시, Smalltalk를 통해 본격적 구현 시작
- 객체 : 하나의 데이터 구조로 데이터 값과 그것에 대한 절차를 합한 것으로 객체라는 모듈을 단위로 프로그램을 만드는 기법
- 상속을 통한 재사용이 용이하고 시스템의 확장성이 높으며 정보 은폐가 자연스럽게 됨
- 종류 : C++, Smalltalk, Actor, Eiffel, Objective C, OO Pascal 등
* Visual Programming
- 기존 프로그래밍 언어에 아이콘(icon)과 메뉴(menu), 마우스와 같은 대화식 환경등 사용자의 인터페이스를 결합하여 프로그래밍하는 언어
- 프로그램의 개발과 수행을 용이하게 하며 컴퓨터를 보다 쉽고 편리하게 사용 가능케 함
- 종류 : Visual Basic, Visual C++, CANTATA, VennLispe 등
4) 프로그래밍 언어 처리기
O 프로그램 언어의 번역
- 원시프로그램 -(컴파일러)-> 목적프로그램 -(링커)-> 로드모듈 -(로더)->실행
- 원시프로그램 : 각각의 프로그래밍 언어로 작성한 프로그램
- 컴파일러 : 원시프로그램을 기계어로 번역하여 주는 도구 프로그램
- 목적프로그램 : 기계어로 번역된 상태의 프로그램
- 링커 : 여러 개의 프로그램(주/부프로그램)을 하나의 로드 모듈로 바꿈
- 로드 모듈 : 실행 가능한 상태의 프로그램
O 번역기의 종류
- 컴파일러(compiler) : 고급언어로 작성된 프로그램을 한꺼번에 번역하여 목적프로그램으로 바꾸어 주므로 프로그램의 실행시간이 빨라진다.(COBOL, FORTRAN, PL/1, PASCAL, C언어 등)
- 어셈블러(Assembler) : 어셈블리 언어로 작성된 프로그램을 기계어로 번역
- 인터프리터(Interpreter) : 필요할 때마다(한 줄씩) 기계어로 바로 번역하여 실행(즉시 응답), (LISP, BASIC, SNOBOL, APL등)
- 프리프로세서(Preprocessor) : 전처리기라고도 하며, 프로그래밍 언어에 없는 기능들을 추가하여 언어의 확장을 시켜주는 프로그램, 고급 언어로 작성된 프로그램을 다른 고급 언어로 번역
. 원시프로그램 ->전처리기 ->확장원시프로그램 ->컴파일러 ->목적프로그램
- 크로스 컴파일러(Cross-compiler) : 원시프로그램을 다른 컴퓨터를 위한 기계어로 번역하는 컴파일러를 의미( Linker, Load module, Loader 등)
5) 프로그램 구현 기법
O 구조적 프로그래밍 기법
- GOTO문을 사용하지 않고 순서, 선택, 반복의 3가지 논리구조를 사용하는 기법
- 하나의 입력과 출력을 갖는 구조
- 블록 구조를 갖는 모듈화 프로그램
- 기능별 서브프로그램으로 작성된 프로그램
O IPT 기법(Improved Programming Technique, 프로그래밍 개선 기법)
- 프로그램의 품질개선과 생산성 향상을 위한 각종 기술 방법의 총칭
O HIPO 기법(Hierarchy Plus Input Process Output, 계층적 입출력 기법)
- 프로그램의 문서화 방법의 하나로 도식 목차, 총괄 다이어그램, 상세 다이어그램으로 구성
O Top-down(하향식) 프로그래밍
- 충분한 문제분석을 한 후 상위 모듈부터 하위 모델로 프로그램 작성을 진행하는 방법
O Nassi-shcneiderman(나시-슈나이더만) 챠트
- Flowchart를 대신하여 복잡한 처리를 도형식으로 명확히 식별해 주는 그림
2. 소프트웨어 일반
1) 소프트웨어 : 하드웨어의 운영을 지시하는 명령어 및 응용 작업을 지시하는 프로그램의 총칭으로 시스템 소프트웨어(운영체제)와 응용 소프트웨어(응용 프로그램)으로 나눈다.
2) 운영체제(Operating System)
O 정의
- 컴퓨터와 사용자간의 인터페이스를 위한 프로그램
- 컴퓨터 하드웨어 성능을 최대한 효율적으로 운영하기 위한 것
- 입출력 장치, 파일 시스템, 처리기, 기억장치 등을 효율적으로 관리하는 프로그램
O 운영체제의 구성
- 제어프로그램
- 감시프로그램(Supervisor program) : 시스템 전체 작동 상태 감시/감독/제어
- 데이터 관리 프로그램(data management program) : 단위 작업 관리
- 작업관리 프로그램(Job management program) : . 데이터와 파일의 표준 처리
- 처리프로그램
- 언어번역 프로그램(Language translator program) : . 어셈블러, 컴파일러, 인터프리터, 링커, 로더
- 서비스 프로그램(Service program) : 서비스로 제공되는 sort, merge, 장치간 data 전환 등
- 문제처리 프로그램(Problem program) : 응용 프로그램
O 운영체제 운영 방식
- 단일 프로그램(Uni programming)
. 주기억장치 내에서 순차적으로 하나씩 응용프로그램을 처리하는 방법
- 다중 프로그래밍(Multi programming)
. 두 개 이상의 프로그램이 기계의 각 부분을 공유하거나 시차를 갖고 사용하는 방법
- 다중 처리(Multi processing)
. 두 개 이상의 CPU가 서로 연결되어 동시에 사용되는 시스템
- 실시간 처리(Real time processing)
. 자료의 발생 즉시 처리하는 방법
. 응답 시간이 빠르며 조회/예약업무 등에 사용
- 일괄 처리(Batch processing)
. 자료를 일정 양이나 기간동안 모아 한꺼번에 처리하는 방식
- 스풀링(Spooling)
. 디스크를 매우 큰 버퍼처럼 사용하여 입출력과 다른 작업을 병행하는 방법
- 시분할 시스템(Time sharing system)
. 다중 프로그램 처리시 CPU가 일정 시간대를 나누어 하나의 프로그램에게 자신의
사용 권한을 할당해 주는 방법
3) 응용 소프트웨어
컴퓨터를 운영하는데 필요한 프로그램들로 프로그래밍 언어로 작성한 프로그램과 응용 소프트웨어 패키지로 구분할 수 있다.
O 워드프로세서 패키지 : 문서 작성, 편집, 보관, 인쇄 기능 제공
O 그래픽 패키지
- 페인팅 프로그램 : 색을 통해 주위 환경을 변화시키는 것(페인트브러쉬, 페인트샵 등)
- 드로잉 프로그램 : 점들을 이용해 그리기가 가능한 것(코렐드로우 등)
- 사진 편집 프로그램 : 그림이나 사진의 결점 보완, 색체 변경, 크기 조정 등(포토샵 등)
O 전자출판 패키지(Desk Top Publishing)
- 출판계획에서부터 도서 제작에 이르는 모든 과정을 처리
- 페이지 메이커, 퀵 익스프레스, 벤추라 퍼블리셔, 오토페이지, 컬러페이지 등
O 통계 패키지 : SAS, SPSS 등
O 사무자동화(OA) 패키지 : 예) MS-Word, 액셀, 파워프인트
O 데이터베이스 패키지 : dBase 계열, 클리퍼(clipper), 폭스 프로(fox pro), 액세스(Access)등
O 표 계산 패키지(Spreadsheet) : 로터스 1-2-3, 쿼트로 프로 등
O 프리젠테이션 : 파워포인트, 프리랜스(Freelance) 등
O CAD/CAM(설계지원) 패키지 : AutoCAD 등
4) 각종 유틸리티 프로그램
- 파일 압축 프로그램, 노턴 유틸리티, 바이러스 퇴치 프로그램 등