27
1 Chapter 1 – 프프프프프 프프 프프 Outline 1.1 프프프프프 프프프 프프프프 1.2 프프프프프 프프프 프프프 프프 프프 1.3 프프프프프 프프프프프 프프프 1.4 프프 프프 1.5 프프프프

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

  • Upload
    trang

  • View
    149

  • Download
    7

Embed Size (px)

DESCRIPTION

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

Citation preview

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

1

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

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

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

2

1. 프로그래밍 언어 소개

• 의사 소통하는 방식 ( 언어 ) 생각하는 방법 ( 사고 )

• 프로그래밍 언어 컴퓨터에 대한 이해와 활용• 컴퓨터 발전 컴퓨터에 대한 생각 프로그래밍 언어의 변화

영향

프로그래밍 방법 컴퓨터에 대한 생각

프로그래밍 언어

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

3

1. 프로그래밍 언어 소개

• 프로그래밍 언어 변화 요구

• 프로그래밍 언어 설계

– 아직도 완벽하게 이해되지 못한 면 존재– 기본 법칙이나 개념 : 전산학의 근본– 설계에 대한 지식 컴퓨터와 의사 소통 , 컴퓨터 이해

• 교과 내용

– 특정 언어 중심 아님– 언어의 밑바탕을 이루는 일반적인 개념 중심

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

4

1.1 프로그래밍 언어란 무엇인가

• 프로그래밍 언어의 정의– 컴퓨터와 의사 소통하기 위한 표현법 ( 약간 부적절한 면 존재 )– 1940 년대 이전 : 프로그래밍이 전선 연결 ( 프로그래밍 언어 ?)– 1940 년대 Von Neumann 방식 (Program stored computer)

• CPU 가 처리할 작업을 명령 코드로 작성

• 프로그래밍 개념 시작

• 어셈블리 언어 탄생 : symbol 사용– 기계종속적

– 저급 수준의 추상화

– 읽고 쓰기 어려움

• 고급 수준의 추상화 요구 : 고급 언어 등장– 프로그램 간략 , 이해 용이 , 이식성 증가

– 배정 , 반복 , 선택 개념

Z := X + YLDA XADD YSTA Z

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

5

1.1 프로그래밍 언어란 무엇인가 ?

프로그래밍 언어 정의

“ 프로그래밍 언어는 기계가 읽을 수 있고 사람이 읽을 수

있는 형식으로 계산을 기술하는 표현 체계이다 .”

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

6

1.1 프로그래밍 언어란 무엇인가 ?

• 계산 (computation) 이란 ?– 수학적으로 형식적인 정의 가능 ( 튜링 머신등 )

– 컴퓨터가 처리할 수 있는 작업을 의미 ( 일반적 )

• 기계가 읽을 수 있는 (machine-readable)– 효과적인 번역 가능 ( 간결한 구조의 언어 요구 )

– 단순 번역 알고리즘 존재

– 제한된 시간 내에 번역 가능 ( 프로그램 크기 단순 비례 이상적 임 )

– 문맥 자유 언어 (context free language) 위 조건들 만족

• 사람이 읽을 수 있는 (human-readable)– 기계 독립적인 추상성 제공 자연어 형태

– 프로그램 대형화 판독성은 새로운 국면 지역성 요구

– 프로그래밍 언어 소프트웨어 개발 환경에 포함되는 경향

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

7

1.2 프로그래밍 언어를 배워야 하는 이유

• 프로그래밍 언어 고찰

– 언어의 특징들 (features) 에 대한 기본 개념

– 특징들의 구현과 이 때 발생하는 문제점

– 특징들의 설계에 대한 기본 개념

– 실제 언어의 도입 예 : 비교 분석

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

8

1.2 프로그래밍 언어를 배워야 하는 이유

• 프로그래밍 언어를 고찰함으로써 얻는 장점 (1 of 2)

– 사용하고 있는 언어의 이해와 효율적인 알고리즘 작성• 일부 특징 및 특성은 거의 사용 안되며 이해를 못함

– 이들이 어떻게 수행되고 구현되는지 표현 안 됨 ( 지침서 )– 프로그래머 시행 착오에 의존하여 이해

• 특징들 사용의 효율성과 비효율성 이해– 예 : recursion , 동적 기억 장소 할당 (PL/I 등 ), 병행성

• 효율적 알고리즘 작성 가능

– 유용한 프로그래밍 구사 능력• 언어 사고• 다양한 언어 구조 알고리즘 작성 시 어휘 구사력 증가

• 어휘를 적재적소 사용• 특징 구현 기술 실제 적용 능력 제공 (coroutine 등 )• 좋은 알고리즘 작성

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

9

1.2 프로그래밍 언어를 배워야 하는 이유

• 프로그래밍 언어를 고찰함으로써 얻는 장점 (2 of 2)

– 프로그래밍 언어 선택 능력• 언어에 대한 다양한 지식 문제 해결에 적절한 언어 선택

