Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어
Copyright © 2015 Pearson Education, Inc. 6.1 역사적 고찰 6.2 전통적 프로그래밍 개념 6.3 프로시저 단위 6.4 언어의 구현 6.5 객체지향 프로그래밍 6.6 병행 활동 프로그래밍 6.7 선언형 프로그래밍 6 장 : 프로그래밍 언어 6-2
Copyright © 2015 Pearson Education, Inc. 6.1 역사적 고찰 그림 6.1 세대별 프로그래밍 언어 6-3
Copyright © 2015 Pearson Education, Inc. 기계어 - 2, 8, 16 진 숫자로 표현, 이해하기 어려움 ( 예 그림 2.7 참조 156C 166D 5056, …) 기계 명령을 표현하기 위한 기호 체계 – 명령 코드는 기호식 이름 ( 약어 ) 으로 표현한다. – 프로그램 변수 (variable) 또는 식별자 (identifier): 메모리 주소를 나타내는 의미 있는 이름이며, 프로그래머가 정한다. 2 세대 언어 : 어셈블리 언어 6-4 Modified by Jong Joon Park(
Copyright © 2015 Pearson Education, Inc. 기계 명령과 어셈블리 명령 사이에는 일대일 대응 관계가 존재한다. – 프로그래머는 기계처럼 사고해야 한다. 본질적으로 기계 종속적이다. 어셈블러 (assembler) 라고 불리는 프로그램에 의해 기계어로 변환된다. 어셈블리 언어의 특성 6-5
Copyright © 2015 Pearson Education, Inc. 프로그램 예제 기계어 156C 166D CE C000 어셈블리 언어 LD R5, Price LD R6, ShipCharge ADDI R0, R5 R6 ST R0, TotalCost HLT 6-6
Copyright © 2015 Pearson Education, Inc. 고급 프리미티브를 사용한다. –5 장의 의사코드와 유사함 ( 대체로 ) 기계 독립적임 ( 기계 구조를 잘 몰라도 프로그래밍 가능 ) 예 : FORTRAN, COBOL 각 프리미티브는 여러 개의 기계어 명령에 대응된다. 컴파일러 (compiler) 라고 불리는 프로그램에 의해 기계어로 변환된다. 3 세대 언어 6-7
Copyright © 2015 Pearson Education, Inc. 그림 6.2 프로그래밍 패러다임의 진화 6-8
Copyright © 2015 Pearson Education, Inc. 그림 6.3 단순한 함수 여러 개를사용하여 구축된 수표책 정리 함수 6-9
Copyright © 2015 Pearson Education, Inc. 6.2 전통적 프로그래밍 언어 그림 6.4 전형적인 명령형 프로그램 또는 프로그램 단위의 구성 6-10
Copyright © 2015 Pearson Education, Inc. 정수 (integer) 실수 (real, float): 소수점 아래 부분이 있는 수 문자 : 기호, ASCII, Unicode 부울 (Boolean): 참 (1, true) / 거짓 (0, false) * 프리미티브 자료형 이라고도 하며, 표현 형식이 다름 컴파일 언어 – 소스 프로그램을 컴파일하여 실행가능한 목적 프로그램으로 변환하여 실행하는 언어 종류. 예 ) C, C++, Java 등. 스크립트 언어 – 컴파일과정 없이 소스프로그램을 바로 번역하여 실행하는 언어 종류. 예 ) JavaScript, PHP, Perl, VBScript 등. 기본 데이터 타입 (primitive data type) 6-11 Modified by Jong Joon Park(
Copyright © 2015 Pearson Education, Inc. 정수 표현 데이터 타입 - 정수 0-12 Inserted by Jong Joon Park(
Copyright © 2015 Pearson Education, Inc. 데이터 타입 - 실수 표현 0-13 Inserted by Jong Joon Park(
Copyright © 2015 Pearson Education, Inc. float Length, Width; int Price, Total, Tax; char Symbol; int WeightLimit = 100; 변수와 데이터 타입 6-14
Copyright © 2015 Pearson Education, Inc. 데이터 구조 6-15 데이터에 대한 개념적 형태나 배치 일반적인 자료 구조의 하나인 배열 (array) –C int Scores[2][9]; –FORTRAN INTEGER Scores(2,9)
Copyright © 2015 Pearson Education, Inc. 배열 (array) : 그림 개의 행과 9 개의 열을 갖는 2 차원 배열 6-16 S[0,0]S[0,1]S[0,2]S[0,3]S[0,4]S[0,5]S[0,6]S[0,7]S[0,8] S[1,0]S[1,1]S[1,2]S[1,3]S[1,4]S[1,5]S[1,6]S[1,7]S[1,8] Modified by Jong Joon Park(
Copyright © 2015 Pearson Education, Inc. 그림 6.6 구조체 (structured type) Employee 의 개념적 구성 6-17 struct { char Name[25]; int Age; float SkillRating; } Employee;
Copyright © 2015 Pearson Education, Inc. C, C++, C#, Java z = x + y; x 번지의 값과 y 번지 값을 더하여 z 번지 ( 메모리 위치 ) 에 저장 Ada z := x + y; APL (A Programming Language) z ← x + y 배정문 6-18
Copyright © 2015 Pearson Education, Inc. Go to 문 goto Evade() goto if (KryptoniteLevel < LethalDose) then goto 60 goto RescueDamsel() 단일 문장 표현 if (KryptoniteLevel < LethalDose): RescueDamsel() else: Evade() 제어문 – 프로그램 실행 순서 제어 ( 바꿈 ) 조건문과 반복문 6-19 Modified by Jong Joon Park(
Copyright © 2015 Pearson Education, Inc. Python 에서의 if if (condition): statementA else: statementB C, C++, C#, Java 등에서의 if if (condition) statementA; else statementB; Ada 에서의 if IF condition THEN statementA; ELSE statementB; END IF; 제어문 - 조건문
Copyright © 2015 Pearson Education, Inc. C, C++, C#, Java 등에서의 switch 문 switch (variable) { case 'A': statementA; break; case 'B': statementB; break; case 'C': statementC; break; default: statementD; } Ada CASE variable IS WHEN 'A'=> statementA; WHEN 'B'=> statementB; WHEN 'C'=> statementC; WHEN OTHERS=> statementD; END CASE; 제어문 – 조건문
Copyright © 2015 Pearson Education, Inc. Python 에서의 while while (condition): body C, C++, C#, Java 등에서의 while, do~until, for while (condition) { body } do { body } until (condition) for ( 초기값 ; 종료 조건문 (condition); 증감문 ) { body } Ada 에서의 while WHILE condition LOOP body END LOOP; 제어문 - 반복문 6-22 Modified by Jong Joon Park(
Copyright © 2015 Pearson Education, Inc. 그림 6.7 for 루프 구조와 C++, C#, Java 등에서의 for 문 6-23
Copyright © 2015 Pearson Education, Inc. 프로그램 내부의 설명문 사람이 프로그램을 읽을 때 도움이 됨 컴파일러는 주석을 무시함 /* This is a comment. */ // This is a comment 주석 (Comment) 6-24
Copyright © 2015 Pearson Education, Inc. 반복, 중복되는 루틴을 하나의 단위 프로그램으로 분리 호출 이 개념에 다양한 용어가 사용됨 : – 함수 (function), 부프로그램 (subprogram), 서브루틴 (subroutine), 프로시저 (procedure), 메쏘드 (method) 프로시저 단위는 헤더 (header), 함수명 (name), 매개변수 (parameters), 본체 (body, 실행문 ) 로 구성 지역 (local) 변수와 전역 (global) 변수 형식 매개변수 (formal parameter) 와 실질 매개변수 (actual parameter) 값 (value) 에 의한 매개변수 전달과 참조 (reference, 주소 ) 에 의한 매개변수 전달 6.3 프로시저 단위 (Procedure Unit) 6-25 Modified by Jong Joon Park(
Copyright © 2015 Pearson Education, Inc. 함수 (function, 부 프로그램 sub-routine 예 ) 0-26 int main(void) { int n, result; get_integer() ; result = is_prime(n) ; if ( result == 1 ) printf("%d 은 소수입니다.\n", n); else printf("%d 은 소수가 아닙니다.\n", n); get_integer() ; result = is_prime(n) ; …; return 0; } /* 정수를 입력하시오 : 은 소수입니다. 계속하려면 아무 키나 누르십 … */ #include int n; void get_integer(void) { printf(" 정수를 입력하시오 : "); scanf("%d", &n); } int is_prime(int n) { int divisors = 0, i; for ( i = 1 ; i <= n ; i++ ) if ( n%i == 0 ) divisors++; return (divisors == 2); } Inserted by Jong Joon Park(
Copyright © 2015 Pearson Education, Inc. 그림 6.8 함수와 관련한 제어의 흐름 6-27
Copyright © 2015 Pearson Education, Inc. 그림 6.9 C 언어로 작성된 ProjectPopulation 함수 6-28
그림 6.10 값에 의한 전달과 Demo 함수의 실행
그림 6.11 참조에 의한 전달과 Demo 함수의 실행
Copyright © 2015 Pearson Education, Inc. 그림 6.12 C 언어로 작성된 결과 ( 반환값 ) 있는 함수 CylinderVolume 6-31
Copyright © 2015 Pearson Education, Inc. 6.4 언어의 구현 그림 6.13 번역 과정 (Compile) 6-32 소스 프로그램 (source program) – 사용자가 작성한 프로그램 목적 프로그램 (object program) – 기계어로 번역된 프로그램으로 컴퓨터 실행 가능한 프로그램 컴파일러 (compiler) – 위 어휘분석, 구문분석, 코드생성 과정 처리하는 프로그램 Modified by Jong Joon Park(
Copyright © 2015 Pearson Education, Inc. 그림 6.14 파이썬 if-else 문장에 대한 구문 다이어그램 6-33
Copyright © 2015 Pearson Education, Inc. 그림 6.15 간단한 산술식의 구조를 기술하는 구문 다이어그램 6-34
Copyright © 2015 Pearson Education, Inc. 그림 6.16 그림 6.15 의 구문 다이어그램에 기초한 문자열 x + y * z 의 구문 분석 트리 6-35
그림 6.17 if B1: if B2: S1 else: S2 문장을 위한 두 개의 구문 분석 트리
Copyright © 2015 Pearson Education, Inc. 그림 6.18 ( 객체지향 방식의 ) 번역 과정 6-37
Copyright © 2015 Pearson Education, Inc. 객체 (object): 데이터와 프로시저를 포함하는 능동적 프로그램 단위 클래스 (class): 객체 구성 ( 생성 ) 에 사용되는 틀 (template) 인스턴스 (instance): 클래스 ( 틀 ) 로부터 생성된 객체 객체지향 프로그램 특징 : 캡슐화 (encapsulation), 정보 은닉 (information hiding), 상속 (inheritance), 다형성 (polymorphism) 6.5 객체지향 프로그래밍 객체와 클래스 6-38 Modified by Jong Joon Park(
Copyright © 2015 Pearson Education, Inc. 그림 6.19 컴퓨터 게임에서 레이저 무기를 기술하는 클래스의 구조 6-39 instance( 인스턴스 ) 사용 예 ) int main(void) { myclass = new LaserClass(); …; } Modified by Jong Joon Park(
Copyright © 2015 Pearson Education, Inc. 인스턴스 변수 : 객체 내부의 변수 – 객체 내부의 정보를 저장한다 메쏘드 (method): 객체 내부의 프로시저 – 객체가 수행할 수 있는 행위를 기술한다 생성자 (constructor): 객체가 처음 생성될 때 객체의 초기화에 사용되는 특별한 메쏘드 객체의 구성요소 6-40
Copyright © 2015 Pearson Education, Inc. 그림 6.21 생성자를 갖는 클래스 6-41
Copyright © 2015 Pearson Education, Inc. 캡슐화 (encapsulation): 객체의 내부 구성요소에 대한 접근을 제한하기 위한 수단 – 전용 (private) 속성 – 공용 (public) 속성 객체의 무결성 (integrity) 6-42
Copyright © 2015 Pearson Education, Inc. 그림 6.22 Java 또는 C# 언어에서 캡슐화를 사용한 LaserClass 클래스의 정의 6-43
Copyright © 2015 Pearson Education, Inc. 상속 (inheritance): 새로운 클래스가 이미 정의되어 있는 클래스를 사용하여 정의될 수 있게 해준다. 다형성 (polymorphism): 메쏘드 호출이 적용 대상 객체에 따라 달리 해석된다. 추가적인 객체지향 관련 개념 6-44
Copyright © 2015 Pearson Education, Inc. 병렬 (parallel) 또는 병행 (concurrent) 처리 : 여러 프로세스의 동시 실행 – 진정한 병행 처리는 다수의 CPU 를 필요로 한다. – 한 개의 CPU 에서 시분할 방식으로 모방할 수 있다. 6.6 병렬 처리 프로그래밍 6-45
Copyright © 2015 Pearson Education, Inc. 그림 6.23 쓰레드의 생성 6-46
Copyright © 2015 Pearson Education, Inc. 상호 배제 (Mutual Exclusion): 한 번에 한 프로세스만이 데이터에 접근할 수 있도록 보장하기 위한 한 방법 모니터 (monitor): 자신에 대한 접근 제어 기능을 갖춘 데이터 항목 데이터에 대한 접근 제어 6-47
Copyright © 2015 Pearson Education, Inc. 분해 (resolution): 둘 이상의 명제들을 결합하여 연역적 추론 결과에 해당하는 새로운 명제를 생성 – 예 : (P OR Q) AND (R OR Q) 는 (P OR R) 로 분해된다 – 분해문 (resolvent): 분해에 의해 생성된 새로운 명제 – 절 (clause) 형태 : 기초 요소들을 부울 연산자 OR 로 결합한 형식의 명제 단일화 (unification): 변수에 값을 배정하여 두 명제가 “ 호환성 ” 을 갖게 만드는 과정 6.7 선언형 프로그래밍 6-48
Copyright © 2015 Pearson Education, Inc. 그림 6.24 (P OR Q) 와 (R OR ¬Q) 를 분해하여 (P OR R) 만들기 6-49
Copyright © 2015 Pearson Education, Inc. 그림 6.25 명제 (P OR Q), (R OR ¬Q), ¬R, ¬P 등에 대한 분해 6-50
Copyright © 2015 Pearson Education, Inc. 사실 : 사실 확립을 위한 Prolog 문장 – 하나의 술어 (predicate) 로 이루어진다 – 형식 : predicateName(arguments). 예 : parent(bill, mary). 규칙 : 일반적 규칙을 확립하기 위한 Prolog 문장 – 형식 : conclusion :- premise. :- 는 “if” 를 의미함 – 예 : wise(X) :- old(X). – 예 : faster(X,Z) :- faster(X,Y), faster(Y,Z). Prolog 6-51