1 / 27

Chapter 1 – 프로그래밍 언어 소개

Chapter 1 – 프로그래밍 언어 소개. Outline 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유 1.3 프로그래밍 언어에서의 추상화 1.4 계산 전형 1.5 언어정의. 영향. 컴퓨터에 대한 생각. 프로그래밍 방법. 프로그래밍 언어. 1. 프로그래밍 언어 소개. 의사 소통하는 방식 ( 언어 ) 생각하는 방법 ( 사고 ) 프로그래밍 언어 컴퓨터에 대한 이해와 활용

trang
Download Presentation

Chapter 1 – 프로그래밍 언어 소개

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 1 – 프로그래밍 언어 소개 Outline 1.1 프로그래밍 언어란 무엇인가 1.2 프로그래밍 언어를 배워야 하는 이유 1.3 프로그래밍 언어에서의 추상화 1.4 계산 전형 1.5 언어정의

  2. 영향 컴퓨터에 대한 생각 프로그래밍 방법 프로그래밍 언어 1. 프로그래밍 언어 소개 • 의사 소통하는 방식(언어) 생각하는 방법(사고) • 프로그래밍 언어 컴퓨터에 대한 이해와 활용 • 컴퓨터 발전 컴퓨터에 대한 생각 프로그래밍 언어의 변화

  3. 1. 프로그래밍 언어 소개 • 프로그래밍 언어 변화 요구 • 프로그래밍 언어 설계 • 아직도 완벽하게 이해되지 못한 면 존재 • 기본 법칙이나 개념 : 전산학의 근본 • 설계에 대한 지식 컴퓨터와 의사 소통, 컴퓨터 이해 • 교과 내용 • 특정 언어 중심 아님 • 언어의 밑바탕을 이루는 일반적인 개념 중심

  4. LDA X ADD Y STA Z Z := X + Y 1.1 프로그래밍 언어란 무엇인가 • 프로그래밍 언어의 정의 • 컴퓨터와 의사 소통하기 위한 표현법 (약간 부적절한 면 존재) • 1940년대 이전: 프로그래밍이전선연결 (프로그래밍 언어?) • 1940년대 Von Neumann 방식(Program stored computer) • CPU가 처리할 작업을 명령 코드로 작성 • 프로그래밍 개념 시작 • 어셈블리 언어 탄생 : symbol 사용 • 기계종속적 • 저급 수준의 추상화 • 읽고 쓰기 어려움 • 고급 수준의 추상화 요구 : 고급 언어 등장 • 프로그램 간략, 이해 용이, 이식성 증가 • 배정, 반복, 선택 개념

  5. 1.1 프로그래밍 언어란 무엇인가? 프로그래밍 언어 정의 “ 프로그래밍 언어는 기계가 읽을 수 있고 사람이 읽을 수 있는 형식으로 계산을 기술하는 표현 체계이다.”

  6. 1.1 프로그래밍 언어란 무엇인가? • 계산 (computation) 이란? • 수학적으로 형식적인 정의 가능(튜링 머신등) • 컴퓨터가 처리할 수 있는 작업을 의미 (일반적) • 기계가 읽을 수 있는 (machine-readable) • 효과적인 번역 가능 ( 간결한 구조의 언어 요구) • 단순 번역 알고리즘 존재 • 제한된 시간 내에 번역 가능 (프로그램 크기 단순 비례 이상적 임) • 문맥 자유 언어 (context free language) 위 조건들 만족 • 사람이 읽을 수 있는 (human-readable) • 기계 독립적인 추상성 제공 자연어 형태 • 프로그램 대형화 판독성은 새로운 국면 지역성 요구 • 프로그래밍 언어 소프트웨어 개발 환경에 포함되는 경향

  7. 1.2 프로그래밍 언어를 배워야 하는 이유 • 프로그래밍 언어 고찰 • 언어의 특징들(features)에 대한 기본 개념 • 특징들의 구현과 이 때 발생하는 문제점 • 특징들의 설계에 대한 기본 개념 • 실제 언어의 도입 예 : 비교 분석

  8. 1.2 프로그래밍 언어를 배워야 하는 이유 • 프로그래밍 언어를 고찰함으로써 얻는 장점 (1 of 2) • 사용하고 있는 언어의 이해와 효율적인 알고리즘 작성 • 일부 특징 및 특성은 거의 사용 안되며 이해를 못함 • 이들이 어떻게 수행되고 구현되는지 표현 안 됨 (지침서) • 프로그래머 시행 착오에 의존하여 이해 • 특징들 사용의 효율성과 비효율성 이해 • 예 : recursion , 동적 기억 장소 할당 (PL/I 등), 병행성 • 효율적 알고리즘 작성 가능 • 유용한 프로그래밍 구사 능력 • 언어 사고 • 다양한 언어 구조 알고리즘 작성 시 어휘 구사력 증가 • 어휘를 적재적소 사용 • 특징 구현 기술 실제 적용 능력 제공 (coroutine 등) • 좋은 알고리즘 작성

  9. 1.2 프로그래밍 언어를 배워야 하는 이유 • 프로그래밍 언어를 고찰함으로써 얻는 장점 (2 of 2) • 프로그래밍 언어 선택 능력 • 언어에 대한 다양한 지식 문제 해결에 적절한 언어 선택 • 예 : 문자 처리에 유용한 Snobol 4, 상업용 Cobol, 시스템 내장 프로그램 Ada, Modula-2 • 새로운 프로그래밍 언어의 학습 능력 • 여러 외국어 능통 학자 새 외국어 쉽게 배움 • 다양한 언어의 특징이해 새 언어 쉽게 배움 • 새 언어 : 기존의 여러 특징들의 선택 조합 • 새로운 프로그래밍 언어 설계 능력 • 언어 설계 기존의 여러 특징들의 선택 조합 • 개발 시스템 사용 방법 제공 일종의 언어 제공

  10. 1.3 프로그래밍 언어에서의 추상화 • 추상화 (abstraction) 의 개념 • 주어진 작업이나 객체를 속성들의 일부분을 가지고 필요한 만큼 묘사할 수 있는 방법을 지원하는 것 • 필수적인 속성만으로 주어진 것을 묘사하므로 나머지 속성들은 추상화,은닉, 또는 삭제됨 • 추상화의 범주 • 자료 추상화 • 문자열, 수, 트리와 같은 계산 될 자료의 특성을 추상화 • 제어 추상화 (알고리즘 추상화) • 실행 순서를 제어하는 특성을 추상화 • 제어 추상화의 예 : 반복문, 조건문, 프로시저 호출 등

  11. 1.3 프로그래밍 언어에서의 추상화 • 추상화에 포함된 정보의 양에 따른 분류 • 기본 추상화 (basic abstraction) • 가장 지역적인 기계정보에 대한 추상화 • 구조 추상화 (structured abstraction) • 보다 전역적인 정보인 프로그램의 구조에 대한 추상화 • 단위 추상화 (unit abstraction) • 단위 프로그램 전체에 대한 정보의 추상화

  12. 1.3 프로그래밍 언어에서의 추상화 • 자료 추상화 (1 of 2) • 기본 추상화 (basic abstraction) • 컴퓨터 내부 자료 표현 추상화 • 예) • 기억 장치의 장소 변수로 추상화 int x; float y; • 자료의 값 (2진수) 수를 십진 자료형으로 추상화 x = 5.7; • 구조 추상화 (structured abstraction) • 관련된 자료의 집합을 추상화 • 전형적인 구조 추상화 예 : 배열, 레코드 (구조형 자료) • 구조형에 새 이름 부여 기능(새 차원의 추상화) • type student = record …..

  13. 1.3 프로그래밍 언어에서의 추상화 • 자료 추상화 (2 of 2) • 단위 추상화 (unit abstraction) • 자료의 생성과 사용에 대한 정보를 한 장소에 모아두고, 자료의 세부사항에 대한 접근을 제한하는 도구 자료형의 구조 변경이 프로그램 전체에 영향을 주지 않으며, 자료 구조의 세부사항 무시 함 • 자료 캡슐화 또는 자료 추상화 (10장) • 예 : C++, Java의 class, Modula-2의 module, Ada의 package

  14. 1.3 프로그래밍 언어에서의 추상화 • 제어 추상화 (1 of 5) • 기본 추상화 (basic abstraction) • 몇 개의 기계 명령어를 모아 이해하기 쉬운 추상 구문화 • 대표적 예 • 배정문 : 계산과 값의 저장을 추상화한 것 x := x + y • [조건] 분기문 (FORTRAN의 GOTO문이나 IF문 등) IF (A .GT. B) GOTO 10

  15. 1.3 프로그래밍 언어에서의 추상화 • 제어 추상화 (2 of 5) • 구조 추상화 (structured abstraction) • (검사 값에 따라) 분할된 명령어 그룹 수행 예1 : 택일문 if문과 같은 택일문, Pascal의 case문, C언어의 switch문 등 예2 : 구조화 반복문 for, repeat, while, loop-exit 예3 : 강력한 구조 제어 : 부프로그램 (프로시저 추상화) procedure def, procedure invocation (새 활성화 환경)

  16. 1.3 프로그래밍 언어에서의 추상화 • 제어 추상화 (3 of 5) • 구조 추상화 (structured abstraction) 의 예 - Ada의 if 문 - Java의 if 문 1 if x > y then 2 t := x ; 3 x := y ; 4 y := t ; 5 else 6 x := x + y ; 7 y := y + l ; 8 endif ; 1 if (x > y) { 2 t := x ; 3 x := y ; 4 y := t ; 5 } 6 else { 7 x := x + y ; 8 y := y + l ; 9}

  17. 1.3 프로그래밍 언어에서의 추상화 • 제어 추상화 (4 of 5) • 구조 추상화 (structured abstraction) 의 예 • Java와 Ada의 반복문 //Ada의 예// 1i := 0 ; 2 loop 3 i := i + 1 ; 4 exit when sentence(i) /= ‘$’ ; 5 endloop ; //Java의 예// 1i = 0 ; 2do 3 i = i + 1 ; 4while (sentence(i) = ‘$’) ;

  18. 1.3 프로그래밍 언어에서의 추상화 • 제어 추상화 (5 of 5) • 단위 추상화 (unit abstraction) • 프로시저의 집합을 추상화 (관련된 프로시저 그룹 추상화) • 자료 관리 프로그램에서 평균, 표준편차 등 통계 작업 프로그램들을 모아서 하나의 단위 프로그램화 • 지원 도구 (library 형태 지원) • Ada의 package, Modula-2의 module, C++와 Java의 class • 기타 제어 추상화 • 병행 프로그래밍 (동기화, 통신 개념 지원) : coroutine, task, process • 추상화란 : readability 증가 목적

  19. 1.4 계산 전형 (computational paradigms) • 명령형 언어(imperative L.) 또는 절차적 언어(procedural L.) • 특징 • 명령의 순차적 실행 • 변수 사용 • 배정문 사용 • 문제점 • 폰 노이만 병목현상 발생(순차 실행) • 많은 자료의 동시 계산, 비결정적 계산, 순서에 의존하지 않는 계산 등에 비효율적 • 대표적 예 : C, Ada, Pascal, Fortran, Basic 등 대부분 언어 • 비 절차적 언어 : 함수형 언어, 논리형 언어

  20. 1.4 계산 전형 (computational paradigms) • 함수형 언어(functional L.) 또는 적용형 언어(applicative L.) (1 of 3) • 함수의 평가와 함수 적용을 기본으로 함 • 특징 • 함수의 평가 및 호출 방법을 제공 • 변수, 배정문이 없음 • 반복 연산은 재귀적 함수 이론에 의해 기술됨

  21. 1.4 계산 전형 (computational paradigms) • 함수형 언어(functional L.) 또는 적용형 언어(applicative L.) (2 of 3) • 절차형 프로그래밍과 함수형 프로그래밍 예 (Modula-2) 1 PROCEDURE gcd (u,v : INTERGER; 2 VAR x : INTERGER); 3VAR y, t : INTERGER 4BEGIN 5 x := u ; y := v ; 6 LOOP 7IF y <= 0 THEN 8EXIT 9END ; 10 t := y; 11 y := x MOD y; 12 x := t; 13END; 14END gcd; 1 PROCEDURE gcd (u,v : INTERGER) : INTEGER ; 2BEGIN 3IF v = 0 THEN 4RETURN u ; 5ELSE 6RETURN gcd (v, u MOD v) ; 7END; 8END gcd;

  22. 1.4 계산 전형 (computational paradigms) • 함수형 언어(functional L.) 또는 적용형 언어(applicative L.) (3 of 3) • 절차형 언어를 사용한함수형 프로그래밍 예 • 함수형 언어를 사용한 함수형 프로그래밍 예 // Modula-2 (최대공약수) 1 PROCEDURE gcd (u,v : INTERGER) : INTEGER ; 2BEGIN 3IF v = 0 THEN 4RETURN u ; 5ELSE 6RETURN gcd (v, u MOD v) ; 7END; 8END gcd; // Java (최대공약수) 1 int gcd (int u, int v) { 2if ( v == 0) 3return u ; 4else 5return gcd (v, u % v) ; 6 } 1 define (gcd u v) (if ( = v 0) u (gcd v (remainder u v ))))

  23. 1.4 계산 전형 (computational paradigms) • 논리형 언어 (logical L.) 혹은 선언적 언어 (declarative L.) • 특징 • 기호 논리학에 근거 • 계산의 실행 순서(how) 대신 무엇을 하려고 하는가(what)를 선언 • 반복이나 선택 개념 불필요 • 최대 공약수 (gcd) 에 대한 논리적 기술 • v = 0 이면 u 와 v 의 gcd 는 u 이다. • v > 0 이면 u 와 v 의 gcd 는 v 와 u mod v 의 gcd 와 같다. • 논리적 기술에 대한 Prolog 프로그램 1 gcd(U,V,U) :- V=0. 2 gcd(U,V,X) :- V>0, 3 Y is U mod V, 4 gcd(V,Y,X).

  24. 1.4 계산 전형 (computational paradigms) • 객체 지향 언어 (object-oriented L.) • 객체에 기반을 둔 언어 • 객체란 상태를 의미하는 기억 장소와 상태를 변경할 수 있는 연산의 집합 • 객체는 클래스로 그룹화 • 클래스 선언 • C나 Pascal에서 구조형 자료를 선언하는 방법과 유사 • 클래스의 인스턴스 • 선언된 객체의 실제 예 • 객체 지향의 방법을 처음 소개한 언어 : Simula 67

  25. 1// 객체 지향 언어 (object oriented L.) 예 2// Java로 작성된 최대공약수 선언부 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19class Main { // 클래스 GcdLcm 테스트 프로그램 20 public static void main (String[] args) { 21 GcdLcm g1, g2 = new GcdLcm (1000, 100) ; 22 g1 = new GcdLcm (18, 27) ; 23 System.out.println (“g1.gcd :” + g1.gcd + “g1.lcm :” + g1.lcm) ; 24 System.out.println (“g2.gcd :” + g2.gcd + “g2.lcm :” + g2.lcm) ; 25 } 26 } classGcdLcm { // 클래스 GcdLcm 선언 public int gcd, lcm ; int x, y ; GcdLcm (int num1, int num2) { x = num1 ; y = num2; gcd = gcdf (x, y) ; lcm = x * y / gcd ; } int gcdf (int a, int b) { if (b == 0) return a; else return gcdf (b, a % b) ; } } GcdLcm 클래스 사용 예 • GcdLcm 클래스의 객체 g1, g2 정의 • GcdLcm g1, g2 ; • g1의 기억 장소 할당 • g1 = new GcdLcm (18, 27) ; • g1이 갖는 값을 참조 • a = g1.gcd ; • b = g1.lcm;

  26. 1.5 언어 정의 • 프로그래밍 언어의 정확한 형식 정의가 필요한 이유 • 언어의 구조와 의미의 정확한 기술 없이는 프로그래밍이 불가능 • 모호함 없는 언어 구현 • 프로그래밍 과정에서 프로그램이 어떻게 동작할 것인가에 대한 문제 발생 시 유용 • 프로그램 설계 과정을 규격화하는 방법

  27. 1.5 언어 정의 • 언어 정의의 범주 형식 정의에는 구문(syntax) 정의와 의미(semantic) 정의가 있음 • 언어 구문 정의 • 언어 구문에 관한 정의는 형식화가 많이 되어 있음 • 대부분의 언어가 문맥 자유 문법을 만족하며 BNF로 정의 • 예 : Pascal의 if 문 <if 문> ::= if <조건> then <문> [ else <문> ] • 언어 의미 정의 • 의미는 프로그램의 실행 시 어떤 일이 발생하는가를 기술 • 예 : if 문에서 조건문이 거짓으로 판명 되었을 때, else 문 이하가 존재하지 않을 경우 • 언어 의미론은 형식화 미비 • 의미론의 형식적 정의 방법 : 디노테이셔녈 (denotational) 의미론, 액시어매틱 (axiomatic) 의미론

More Related