– 예 : 문자 처리에 유용한 Snobol 4, 상업용 Cobol, 시스템 내장 프로그램 Ada, Modula-2

– 새로운 프로그래밍 언어의 학습 능력• 여러 외국어 능통 학자 새 외국어 쉽게 배움• 다양한 언어의 특징 이해 새 언어 쉽게 배움• 새 언어 : 기존의 여러 특징들의 선택 조합

– 새로운 프로그래밍 언어 설계 능력• 언어 설계 기존의 여러 특징들의 선택 조합• 개발 시스템 사용 방법 제공 일종의 언어 제공

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

10

1.3 프로그래밍 언어에서의 추상화

• 추상화 (abstraction) 의 개념– 주어진 작업이나 객체를 속성들의 일부분을 가지고 필요한

만큼 묘사할 수 있는 방법을 지원하는 것– 필수적인 속성만으로 주어진 것을 묘사하므로 나머지

속성들은 추상화 , 은닉 , 또는 삭제됨

• 추상화의 범주– 자료 추상화

• 문자열 , 수 , 트리와 같은 계산 될 자료의 특성을 추상화

– 제어 추상화 ( 알고리즘 추상화 )• 실행 순서를 제어하는 특성을 추상화• 제어 추상화의 예 : 반복문 , 조건문 , 프로시저 호출 등

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

11

1.3 프로그래밍 언어에서의 추상화

• 추상화에 포함된 정보의 양에 따른 분류

– 기본 추상화 (basic abstraction)• 가장 지역적인 기계정보에 대한 추상화

– 구조 추상화 (structured abstraction)• 보다 전역적인 정보인 프로그램의 구조에 대한 추상화

– 단위 추상화 (unit abstraction)• 단위 프로그램 전체에 대한 정보의 추상화

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

12

1.3 프로그래밍 언어에서의 추상화

• 자료 추상화 (1 of 2)

– 기본 추상화 (basic abstraction)• 컴퓨터 내부 자료 표현 추상화• 예 )

– 기억 장치의 장소 변수로 추상화int x; float y;

– 자료의 값 (2 진수 ) 수를 십진 자료형으로 추상화x = 5.7;

– 구조 추상화 (structured abstraction)• 관련된 자료의 집합을 추상화• 전형적인 구조 추상화 예 : 배열 , 레코드 ( 구조형 자료 )• 구조형에 새 이름 부여 기능 ( 새 차원의 추상화 )

– type student = record …..

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

13

1.3 프로그래밍 언어에서의 추상화

• 자료 추상화 (2 of 2)

– 단위 추상화 (unit abstraction)• 자료의 생성과 사용에 대한 정보를 한 장소에 모아두고 ,

자료의 세부사항에 대한 접근을 제한하는 도구

자료형의 구조 변경이 프로그램 전체에 영향을 주지 않으

며 ,

자료 구조의 세부사항 무시 함

• 자료 캡슐화 또는 자료 추상화 (10 장 )

• 예 : C++, Java 의 class, Modula-2 의 module, Ada 의 package

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

14

1.3 프로그래밍 언어에서의 추상화

• 제어 추상화 (1 of 5)

– 기본 추상화 (basic abstraction)• 몇 개의 기계 명령어를 모아 이해하기 쉬운 추상 구문화

• 대표적 예

– 배정문 : 계산과 값의 저장을 추상화한 것

x := x + y

– [ 조건 ] 분기문 (FORTRAN 의 GOTO 문이나 IF 문 등 )

IF (A .GT. B) GOTO 10

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

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 ( 새 활성화 환경 )

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

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 }

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

17

1.3 프로그래밍 언어에서의 추상화

• 제어 추상화 (4 of 5)– 구조 추상화 (structured abstraction) 의 예

• Java 와 Ada 의 반복문

//Java 의 예 //

1 i = 0 ;

2 do

3 i = i + 1 ;

4 while (sentence(i) = ‘$’) ;

//Ada 의 예 //

1 i := 0 ;

2 loop

3 i := i + 1 ;

4 exit when sentence(i) /= ‘$’ ;

5 endloop ;

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

18

1.3 프로그래밍 언어에서의 추상화

• 제어 추상화 (5 of 5)

– 단위 추상화 (unit abstraction)

• 프로시저의 집합을 추상화 ( 관련된 프로시저 그룹 추상화 )

• 자료 관리 프로그램에서 평균 , 표준편차 등 통계 작업 프로그램들을

모아서 하나의 단위 프로그램화

• 지원 도구 (library 형태 지원 )

– Ada 의 package, Modula-2 의 module, C++ 와 Java 의 class

– 기타 제어 추상화

• 병행 프로그래밍 (동기화 , 통신 개념 지원 ) : coroutine, task, process

★ 추상화란 : readability 증가 목적

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

19

1.4 계산 전형 (computational paradigms)

• 명령형 언어 (imperative L.) 또는 절차적 언어 (procedural L.)

– 특징• 명령의 순차적 실행

• 변수 사용

