670 likes | 957 Views
8 장 프로그래밍 언어. 8.1 프로그램이란 ? 8.2 프로그램 언어의 역사 8.3 프로그램 설계 절차 8.4 프로그래밍 언어의 구성요소 8.5 프로그래밍 언어. 8 장 프로그래밍 언어. 8.1 프로그램이란 ?. 프로그램이란 ?. 수식이나 작업을 컴퓨터에 알맞도록 정리해서 순서를 정하고 컴퓨터 특유의 명령코드로 고쳐 쓰는 작업을 총칭 코딩 (coding) : 컴퓨터의 명령 코드를 쓰는 작업. 윈도우 기반의 프로그램들의 예. exe(execution) 파일
E N D
8장 프로그래밍 언어 8.1 프로그램이란? 8.2 프로그램 언어의 역사 8.3 프로그램 설계 절차 8.4 프로그래밍 언어의 구성요소 8.5 프로그래밍 언어
8장 프로그래밍 언어 8.1 프로그램이란?
프로그램이란? • 수식이나 작업을 컴퓨터에 알맞도록 정리해서 순서를 정하고 컴퓨터 특유의 명령코드로 고쳐 쓰는 작업을 총칭 • 코딩(coding) : 컴퓨터의 명령 코드를 쓰는 작업 프로그램이란
윈도우 기반의 프로그램들의 예 • exe(execution) 파일 실행파일로서 프로세서에게 명령을 전달 • dll(dynamic link library) 파일 exe 파일의 한 다른 실행중인 프로그램에 의해 조정됨 • ini(initialization) 파일 윈도우의 크기나 시작 위치, 배경 색, 사용자 이름과 같은 설정 정보를 포함 • hlp(Help) 파일 help 파일은 색인되거나 연결된 형식의 정보 보유 프로그램이란
8장 프로그래밍 언어 8.2 프로그램 언어의 역사 각 세대별 언어 언어구현기법에 의한 분류 방법론에 의한 분류
프로그램 언어의 역사 • 제 1세대 언어 • 1945년 : 기계어 • 제 2세대 언어 • 1950년대 중반 : 어셈블리어 • 제 3세대 언어 • 1960년대 초기 : 상위 수준 언어 • 제 4세대 언어 • 1970년대 초기 : 고상위 수준 언어 • 제 5세대 언어 • 1980년대 초기 : 자연 언어 각 세대별 언어
제 1세대 언어 • 기계어(machine code) • 컴퓨터가 이해하는 숫자 1과 0으로만 표현된 1세대 언어 각 세대별 언어
제 2세대 언어 • 어셈블리어(assembly) • 어셈블리어는 보다 나은 프로그래밍 환경을 제공하고자 고안된 2세대 언어로서 기계어로 표현할 때의 복잡성을 없애기 위해 숫자가 아닌 기호를 사용 • 어셈블러(assembler) • 어셈블러에 의해 기계어로 번역할 수 있는 프로그램 언어를 어셈블리어라고 함 각 세대별 언어
제 3세대 언어 • 상위 수준 언어(high level language) • 일반적인 언어에 가깝게 수준을 높여 사용하기 쉽게 만든 언어 • 컴파일러(compiler) 고급언어로 쓰여진 프로그램이 컴퓨터에서 수행될 수 있도록컴퓨터가 직접 이해할 수 있는 언어로 바꾸어 주는 역할 각 세대별 언어
제 3세대 언어 • 원시 프로그램(source code) • 컴파일을 하기 위하여 입력되는 프로그램 • 목적 프로그램(object code) • 번역되어 출력되는 프로그램 각 세대별 언어
제 3세대 언어 • 크로스 컴파일러(cross-compiler) • 원시 프로그램을 컴파일러가 수행되고 있는 컴퓨터의 기계어로 번역하는 것이 아니라, 다른 기종에 맞는 기계어로 번역하는 컴파일러 • 인터프리터(interpreter) • 중간 언어를 입력으로 받아 목적 언어로 변환하지 않고 직접 수행하는 프로그램 각 세대별 언어
제 4세대 언어 • 고상위 수준 언어(very high level language) • 언어라기보다는 일종의 범용 프로그램 패키지라고 할 수 있음 • 기업 등의 전자자료 처리시스템(EDPS:electronic data processing system)이 큰 규모로 복잡해지고, 경영환경이 급속히 변해 감에 따라, 이에 대응하기 위한 시스템 유지나 신규 개발이 대량화되어, 시스템개발의 생산성 향상을 목적으로 만들어짐 각 세대별 언어
제 5 세대 언어 • 자연 언어(natural language) • 인간의 언어와 비슷한 형태를 지닌 언어 • 보다 사람과 컴퓨터간의 자연스러운 연결을 유도 하는 형태 각 세대별 언어
언어 구현 기법에 의한 분류 • 컴파일러 • 기계어로 번역하여 기계어 프로그램을 만들어 실행시키는 방법 • 컴파일러, 어셈블러, 링키지 에디터, 로더등 • 예) Fortran, Algol, PL/I, Pascal, Cobol, C, Ada ...... 언어 구현 기법에 의한 분류
언어 구현 기법에 의한 분류 • 인터프리터 기법(Lisp, Snobol4, APL, Prolog) • 고급 언어로 된 프로그램을 자료로 읽어 들여서 기계어 수행과 동일한 알고리즘으로 그 프로그램의 각 문장을 명령문단위로 번역하고 실행 언어 구현 기법에 의한 분류
구현 기법에 따른 비교 언어 구현 기법에 의한 분류
프로그래밍 방법론에 따른 분류 • 초창기 : 문제 해결을 위해 사용자가 기계의 특성을 파악 • 후기 : 인간의 특성에 맞추어 기계가 문제를 해결해주는 프로그래밍 환경 방법론에 의한 분류
프로그래밍 방법론 • 명령형 방법론 • 프로그래밍이 쓰여진 순서대로 실행되는 방법 • 예) FORTRAN, BASIC, C등 • 절차형 방법론 • 문제 해결을 위해 어떤 절차가 필요한가? 보다 무엇이 문제인가?에 초점을 맞추는 방법론 • 예) GPSS, Prolog 등 방법론에 의한 분류
프로그래밍 방법론 • 함수형 방법론 • 프로그램은 입력 값에 대한 출력 값을 유도하는 함수 • 예) LISP, ML, Scheme 등 • 객체지향형 방법론 (OOP) • 프로그램의 구성요소를 수동적이 아닌 능동적 객체(object)로 간주 • 예)비주얼 베이직, 델파이, C++, 자바 등 방법론에 의한 분류
8장 프로그래밍 언어 8.3 프로그램 설계 절차 프로그래밍 언어의 설계 원칙 프로그래밍 방법
프로그램 설계 절차 • 설계 기준 • 초기 : 실행의 효율성(프로그램의 실행속도), 판독성(프로그램의 읽기 능력) • 60년대 : 추상화 기법, 규칙과 제한의 최소화를 이용하여 복잡성을 제어 • 70년대 : 4세대에서는 프로그램의 간결성, 추상화 를 염두 • 80년대 : 논리, 수학적 개념을 도입하여 더욱 발전 프로그램 설계 절차
프로그래밍 언어의 설계원칙 • 프로그래밍 언어의 개념이 분명하고 단순해야 하며, 일관성이 있어야 하며 구문(syntax)이 분명해야 한다 • 프로그램 검증이 용이하여 수정이나 갱신이 편해야 하고 적절한 프로그램 작성환경이 갖추어져 있어야 한다 • 프로그램이 호환성이 있어야 하며 효율적이어야 한다 프로그램 설계 절차
문제해결을 위한 프로그래밍 방법 • 플로우 차트(flow chart) 프로그램의 문장의 실행 순서를 프로그램 제어 흐름이라 하며 이를 도식적으로 나타낸 것 • 의사코드(pseudo code) 프로그래밍 코드처럼 보이는 텍스트 형태의 코드, 세세한 부분과 구문을 모두 포함하고 있지는 않다 프로그램 설계 절차
세 개의 숫자를 더하여 평균을 출력하는 의사코드와 플로우차트 • 의사코드 • 컴퓨터에 세 개의 숫자를 입력하라 • 세 수를 더하고 그 합을 3으로 나누어 평균을 계산하라 • 평균값을 출력하라 프로그램 설계 절차
알고리즘 • 컴퓨터에서의 알고리즘은 어떤 문제의 해결을 위해 컴퓨터가 사용 가능한 정확한 방법 • 명확성 : 각 연산들은 명확한 의미를 가져야 한다 • 효율성 : 각 연산은 원칙적으로 일정한 시간 내에 사람이 연필로 할 수 있어야 한다 • 입력 : 외부 입력자료가 있을 수 있다 • 출력 : 하나 이상의 결과가 나온다 • 종결성 : 유한 번의 연산 후에는 반드시 끝나야 한다 프로그램 설계 절차
프로그램 설계 절차 • 프로그램의 필요사항 확인 • 프로그램 디자인 • 프로그램 코딩 • 프로그램 테스트 • 프로그램 유지 프로그램 설계 절차
프로그램 디자인 프로그램 설계 절차
8장 프로그래밍 언어 8.4 프로그래밍 언어의 구성 요소 변수, 상수, 리터럴 수식 및 제어문
프로그램 문장의 구성 요소 • 선언(declarative)문 • 프로그램에서 사용될 데이터들을 정의 • 명령(imperative)문 • 문제 해결을 위한 프로그램의 알고리즘을 기술 • 주석(comments)문 • 프로그램의 실행과는 상관이 없으나 후의 프로그램의 수정이나 관리를 위해 프로그램에 대한 해설을 기록 프로그래밍 언어의 구성 요소
변수, 상수, 리터럴 • 변수(variable) • 프로그램 실행 중 변화하는 값을 저장 • 상수(constant) • 프로그램 실행 중 변하지 않는 고정된 값을 저장 • 리터럴(literal) • 변수나 상수를 이용하지 않고 직접적으로 쓰인 값 • 예) 변수 X 에 2 를 더하는 식 : X + 2 프로그래밍 언어의 구성 요소
자료형 • 자료형이란 프로그램의 구성원이 될 수 있는 자료들의 집합 • 수치형 • 연산 속도가 매우 빠르다 • 논리형 • 참/거짓(true/false)으로 구분된다. • 문자형 • 문자열 자료형으로 문자열 분해, 조립 연산 방법도 제공 • 포인터 자료형 • 포인터란 어떤 객체에 대한 참조를 의미 • 구조 자료형 • 배열과 레코드형이있다 프로그래밍 언어의 구성 요소
언어별 자료형 선언 프로그래밍 언어의 구성 요소
수식 및 제어문 구문 정의 • 선언문 • 프로그램이 실행될 때 사용될 자료의 속성을 언어의 번역기에 알려주는 프로그램 • 수식 • 계산되어야 할 수식을 기술하는 것으로 상수나 변수 같은 피연산자들과 연산자들 그리고 사용 가능한 함수 호출로 이루어진다. 프로그래밍 언어의 구성 요소
C의 연산자 프로그래밍 언어의 구성 요소
제어문 프로그램의 실행순서를 조정하는 명령어들을 제어문이라 한다 • 조건문 조건식을 주어 조건결과에 따라 프로그램 실행 순서를 결정하는 명령어 제어문
if 문 • 조건에 따라 then이나 else 다음의 지점으로 이동시킨다 • 예) 주전자에 물이 있으면 물을 마시고 없으면 주전자에 물을 떠온다 제어문
case 문 • 여러 가지 결과가 나올 수 있는 조건문일 때 사용 • 요일별로 다른 카드를 출력하는 예 제어문
반복문 • 반복문은 탈출 조건(exit condition)을 만날 때까지 문장을 반복적으로 수행하는 문장 • do-while문 • while문 • repeat문 • for문 등 반복문
for 문 • 특정 횟수만큼 문장을 반복 수행하는 문장 • for (식 1; 식 2; 식 3) • 명령문 1; 반복문
for 문의 예 • 1부터 10까지 더하는 프로그램 반복문
while 문 • 처음 시작할 때 탈출 조건문을 가지고 시작하며 조건식이 참인 동안 루프를 반복하는 반복문 반복문
while 문의 예 • 0부터 10까지 세는 프로그램 반복문
do-while 문 • while문의 변형으로 반복여부를 판단하는 조건식을 while문 다음에 명시하여, 조건이 참인 동안(while) 루프 범위를 반복 • do • 명령문 1; • while (식 1); 반복문
goto 문 • 지정된 위치로 제어를 바꾸며 분기될 문의 앞에는 레이블(label)을 명시 • again: i=i+1; • : • goto again; GOTO문
주석문(comment) • 다른 프로그래머나 차후에 수정을 위해 프로그램에 대한 해설을 코드의 중간에 삽입하여 설명을 달아 놓는 것 • C, C++, Java /* This is a comment */ • Ada, FORTRAN - - this is a comment 주석문
프로시저(procedure) • 프로시저란 각각의 독립적인 프로그램 기본 단위(subprogram)로 주어진 문제를 해결하기 위하여 수행되는 일련의 작업 순서 및 과정을 가지고 있슴 • 선언문과 실행문으로 구성 프로그래밍 언어의 구성 요소
함수, 기능(function) • 함수란 미리 정의된 특정 작업을 수행하기 위해 기록된 수행 절차라 할 수 있는 특수한 형태의 부 프로그램 • 스프레드시트에서 함수의 예 sum(x,y,z) 프로그래밍 언어의 구성 요소
서브루틴(subroutine) • 하나의 프로그램을 구성하는 독립적인 루틴 • 프로그램이 처음 실행될 때 시작되는 주 프로그램 루틴으로부터 호출되어 작업을 수행하는 독립적인 함수와 프로시저를 지칭 프로그래밍 언어의 구성 요소
8장 프로그래밍 언어 8.5 프로그래밍언어 구조적 프로그래밍 객체지향형 프로그래밍 프로그래밍 언어의 종류
구조적 프로그래밍(structured programming) • 1960년대 말 E.W.다이크스트라가 주창한 프로그램 작성 기법 • 종전의 프로그램 작성 방법의 문제를 사전에 방지하기 위하여, 프로그램을 작성할 때에는 가급적 순서에 컴퓨터 프로그램을 여러 갈래로 분기하여 복잡하게 하지 않고, 순서대로, 선택적으로 반복 문장을 사용하는 제어구조만을 사용하는 프로그램 구조적 프로그래밍