Download presentation
Presentation is loading. Please wait.
1
언어 언어 사람 사람 사람들간의 의사 소통을 위한 수단
자, 그러면 프로그래밍 언어를 배우기에 앞서, 언어와 프로그래밍 언어의 차이를 먼저 보도록 합시다. 먼저 언어라는 것은 무엇일까에 대해서 생각해 봅시다. 먼저 사전에는 어떻게 정의해 놓았을까요 ? 제가 가진 사전에는 “음성 또는 문자를 수단으로 하여 사람의 사상, 감정을 표현하고 의사를 전달하는 수단과 체계”라고 정의되어있습니다. 우리들은 매일 언어를 사용합니다. 그리고 사람들간의 사상이나 감정, 의견 등을 남에게 알리고, 남의 의사를 알게 되는 수단이라고 말할 수 있습니다. 간단하게 이야기하자면 “사람들간의 의사 소통을 위한 수단”이 “언어”라고 말할 수 있습니다. 사람들간의 의사 소통을 위한 수단
2
프로그래밍 언어 프로그램 컴퓨터 사람 인간이 컴퓨터에게 계산 절차를 알려 주는 데 사용하는 기호 체계
그렇다면 프로그래밍 언어는 어떻게 정의할 수 있을까요 ? 프로그래밍 언어는 사람이 컴퓨터에게 의도된 작업의 수행 절차를 알리는 것을 목적으로 하고 있습니다. 즉, 사람이 컴퓨터에게 일방적으로 의사를 전달하면 된다는 것이죠. 그리고 여기에서 ‘사람의 의사’란 ‘어떠한 작업을 어떻게 하고자하는가’에 관한 것입니다. 우리는 이번 학기에 이러한 중간 역할을 하는 프로그래밍 언어의 여러가지 특징과 특성을 배우면서, 실제로 어떤 프로그래밍 언어가 그러한 부류에 속하는지와 프로그래밍 언어의 특성이 어떻게 표현되는가에 대해 배울 것입니다. 인간이 컴퓨터에게 계산 절차를 알려 주는 데 사용하는 기호 체계
3
프로그래밍 언어론 소개 프로그래밍 언어의 기초 개념 프로그래밍 언어의 자료 표현법 프로그래밍 언어의 식과 제어
프로그래밍 언어의 추상 자료형 객체지향 프로그래밍 언어 안녕하세요. 벌써 2학기가 시작되었네요.. 그리고 오늘은 첫번째 프로그래밍 언어론 강의를 보고 게십니다. 이번 학기동안 TV강의는 되도록이면 개념적인 접근이나 큰 주제에 대한 이해위주로 진행해 나가도록 하겠습니다. 그렇기 때문에, TV강의를 통해 전반적인 교재의 내용을 이해한다기 보다는 교재에서 이해해야 할 부분은 무엇이고, 그것을 통해 무엇을 배워야 하는가에 대해 배우길 바랍니다. 이러한 과정을 통해 프로그래밍 언어의 근본 개념이나 이러한 개념이 여러 프로그래밍 언어에서 어떻게 표현되고 있는지에 대해 이해하는 것이 이번 학기의 프로그래밍 언어론을 통해 여러분들이 반드시 배워야 할 것이였으면 합니다. 새로운 언어를 명확하고, 효율적으로 개발해 낼 수 있다. 새로운 언어를 배울 수 있는 능력이 향상된다. 구현에 있어서 좀 더 효율적이고, 안정적인 언어를 선택하여 구현할 수 있는 능력이 향상된다 먼저 이번 학기 TV강의는 크게 다섯부분으로 나누어집니다. 프로그램을 정의하는 방법인 PL의 구조와 의미에 대해서 배우고, 두번째는 여러 PL의 자료를 표현하는 방법, 세번째는 식과 제어를 통해 원하는 작업을 실행하는 방법, 네번째부터는 객체지향프로그래밍 언어와 객체지향 언어의 큰 특징인 추상 자료형에 대해서 배웁니다. 그리고 마지막으로 프로그래밍 언어에서 제공되는 에러발생에 대한 처리 방법에 대해 배우게 됩니다. 예외 조건 처리
4
Ⅰ. 프로그래밍 언어란 ? Ⅱ. 프로그래밍 언어 전형 Ⅲ. 신택스와 시맨틱스 학습 내용
오늘 이 시간에는 프로그래밍 언어란 무엇인가 ? 에 대한 내용을 보겠습니다.
5
프로그래밍 언어 컴퓨터에 관한 세부적인 지식이 없어도 컴퓨터에 작업을 지시할 수 있는 추상적인 표현 프로그래밍 언어 기계어
앞에서 설명했듯이, 프로그래밍 언어는: 인간이 컴퓨터에 계산 절차를 알려 주는 데 사용하는 기호 체계 즉, 추상화된 공통개념을 표현하는 언어입니다. 그렇다면 , 추상(abstraction) 이라는 것은 무엇일까요 ? 추상이란 어떤 물체 혹은 현상의 중요한 특징 혹은 특성만을 추출하여 표현하는 방식입니다. 즉, 컴퓨터에 대한 세부적인 지식을 가지지 않아도, 사람의 의도 혹은 목적을 나타낼 수 있도록 프로그래밍 언어는 일, 업무, 혹은 사람의 의도를 추상화하고 있는 것입니다. ∙ 따라서 소프트웨어 설계자는 컴퓨터의 추상 모형을 구현하는 도구로 프로그래밍 언어를 사용하여 컴퓨터 프로그램을 작성하고 동시에 프로그래밍 언어 자체는 추상모형을 수행시키는 프로세서에 대한 추상입니다. 기계어 자연어 추상적인 공통 개념
6
컴퓨터의 논리적 구조 폰 노이만 구조 메모리 연산부 버스 제어부 I/O CPU
그렇다면 프로그래밍 언어를 수행하는 컴퓨터의 개념적인 구조를 살펴 본다면, 프로그래밍 언어가 무엇인지 이해하는데 도움이 될 것입니다. 현재 컴퓨터 구조의 모태가 되고 있는 폰 노이만 구조는 그림에서 보는 것과 같이, 명령어와 데이터를 저장하는 메모리, 그리고 메모리로부터 명령어와 데이터를 인출하여 실행시키는 CPU, 사람이 실행하려는 명령어와 컴퓨터가 명령어를 실행한 결과를 사람과 컴퓨터사이에서 주고 받는 입출력 부분 으로 구성됩니다. 즉, 폰 노이만 컴퓨터는 메모리에 저장되어 있는 명령어와 데이터를 하나하나 실행해 나가는 과정을 반복하는 구조라고 이해하시면 됩니다. I/O CPU
7
프로그래밍 언어 전형 - 폰 노이만 기계 구조의 추상화 변수값을 변경시키는 명령문의 나열 - FORTRAN, COBOL, C
명령형 언어 - 폰 노이만 기계 구조의 추상화 변수값을 변경시키는 명령문의 나열 - FORTRAN, COBOL, C 우선 명령형 언어와 같이 명령문의 순서에 따라 결과가 계산되는 언어를 절차적(procedural) 언어라 하고, 논리 언어와 같이 명령문의 순서와는 무관한 언어를 비절차적 언어라고 한다. 가. 명령형 언어 ∙ 명령형 언어(imperative language)는 폰 노이만 구조에 기초한 전통적인 절차적 언어.입니다. 폰 노이만 게산 모형, 혹은 폰 노이만 구조를 추상화하여 설계되었기 때문에 저수준의 기계 특성이 언어의 여러 부분에서 나타나며 프로그램의 정확성을 증명하기가 어려운 단점을 가지고 있습니다. 하지만, 현재 컴퓨터의 전형적인 구조에 기인한 절차적 언어이기때문에, 이번 학기의 강의 대상으로써 가장 비중있는 프로그래밍 언어이기도 합니다. 명령형 언어는 변수값을 변경시키기 위한 명령문을 순서대로 나열한 것이다. 따라서 변수가 바로 메모리 셀을 추상화한 것이고 변수에 대한 지정문도 메모리 구조를 반영한 것이며, 명령문의 나열 또는 빈복문 구조 역시 메모리와 COU사이에서 실행될 명령어의 반복되는 구조를 추상화한 것이다.
8
프로그래밍 언어 전형 scanf(“%d”,&x); x = Y+1; printf(“%d”, x); 명령형 언어
우선 명령형 언어와 같이 명령문의 순서에 따라 결과가 계산되는 언어를 절차적(procedural) 언어라 하고, 논리 언어와 같이 명령문의 순서와는 무관한 언어를 비절차적 언어라고 한다. 가. 명령형 언어 ∙ 명령형 언어(imperative language)는 폰 노이만 구조에 기초한 전통적인 절차적 언어.입니다. 폰 노이만 게산 모형, 혹은 폰 노이만 구조를 추상화하여 설계되었기 때문에 저수준의 기계 특성이 언어의 여러 부분에서 나타나며 프로그램의 정확성을 증명하기가 어려운 단점을 가지고 있습니다. 하지만, 현재 컴퓨터의 전형적인 구조에 기인한 절차적 언어이기때문에, 이번 학기의 강의 대상으로써 가장 비중있는 프로그래밍 언어이기도 합니다. 명령형 언어는 변수값을 변경시키기 위한 명령문을 순서대로 나열한 것이다. 따라서 변수가 바로 메모리 셀을 추상화한 것이고 변수에 대한 지정문도 메모리 구조를 반영한 것이며, 명령문의 나열 또는 빈복문 구조 역시 메모리와 COU사이에서 실행될 명령어의 반복되는 구조를 추상화한 것이다.
9
프로그래밍 언어 전형 함수 언어 - 매개변수에 함수 이론 반영 - 순환 함수 호출 기반 - LISP, Scheme, ML
나. 함수 언어 ∙ 함수 언어는 매개변수에 대해 함수를 적용하는 구조로 이루어진 언어입니다.지정문이나 반복문이 아니라 단지 함수의 호출만으로 이루어진 언어지요.특히 초기에 인공지능분야에서 LISP이나 schem이라는 언어가 많이 사용되었으나, 폰노이만 구조에서의 효율적인 수행에 있어서 약점을 가지고 있었기 때문에 널리 사용되지는 못하였습니다. 특히 함수 언어는 실행 시간이 많이 걸리는 단점을 가지고 있습니다.
10
프로그래밍 언어 전형 (DEFUN equal_lists (list1, list2) (COND . . . . . )
함수 언어 (DEFUN equal_lists (list1, list2) (COND (equal_lists (CDR list1) (CDR list2)) ) 나. 함수 언어 ∙ 함수 언어는 매개변수에 대해 함수를 적용하는 구조로 이루어진 언어입니다.지정문이나 반복문이 아니라 단지 함수의 호출만으로 이루어진 언어지요.특히 초기에 인공지능분야에서 LISP이나 schem이라는 언어가 많이 사용되었으나, 폰노이만 구조에서의 효율적인 수행에 있어서 약점을 가지고 있었기 때문에 널리 사용되지는 못하였습니다. 특히 함수 언어는 실행 시간이 많이 걸리는 단점을 가지고 있습니다.
11
프로그래밍 언어 전형 논리 언어 - 술어 논리 기초 공리, 사실, 추론규칙, 정리나 질의로 구성 공리와 규칙으로 새 사실 추론
Prolog 다. 논리 언어 ∙ 논리 언어(logic language)는 이산수학시간에 배웠던 서술논리에 기초하여 새로운 사실을 추론하는 개념으로 프로그래밍을 하는 언어입니다. 이것은 알려진 사실로부터 새 사실을 추론하는 술어 논리 구조를 가지므로 인공지능 분야에서 크게 각광을 받았습니다. 논리 프로그램의 구조는 지정문, 선언문만으로 구성되어 있으며, 실행 순서는 필요 없이 특성만 선언하면 되므로 논리 프로그래밍을 선언형 프로그래밍이라고 합니다. 논리 언어로는 Prolog가 대표적이다.
12
프로그래밍 언어 전형 parent(jane, jake). parent(jake, tom).
논리 언어 parent(jane, jake). parent(jake, tom). grandpaerent(X,Z) :- parent(X,Y), parent(Y,Z) 다. 논리 언어 ∙ 논리 언어(logic language)는 이산수학시간에 배웠던 서술논리에 기초하여 새로운 사실을 추론하는 개념으로 프로그래밍을 하는 언어입니다. 이것은 알려진 사실로부터 새 사실을 추론하는 술어 논리 구조를 가지므로 인공지능 분야에서 크게 각광을 받았습니다. 논리 프로그램의 구조는 지정문, 선언문만으로 구성되어 있으며, 실행 순서는 필요 없이 특성만 선언하면 되므로 논리 프로그래밍을 선언형 프로그래밍이라고 합니다. 논리 언어로는 Prolog가 대표적이다.
13
프로그래밍 언어 전형 객체 지향 언어 - 객체들이 모여 프로그램 구성 자료 추상, 계승, 동적 형 바인딩
smalltalk, C++, Java 라. 객체지향 언어 ∙ 객체 지향 언어는는 명령형 전형과 마찬가지로 폰 노이만 구조를 계산 모형으로 하고 있으면서도 소프트웨어 설계 방법론이 다르기 때문에 다른 언어로 구분해 봤습니다. 객체 지향 프로그래밍에서는 객체들이 모여서 하나의 프로그램을 구성하고, 객체마다 고유의 연산이 정의되어 있습니다. 그리고 객체의 상호작용에 의하여 계산이 진행되어 나가며, 이것을 폰노이만 구조를 기반으로 수행되어 나갑니다. 객체라는 단위 구조를 갖게 되면서 객체 지향 언어는 자료추상(data abstraction), 계승(inheritance), 동적 형 바인딩을 가장 충실하게 지원하는 언어이기도 합니다. ∙ 순수한 객체 지향 언어에 가장 가까운 것은 Smalltalk이지만 현재 가장 많이 쓰이는 것은 Java, C++ 등이다.
14
프로그래밍 언어 전형 class Triangle { double a, b, c; Triangle(String name) {
객체 지향 언어 class Triangle { double a, b, c; Triangle(String name) { this.name = name; } double getArea() { double s = (a+b+c)/2; }` 라. 객체지향 언어 ∙ 객체 지향 언어는는 명령형 전형과 마찬가지로 폰 노이만 구조를 계산 모형으로 하고 있으면서도 소프트웨어 설계 방법론이 다르기 때문에 다른 언어로 구분해 봤습니다. 객체 지향 프로그래밍에서는 객체들이 모여서 하나의 프로그램을 구성하고, 객체마다 고유의 연산이 정의되어 있습니다. 그리고 객체의 상호작용에 의하여 계산이 진행되어 나가며, 이것을 폰노이만 구조를 기반으로 수행되어 나갑니다. 객체라는 단위 구조를 갖게 되면서 객체 지향 언어는 자료추상(data abstraction), 계승(inheritance), 동적 형 바인딩을 가장 충실하게 지원하는 언어이기도 합니다. ∙ 순수한 객체 지향 언어에 가장 가까운 것은 Smalltalk이지만 현재 가장 많이 쓰이는 것은 Java, C++ 등이다.
15
프로그래밍 언어 전형 병렬/분산 프로그래밍 전형 제약 프로그래밍 전형 시각 프로그래밍
16
언어의 정의 프로그래밍 언어의 정확성 프로그래밍 언어의 표준화 프로그래밍 언어의 설계
명확한 프로그래밍 언어 정의가 필요한 이유는 한번 알아보겠습니다. 먼저 프로그래밍 언어의 정확성을 증명할 수 있는 방법이며, 프로그램이 실행될 컴퓨터와는 무관하게 프로그래밍 언어의 표준화를 위해서 필요하며 프로그래밍 언어의 설계에 도움이 되기도 합니다.
17
언어의 정의 언어 정의 = 시맨틱스 + 신택스 언어 구조 어휘 구조 언어의 의미 언어의 상호 연관 의미
언어 정의는 신택스와 시맨딕스로 정의될 수 있습니다. 즉 언어 구조를 정의할 경우에 사용되는 신택스와 언어의 의미를 정의할 경우 사용되는 시맨틱스로 구성됩니다. 하지만, 논의 목적으로 분리되는 경우를 많이 볼 수 있지만, 실제로는 밀접하게 관련되어 있고, 따로 나누어서 고려하는 것은 프로그래밍 언어를 공부하는 입장에서는 그리 도움이 되지 않는다.
18
언어의 정의 신택스 - 언어의 구성 요소들간의 결합 방법 언어의 표현식, 문장, 프로그램 단위의 형식
대부분의 언어는 문맥무관형 문법으로 표현 <if 문> ::= if (<조건>) <문장> ∙ 신택스(syntax) : 언어 구성 요소의 외부적인 형태, 즉 문법에 관한 것으로서 언어의 구성 요소들을 결합하여 다른 요소를 만드는 방법을 설명. ∙ 언어의 신택스 : 공식적 정의로 표현되는 경우가 많으며 대부분 문맥무관형 문법(context-free grammar)으로써 정의되고 있다. ∙ 어휘 구조(lexical structure) : 프로그래밍 언어의 어휘 구조는 언어에서 사용할 수 있는 단어의 구조. ∙ 언어의 단어 : 보통 토큰(token). (예 : ‘if', '(', '+' ..) ∙ - 어휘 구조(lexical structure)
19
언어의 정의 시맨틱스 표현식, 문장, 프로그램 단위에 대한 의미 프로그램이 무엇을 어떻게 수행할 것인가 ?
while (<조건>) <문장> 시맨틱스의 공식적 정의에 대한 접근 방법 실행적 시맨틱스 함수적 혹은 표시적 시맨틱스 공리적 시맨틱스 ∙ 시맨틱스 : 언어의 의미이고, 프로그램이 무엇을 어떻게 수행할지 나타내 주며, 특정 기능의 의미가 다른 부분과의 상호 연관에 의해서만 정확히 설명되는 경우가 많다. If문의 조건의 값이 참이면 다음의 문장을 수행하고, 그렇지 않으면 if문의 수행을 멈춘다.라는 의미를 갖는다, ∙ 시맨틱스의 공식적 정의에 대한 접근 방법 - 실행적 시맨틱스 : 하나의 假想 컴퓨터를 想定하고 프로그래밍 언어의 각 요소가 가상의 컴퓨터에서 어떻게 실행될 것인가로 그 의미를 결정한다. - 함수적 혹은 표시적 시맨틱스 : 입력을 받아 출력을 계산하는 함수로써 프로그램의 의미를 설명한다. - 공리적 시맨틱스 : 실행 전과 실행 후에 가지게 될 변수의 성질(술어 논리의 형태를 취함)로 프로그램의 의미를 설명한다.
20
오늘의 학습 내용 계산 절차를 표시하는 기호 체계 명령형 언어, 함수 언어, 논리 언어
신택스와 시맨틱스의 유기적인 조합으로 정의 오늘 이 시간에는 프로그래밍 언어란 무엇인가 ? 즉,, 사람사이의 언어와 사람과 컴퓨터사이의 언어인 프로그래밍 언어에 대해 알아봅니다. 그리고 프로그래밍 언어는 어떻게 분류되는가와 어떻게 바라 봐야 하는가에 대해 공부해보기로 하겠습니다. 이 시간을 통해 프로그래밍 언어의 개념과 그 역할에 대해 이해한다면, 프로그래밍 언어론 수업을 보다 의미있고, 쉽게 이해할 것입니다. 자 이것으로써 오늘 강의를 마치도록 하겠습니다. 다음 이시간까지 안녕히 계십시요.
Similar presentations