• 배정문 사용

– 문제점• 폰 노이만 병목현상 발생 ( 순차 실행 )

• 많은 자료의 동시 계산 , 비결정적 계산 , 순서에 의존하지 않는 계산 등에 비효율적

• 대표적 예 : C, Ada, Pascal, Fortran, Basic 등 대부분 언어

• 비 절차적 언어 : 함수형 언어 , 논리형 언어

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

20

1.4 계산 전형 (computational paradigms)

• 함수형 언어 (functional L.) 또는 적용형 언어 (applicative L.) (1 of

3)

– 함수의 평가와 함수 적용을 기본으로 함

– 특징

• 함수의 평가 및 호출 방법을 제공

• 변수 , 배정문이 없음

• 반복 연산은 재귀적 함수 이론에 의해 기술됨

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

21

1.4 계산 전형 (computational paradigms)

• 함수형 언어 (functional L.) 또는 적용형 언어 (applicative L.) (2 of 3)– 절차형 프로그래밍과 함수형 프로그래밍 예 (Modula-2)

1 PROCEDURE gcd (u,v : INTERGER;

2 VAR x : INTERGER);

3 VAR y, t : INTERGER

4 BEGIN

5 x := u ; y := v ;

6 LOOP

7 IF y <= 0 THEN

8 EXIT

9 END ;

10 t := y;

11 y := x MOD y;

12 x := t;

13 END;

14 END gcd;

1 PROCEDURE gcd (u,v : INTERGER) : INTEGER ;

2 BEGIN

3 IF v = 0 THEN

4 RETURN u ;

5 ELSE

6 RETURN gcd (v, u MOD v) ;

7 END;

8 END gcd;

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

22

1.4 계산 전형 (computational paradigms)

• 함수형 언어 (functional L.) 또는 적용형 언어 (applicative L.) (3 of 3)– 절차형 언어를 사용한 함수형 프로그래밍 예

– 함수형 언어를 사용한 함수형 프로그래밍 예

// Modula-2 (최대공약수 )

1 PROCEDURE gcd (u,v : INTERGER) : INTEGER ;

2 BEGIN

3 IF v = 0 THEN

4 RETURN u ;

5 ELSE

6 RETURN gcd (v, u MOD v) ;

7 END;

8 END gcd;

// Java (최대공약수 )

1 int gcd (int u, int v) {

2 if ( v == 0)

3 return u ;

4 else

5 return gcd (v, u % v) ;

6 }

1 define (gcd u v) (if ( = v 0) u (gcd v (remainder u v ))))

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

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).

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

24

1.4 계산 전형 (computational paradigms)

• 객체 지향 언어 (object-oriented L.)– 객체에 기반을 둔 언어

– 객체란 상태를 의미하는 기억 장소와 상태를 변경할 수 있는 연산의

집합

– 객체는 클래스로 그룹화

– 클래스 선언

• C 나 Pascal 에서 구조형 자료를 선언하는 방법과 유사

– 클래스의 인스턴스

• 선언된 객체의 실제 예

– 객체 지향의 방법을 처음 소개한 언어 : Simula 67

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

2004 Y.H. Won, Hongik University.All rights reserved.

25

1 // 객체 지향 언어 (object oriented L.) 예2 // Java 로 작성된 최대공약수 선언부3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class 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 }

class GcdLcm { // 클래스 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 클래스의 객체 g1, g2 정의

GcdLcm g1, g2 ;

• g1 의 기억 장소 할당

g1 = new GcdLcm (18, 27) ;

• g1 이 갖는 값을 참조

a = g1.gcd ;

b = g1.lcm;

GcdLcm 클래스 사용 예

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

26

1.5 언어 정의

• 프로그래밍 언어의 정확한 형식 정의가 필요한 이유

– 언어의 구조와 의미의 정확한 기술 없이는 프로그래밍이

불가능

– 모호함 없는 언어 구현

– 프로그래밍 과정에서 프로그램이 어떻게 동작할 것인가에

대한 문제 발생 시 유용

– 프로그램 설계 과정을 규격화하는 방법

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

27

1.5 언어 정의

• 언어 정의의 범주형식 정의에는 구문 (syntax) 정의와 의미 (semantic) 정의가 있음

– 언어 구문 정의• 언어 구문에 관한 정의는 형식화가 많이 되어 있음

• 대부분의 언어가 문맥 자유 문법을 만족하며 BNF 로 정의

• 예 : Pascal 의 if 문

<if 문 > ::= if < 조건 > then < 문 > [ else < 문 > ]

– 언어 의미 정의• 의미는 프로그램의 실행 시 어떤 일이 발생하는가를 기술

– 예 : if 문에서 조건문이 거짓으로 판명 되었을 때 ,

else 문 이하가 존재하지 않을 경우

• 언어 의미론은 형식화 미비

• 의미론의 형식적 정의 방법 : 디노테이셔녈 (denotational) 의미론 ,

액시어매틱 (axiomatic) 의미론