37
2 2 : : 주주주주주 주주주 주주 주주주주주 주주주 주주 프프프프프프프프 프프프프 : 프 프 프

2 주 : 프로그래밍 언어의 기초

  • Upload
    bernie

  • View
    148

  • Download
    1

Embed Size (px)

DESCRIPTION

프로그래밍언어론 담당교수 : 박 양 하. 2 주 : 프로그래밍 언어의 기초. 프로그래밍 언어의 개념 학습이유. 생각을 표현할 수 있는 능력이 향상된다 . 프로그래밍 언어의 특징에 대해 폭넓고 다양하게 알고 있으면 소프트웨어 개발에 있어서 제어구조 , 데이터구조 , 추상화의 종류에 대한 제약을 줄 일 수 있음 따라서 프로그래머는 새로운 언어 구조를 배워서 소프트웨어 개발에 대한 사고를 향상 시킬 수 있음 프로그래밍 언어의 개념을 배움으로써 프로그래머는 언어의 좋은 특징들을 잘 이해하고 사용할 수 있음 - PowerPoint PPT Presentation

Citation preview

Page 1: 2 주  :  프로그래밍 언어의 기초

22 주 주 : : 프로그래밍 언어의 기초프로그래밍 언어의 기초22 주 주 : : 프로그래밍 언어의 기초프로그래밍 언어의 기초

프로그래밍언어론담당교수 : 박 양 하

Page 2: 2 주  :  프로그래밍 언어의 기초

2

프로그래밍 언어의 개념 학습이유프로그래밍 언어의 개념 학습이유프로그래밍 언어의 개념 학습이유프로그래밍 언어의 개념 학습이유

생각을 표현할 수 있는 능력이 향상된다 .프로그래밍 언어의 특징에 대해 폭넓고 다양하게 알고 있으면 소프트웨어 개발에 있어서 제어구조 , 데이터구조 , 추상화의 종류에 대한 제약을 줄 일 수 있음따라서 프로그래머는 새로운 언어 구조를 배워서 소프트웨어 개발에 대한 사고를 향상 시킬 수 있음프로그래밍 언어의 개념을 배움으로써 프로그래머는 언어의 좋은 특징들을 잘 이해하고 사용할 수 있음다른 언어로 모의 실험을 하여 가장 좋은 특징들을 포함하는 새로운 언어를 설계할 수 있음

Page 3: 2 주  :  프로그래밍 언어의 기초

3

프로그래밍 언어의 개념 학습이유프로그래밍 언어의 개념 학습이유 (Cont(Cont’’d)d)프로그래밍 언어의 개념 학습이유프로그래밍 언어의 개념 학습이유 (Cont(Cont’’d)d)

적합한 언어를 선택할 수 있는 배경이 향상된다많은 프로그래머들이 새로운 프로젝트에 사용될 언어를 선택하게 될 경우에 자신이 가장 잘 알고 있는 언어가 그 프로젝트에 적합하지 않을지라도 그 언어를 계속 선택하려고 함다양한 언어의 특별한 특징을 잘 알고 있다면 언어를 선택하는데 있어서 더 나은 배경을 갖게 됨

새로운 언어를 배울 수 있는 능력이 향상된다 .컴퓨터 프로그래밍은 매우 성장하고 있는 분야로 설계 방법론 , 소프트웨어 개발도구 , 프로그래밍 언어 등은 계속 발전 중언어의 기본적인 개념을 이해하고 나면 배우고 있는 언어의 설계에 개념들이 어떻게 수용되어 있는지 쉽게 알 수 있음

Page 4: 2 주  :  프로그래밍 언어의 기초

4

프로그래밍 언어의 개념 학습이유프로그래밍 언어의 개념 학습이유 (Cont(Cont’’d)d)프로그래밍 언어의 개념 학습이유프로그래밍 언어의 개념 학습이유 (Cont(Cont’’d)d)

구현의 중요성에 대해 보다 많이 이해한다 .구현상의 고려 사항을 이해함으로 해당 언어가 왜 이렇게 설계되었는지를 이해하고 보다 지능적으로 그 언어를 사용할 수 있는 능력을 갖추게 됨컴퓨터가 다양한 언어구조를 어떻게 실행시키는지 이해하여 선택할 수 있는 다른 구조와의 상대적인 효율성을 잘 이해할 수 있음

전반적으로 전자계산 분야의 이해가 향상된다 .정보조직 , 검색 및 이용자중심 디지털도서관 서비스 ( 예 : CWA 기반 디지털도서관 ) 기획에 도움이 된다 .

Page 5: 2 주  :  프로그래밍 언어의 기초

5

프로그래밍 영역프로그래밍 영역프로그래밍 영역프로그래밍 영역

과학응용분야1940 년대 발표된 첫 디지털 컴퓨터가 사용전형적으로 간단한 데이터 구조를 가지나 상당한 양의 부동소수점에 대한 산술 연산을 필요가장 일반적인 데이터 구조는 배열과 행렬 , 제어구조는 계수 루프 선택문첫 번째 사용 언어는 Fortran

사무응용분야1950 년대부터 사용상세한 보고서를 생성할 수 있는 특징 , 십진수와 문자 데이터를 세밀하게 표현하고 저장할 수 있는 방법 , 십진수의 산술 연산을 표현할 수 있는 능력 포함스프레드 시스템 , 데이터베이스 시스템첫 번째 사용언어 COBOL( 아직도 많이 사용 )

Page 6: 2 주  :  프로그래밍 언어의 기초

6

프로그래밍 영역프로그래밍 영역 (cont(cont’’d)d)프로그래밍 영역프로그래밍 영역 (cont(cont’’d)d)인공지능 (Artificial Intelligence) 분야

수치 계산보다 기호의 계산 ( 이름으로 구성된 기호 조작 ) 으로 사용으로 특징다른 분야보다 더 많은 융통성 요구첫 번째 사용언어 LISP( 이후 Prolog, Scheme)

문헌정보학 분야정보조직

색인 , 시소러스 처리 등을 할 때는 사무 응용분야의 기술 필요자동분류 등을 처리할 때는 인공지능 분야의 기호 계산 방식 필요

정보검색 가중치 , 결합법칙 등을 적용하기 위해서는 과학응용분야의 산술연산 방식 필요

Page 7: 2 주  :  프로그래밍 언어의 기초

7

프로그래밍 영역프로그래밍 영역 (cont(cont’’d)d)프로그래밍 영역프로그래밍 영역 (cont(cont’’d)d)

시스템 프로그래밍시스템소프트웨어 : 운영체제와 컴퓨터 시스템에 속한 모든 프로그래밍 지원 도구 총괄계속적으로 사용되는 실행 효율성 필요외부장치와의 소프트웨어 인터페이스를 작성할 수 있는 저급 수준의 특징 제공UNIX 운영체제는 거의 C 로 작성 ( 실행효율적 )

Page 8: 2 주  :  프로그래밍 언어의 기초

8

프로그래밍 영역프로그래밍 영역 (cont(cont’’d)d)프로그래밍 영역프로그래밍 영역 (cont(cont’’d)d)

스크립트 언어초기 스크립트 언어는 명령들의 리스트를 한 개의 실행될 파일로 작성함으로 사용첫번째 스크립트 언어는 sh(shell) : 파일 관리나 간단한 파일 필터링같은 부프로그램의 호출로 해석되는 명령들의 작은 집합으로 시작이 후 변수 , 제어문 , 함수 , 다양한 다른 특징들을 추가하여 하나의 완벽한 프로그래밍 언어가 됨www 의 사용으로 CGI(Common Gateway Interface) 프로그래밍에 거의 이상적인 언어로 Perl의 사용이 급격하게 상승JavaScript : 웹 서버와 브라우저에 사용하기 위해 Netscape 사에서 개발 ( 대부분 클라이언트 측 스크립트 언어로 사용 ), HTML 문서에 포함

Page 9: 2 주  :  프로그래밍 언어의 기초

9

프로그래밍 영역프로그래밍 영역 (cont(cont’’d)d)프로그래밍 영역프로그래밍 영역 (cont(cont’’d)d)

PHP(Hypertext Preprocessor) 웹 서버 시스템에서 사용목적으로 설계HTML 문서에 포함문서가 요청한 브라우저에 전달되기 전에 서버상에서 해석

특정 목적 언어RPG : 사무보고서를 생성하는 데 사용APT : 프로그래밍 가능한 기계 도구에 명령어를 입력하는데 사용GPSS : 시스템 시뮬레이션을 위해 사용특정 목적 언어는 적용 범위가 좁고 다른 언어와 비교하기 어려움

Page 10: 2 주  :  프로그래밍 언어의 기초

10

언어 평가 기준언어 평가 기준언어 평가 기준언어 평가 기준

판독성프로그램을 얼마나 쉽게 읽고 이해할 수 있는가 ?효율성과 기계 판독성 ( 컴퓨터 관점 )- 유지보수의 용이성을 위한 인간 중심의 판독성으로 전환판독성에 기여하는 특성

전반적 단순성 (overall simplicity) : – 작성자와 독자의 언어 요소의 불일치 , – 다중성 ( 특정 연산을 한 가지 이상의 방법으로 수행 ),

중복 ( 한 연산자 기호가 하나 이상의 의미를 가질때 ) 에 의해 복잡성의 문제 대두

직교성 (orthogonality) : – 언어의 기본 요소간 관계의 대칭성으로 정의 , – 직교성이 결여되면 언어 규칙에 예외 사항을 초래 , – 단순성과 관련 , 언어 설계가 직교적일수록 언어의 규칙은 더 적은 예외사항을 요구하며 , 언어를 배우고 읽고 이해하기 쉽게 함

Page 11: 2 주  :  프로그래밍 언어의 기초

11

언어 평가 기준언어 평가 기준 (Cont(Cont’’d)d)언어 평가 기준언어 평가 기준 (Cont(Cont’’d)d)

데이터 타입과 구조 : 언어가 데이터 타입과 데이터 구조를 정의할 수 있는 충분한 장치를 제공하면 판독성에 상당히 도움이 됨구문고려사항 : 식별자 형태 , 특수어 , 형태와 의미 등을 표시하면 판독성을 높일 수 있음

작성력선택한 문제 영역에 대해서 프로그램을 생성하기 위해 언어가 얼마나 쉽게 사용될 수 있는가 ?판독성과 밀접한 관계작성력에 영향을 미치는 요소

단순성과 직교성 : – 알고 있지 않은 요소를 우연히 사용하여 이상한 결과를

초래 , 적은 수의 기본 구조와 이들을 조합하기 위한 일관된 규칙 ( 직교성 ) 을 갖는 것이 좋음

– 지나친 직교성은 작성력에 해가 되기도 함 : 오류 탐지의 어려움으로 불합리성 초래 가능성

Page 12: 2 주  :  프로그래밍 언어의 기초

12

언어 평가 기준언어 평가 기준 (Cont(Cont’’d)d)언어 평가 기준언어 평가 기준 (Cont(Cont’’d)d)

추상화 (abstraction) 의 지원 : – 복잡한 데이터 구조나 연산을 정의하고 사용할 수 있는

능력– 오늘날 프로그래밍 언어 설계방법론에서 중요한 개념– 프로세스 추상화 , 데이터 추상화

» 프로세스 추상화 : 부프로그램 사용 ( 여러 번 사용되는 정렬 알고리즘을 구현 )

» 데이터 추상화 : 정수 데이터를 포함하는 간단한 클래스 형태 구현

표현력 (expressivity) : – 계산 표현을 위해 편리한 방법을 가지고 있음– 예 : count++ vs count=count+1

Page 13: 2 주  :  프로그래밍 언어의 기초

13

언어 평가 기준언어 평가 기준 (Cont(Cont’’d)d)언어 평가 기준언어 평가 기준 (Cont(Cont’’d)d)

신뢰성모든 조건 하에서 주어진 명세 수행의 척도신뢰성에 영향을 미치는 요소타입 검사 (type checking)

– 컴파일러나 프로그램 실행 중에 주어진 프로그램에 대해서 타입 오류를 검사하는 것 ( 컴파일러 검사가 저비용 )

– 초기에 오류를 탐지할수록 , 수정에 소요되는 비용과 시간이 적음

– 예 : float 타입을 예상하는 함수의 호출에서 int 타입 변수가 실매개변수로 사용될 수 있음

예외처리 (exception handling) – 실행 시간 오류를 가로채서 올바르게 수정 , 계속 실행할

수 있는 능력– C++, Java 는 예외 처리에 뛰어남

Page 14: 2 주  :  프로그래밍 언어의 기초

14

언어 평가 기준언어 평가 기준 (Cont(Cont’’d)d)언어 평가 기준언어 평가 기준 (Cont(Cont’’d)d)

별칭 (aliasing)– 동일 기억장소에 대해 두 개 또는 그 시앙의 다른 참조방법 ( 혹은 이름 ) 을 갖는 것

– 언어에서 결여된 데이터 추상화 특징을 지원– 그러나 프로그래밍 언어에서의 위험한 특징 , 신뢰성

향상을 위해 제약시킴판독력과 작성력

– 프로그램이 쉽게 작성될수록 , 그 프로그램이 올바를 가능성이 높음

– 판독성은 소프트웨어 생명주기에서 코딩과 유지보수의 두 단계에서 신뢰성에 영향을 줌

– 읽기 어려운 프로그램은 작성하거나 수정하기가 어려워짐

Page 15: 2 주  :  프로그래밍 언어의 기초

15

언어 평가 기준언어 평가 기준 (Cont(Cont’’d)d)언어 평가 기준언어 평가 기준 (Cont(Cont’’d)d)

비용최종적 비용 합계에 영향을 미치는 특성

프로그래머를 교육시키는 비용 ( 언어의 단순성 , 직교성 , 프로그래머의 경험에 의해 결정 )프로그램 개발 비용 : 작성력에 의해 결정 , 그 언어가 특정 응용분야에 얼마나 적합한가에 의존프로그램을 컴파일하는 비용프로그램 실행비용 : 언어 설계에 영향 받음 ,

– 최적화는 컴파일러가 생성하는 코드의 크기를 줄이고 실행 속도를 향상시키기 위해 사용되는 기법들의 집합

언어 구현 시스템을 위한 비용신뢰성 부족에 다른 비용프로그램 유지보수 비용 : 판독성에 영향받음

기타기준이식성 , 일반성 , 분명성

Page 16: 2 주  :  프로그래밍 언어의 기초

16

언어 설계에 미친 영향언어 설계에 미친 영향언어 설계에 미친 영향언어 설계에 미친 영향

설계의 가장 중요한 요소는 컴퓨터 구조와컴퓨터 구조와 프로그램 설계 프로그램 설계 방법론방법론컴퓨터 구조

명령형 (imperative) 언어와 함수형언어명령형언어 :

– 데이터와 프로그램 모두 동일한 기억장소에 저장 , 실제 명령어 실행을 담당하는 중앙처리장치 (CPU) 는 기억장소로부터 분리 명령어와 데이터는 기억장소로부터 CPU 에 파이프 ( 전달 ) 되어야 하고 CPU 연산결과는 다시 기억 장소에 전달

– 명령형 언어의 중심 특징은 변수 , 배정문 , 반복문» 변수 : 기억장소 셀을 모델» 배정문 : CPU 와 기억장소간에 데이터 이동 연산 기반» 반복문 : 구조상 반복연산 표현에 재귀 함수보다 효과적

함수형언어 : 모든 계산을 함수 인자에 적용함으로 이뤄짐 , 배경문 , 변수가 필요 없음 , 반복을 재귀 호출로 표현하여 루프가 필요하지 않음

Page 17: 2 주  :  프로그래밍 언어의 기초

언어 설계에 미친 영향언어 설계에 미친 영향언어 설계에 미친 영향언어 설계에 미친 영향

논리 프로그래밍과 객체 지향 프로그래밍논리 프로그래밍

– 계산 프로세스를 컴퓨터에 전달하기 위해 형식적인 논리표기 사용

– 술어 해석학 (predicate calculus) 는 논리 프로그래밍에서 사용되는 표기

– 비절차적 프로그래밍으로 결과의 형태를 서술– 논리 프로그래밍이 널리 사용되지 않는 이유

» 비효율적 , 매우 제한된 분야 ( 특정 DBMS 나 AI 의 일부영역 ) 에서 효과적

객체지향 프로그래밍 – 세가지 기본적 개념 : 데이터 타입 , 상속 , 동적 바인딩– 실세계 객채들과 객체에 필요한 프로세스를 식별 후 객체 ,

프로세스 , 객체들 간 통신에 대한 실험을 생성함으로 문제를 해결

17

Page 18: 2 주  :  프로그래밍 언어의 기초

18

언어 설계에 미친 영향언어 설계에 미친 영향 (Cont(Cont’’d)d)언어 설계에 미친 영향언어 설계에 미친 영향 (Cont(Cont’’d)d)

명령형 프로그래밍 언어 구조는 보다 기계 구조 관점에서 모델링 되었지만 함수언어 보다 더 많이 사용되고 있는 것이 현실임

설계 방법론1970 년대 초기

S/W 개발 과정과 프로그래밍 언어 설계에 대해 분석이 이뤄졌음 H/W 비용 대비 프로그래머 비용 증가에 대한 문제에서 비롯결과 : 하향식 설계와 단계적 세분화 ( 타입 검사의 불완전성과 제어문의 불충분을 야기 : goto 문 남발 )

1970 년대 후반 프로세스 지향 프로그램 설계에서 데이터 지향 프로그램 설계 방법론으로 이동데이터 추상화과 시스템 설계에 효과적 ( 시스템에 사용된 언어에 의해 지원 )

Page 19: 2 주  :  프로그래밍 언어의 기초

19

언어 설계에 미친 영향언어 설계에 미친 영향 (Cont(Cont’’d)d)언어 설계에 미친 영향언어 설계에 미친 영향 (Cont(Cont’’d)d)

1980 년대 초반 객체지향 설계 방법론 : 데이터 추상화로 시작연산과 데이터 객체를 캡슐화 (encapsulation) 하고 데이터에 대한 접근을 은폐 시키고 상속 (inheritance : 기존 소프트웨어의 가능한 재사용 향상 가능성 ) 과 동적 타입 바인딩 (dynamic type binding : 유연한 상속 사용 허용 )을 추가

최근동시성 (concurrency) 분야에서 프로세스지향 프로그래밍에 대한 연구가 이어지고 있음동시에 수행되는 프로그램 단위를 생성하고 제어하기 위한 언어 특징의 필요성 제기

Page 20: 2 주  :  프로그래밍 언어의 기초

20

언어 설계 절충언어 설계 절충언어 설계 절충언어 설계 절충

Hoare : Hoare : ““ 중요하지만 상충되는 평가 기준들이 있으므로 중요하지만 상충되는 평가 기준들이 있으므로 상당히 많은 이들을 타협하고 만족시키는 것은 중요한 상당히 많은 이들을 타협하고 만족시키는 것은 중요한 공학적 작업공학적 작업””신뢰성과 실행비용의 상충

예 : 의미적으로 동등한 Java 와 C– Java 언어 정의는 배열 원소에 대한 모든 참조에 대해

검사를 요구하지만 이는 실행 비용을 크게 증가시킴 , C보다 신뢰성이 높음

– C 는 첨자범위 검사를 요구하지 않아 Java 보다 빠른 실행을 제공

작성력과 판독성의 상충예 : APL 은 배열 피연산자를 위한 강력한 연산자 집합을 포함하고 있어서 표현력이 높아 작성력이 좋음 , 그러나 함축되고 간결하고 명확한 식은 작성한 사람 외에 알아보기 어려워 판독력이 떨어진다고 할 수 있음

Page 21: 2 주  :  프로그래밍 언어의 기초

21

언어 설계 절충언어 설계 절충 (Cont(Cont’’d)d)언어 설계 절충언어 설계 절충 (Cont(Cont’’d)d)

유연성과 안정성의 상충예 : Pascal 의 가변 레코드 ( 한 메모리 셀이 다른 시간에 다른 타입의 값을 포함하는 것을 허용함으로 유연성이 강조되나 타입검사에서 프로그램에게 포인터의 산술연산을 허용하는 허점 (loophole) 을 제공 )

타협과 절충 (trade-off)많은 상충의 예들이 있음상충의 정도가 어떤 것은 미세하고 어떤 것은 명확함따라서 프로그래밍 언어를 설계할 때 언어 구조와 특징을 선택하는 작업에 타협과 절충이 필요

Page 22: 2 주  :  프로그래밍 언어의 기초

프로그램언어의 구현방법프로그램언어의 구현방법프로그램언어의 구현방법프로그램언어의 구현방법

컴파일가장 극단적인 방법으로 프로그램은 컴퓨터에서 직접 실행될 수 있는 기계 언어로 번역장점 : 일단 번역과정이 완료되면 매우 빠르게 프로그램을 실행시킬 수 있음(C, COBOL, Ada)

22

Page 23: 2 주  :  프로그래밍 언어의 기초

프로그램언어의 구현방법프로그램언어의 구현방법 (cont’d)(cont’d)프로그램언어의 구현방법프로그램언어의 구현방법 (cont’d)(cont’d)

순수해석순수해석 (pure interpretation) 은 구현방법에서 컴파일과 정 반대 , 번역 없이 인터프리터라 는 다른 프로그램에 의해 해석장점 : 많은 원시 프로그램 수준의 디버깅 연산을 쉽게 구현 ( 오류발견 용이 ), JavaScript, PHP 와 같은 웹 스크립트 언어에 의해 다시 사용단점 : 실행 속도 저하 , 많은 기억공간 요구

23

원시프로그램

인터프리터

결과

입력데이터

Page 24: 2 주  :  프로그래밍 언어의 기초

프로그램언어의 구현방법프로그램언어의 구현방법 (cont’d)(cont’d)프로그램언어의 구현방법프로그램언어의 구현방법 (cont’d)(cont’d)

혼합형 구현 시스템혼합형 구현 시스템 (hybrid implementation system)컴파일러와 인터프리터의 절충형 , 고급 언어 프로그램을 쉽게 해석하기 위해 설계된 중간언어로 번역원시 언어 문장이 한번만 해석

24

Page 25: 2 주  :  프로그래밍 언어의 기초

프로그래밍 언어의 발전사프로그래밍 언어의 발전사프로그래밍 언어의 발전사프로그래밍 언어의 발전사

의사코드 : 최초의 하드웨어 프로그래밍1940 년대 후반 ~1950 년대 초반 컴퓨터 성능이 높지 못한 시절 기계 언어가 가지는 단점인 잦은 오류와 판독력을 높이기 위해 고안특정 프로그래밍 언어의 문법을 따라 씌여진 것이 아니라 , 일반적인 언어로 코드를 흉내내어 알고리즘을 써놓은 코드 . 의사 ( 疑似 ) 코드는 말그대로 흉내만 내는 코드이기 때문에 , 실제적인 프로그래밍 언어로 작성된 코드처럼 컴퓨터에서 실행할 수 없으며 , 특정 언어로 프로그램을 작성하기 전에 알고리즘의 모델을 대략적으로 모델링하는 데에 사용일종의 인덱스 기법을 요구하여 사용되었으나 활성화 되지 못하고 보다 높은 수준의 언어 개발을 초래

25

Page 26: 2 주  :  프로그래밍 언어의 기초

26

프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)

Fortran일반적으로 첫 컴파일 된 고급 언어로 인정

여전히 처리능력은 작고 , 느리고 , 상대적으로 신뢰성이 없음컴퓨터는 주로 과학 계산 분야에서 이뤄짐프로그래머의 비용보다 컴퓨터 비용이 높아서 생성된 목적 코드의 속도가 포트란 컴파일러의 주 목적평가 : 많은 부족함에도 불구하고 컴퓨터가 사용되는 방식을 영원히 극적으로 변화시킨 언어

LISP첫 번째 함수 프로그래밍 언어로 리스트 처리를 위한 언어 특징 제공

인공지능 분야의 첫 번째 응용 프로그램관련언어 : Scheme, ML(메타언어 ), Miranda, Haskell 등

Page 27: 2 주  :  프로그래밍 언어의 기초

프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)ALGOL 60

정교화를 향한 첫 단계 , 범용 언어 설계 노력의 결과국제적인 프로그래밍 설계 그룹이 결성되는 등 알고리즘을 기술하는 유일한 언어로 남았으나 자체적으로는 크게 성공하지 못함계보 : Fortran I(1957), ALGOL 58(1958), ALGOL 60(1960)직간접적 후손 : PL/I, SIMULA 67, ALGOL 68, C, Pascal, Ada, C++, Java 등

COBOL사무 기록의 전산화를 위한 시스템

매크로를 위해 처음으로 사용된 고급 언어 구조 , 계층적 데이터 구조가 COBOL 에서 처음 구현 ( 모든 명령형 언어에 사용 )데이터 영역에 강하고 프로시저 영역이 상대적으로 약함회계분야의 전산화를 가져오게 됨계보 : FLOW_MATIC(1957), COBOL(1960)

27

Page 28: 2 주  :  프로그래밍 언어의 기초

프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)

BASIC시분할의 발단을 가져옴

원격 컴퓨터에 연결된 터미널을 통해 사용된 최초 언어개발 목적 : 쉽게 배울 수 있으며 소형 컴퓨터에서 쉽게 구현

– 비 과학 전공학생들이 배우고 사용하기 쉬워야 함– 사용자에게 즐거움을 주고 친숙해야 함– 숙제를 원활히 할 수 있도록 빠른 작업 처리 시간 제공– 자유롭고 개인적인 접근 허용– 사용자 시간을 컴퓨터 시간보다 더 중요하게 생각

발달과정– 1970 년대 후반 ~1980 년대 초반 널리 사용– 1990 년대 Visual BASIC(1991) 의 등장으로 사용 증가

계보 : ALGOL 60(1960) & Fortran IV(1962), BASIC(1964), QuickBASIC(1988), Visual BASIC(1990),

Visual BASIC.NET(2002)28

Page 29: 2 주  :  프로그래밍 언어의 기초

프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)

PL/I광범위한 응용 분야에 사용될 수 있는 언어를 설계하려는 첫 번째 대규모 시도

이전 , 이후 대부분의 언어는 과학 , 인공지능 , 사무분야 등 특정 한가지 응용 분야에 초점을 둠계보 : COBOL(1960) & ALGOL(1960) & Fortran IV(1962), PL/I(1965)

APL 과 SNOBOL초기 동적 언어

동적 타입과 동적 기억장소 할당다른 기존 언어에 기반 주지 않고 다른 언어에도 많은 영향을 미치지 못함

29

Page 30: 2 주  :  프로그래밍 언어의 기초

프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)

SIMULA 67데이터 추상화의 발단클래스 구조 개발 : 데이터 구조와 데이터 구조를 조작하는 루틴들을 함께 묶는 것계보 : ALGOL(1960), SIMULA I(1964), SIMULA 67(1967)

ALGOL 68최초의 직교적 설계

사용자 - 정의 데이터 타입의 포함 ( 몇 개의 기본적인 타입과 구조체를 제공하고 사용자가 이러한 구조 타입들을 다양하고 많은 구조체로 결합하는 것을 허용 )

ALGOL 의 후손들Pascal(1971) : 설계의 단순성

프로그래밍 교육 목적으로 가장 널리 사용된 언어1990 년대 중반 이후로 인기가 감소 추세

30

Page 31: 2 주  :  프로그래밍 언어의 기초

프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)

C(1971) : 이식성폭 넓고 다양한 응용 분야에 매우 적합충분한 제어문과 데이터 구조할 수 있는 특징 제공 , 높은 표현력 허용을 위한 연산자 제공 ( 그러나 완벽한 타입 검사를 제공하지 않음 )계보 : CPL(1963), ALGOL(1968), BCLP(1969), B(1970), C(1971), C++(1985) & ANSI C(1989), C99

Prolog논리 기반 프로그램

계산 프로세스를 컴퓨터에 전달하기 위해 형식적인 논리 표기인 술어 해석학 (Predicate calculus) 을 사용프로그래밍은 비절차적 , 결과의 형태를 서술간결하고 명확함

31

Page 32: 2 주  :  프로그래밍 언어의 기초

프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)

Ada가장 광범위하고 가장 많은 비용이 투여된 언어규모가 크고 복잡한 반면 신뢰성이 필요한 응용분야를 위해 설계계보 : Pascal(1971), Ada 83(1983), Ada 95(1995)

Smalltalk객체지향 프로그래밍

단순한 언어가 아니라 완벽한 소프트웨어 개발환경인터페이스의 사용에 있어서 상당히 그래픽적임

C++명령형 특징과 객체지향 특징의 결합

Smalltalk 의 것을 지원하기 위해 C 에 특징을 추가32

Page 33: 2 주  :  프로그래밍 언어의 기초

프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)프로그래밍 언어의 발전사프로그래밍 언어의 발전사 (cont’d)(cont’d)

Java명령형 + 객체지향 언어

C++ 의 강력함과 유연성을 제공하면서 규모는 작아지고 더욱 단순하고 더욱 안전한 언어로 설계 (1994)

웹을 위한 스크립트 언어1990 년대 중반 이 후 웹 사용이 폭발적으로 증가 , HTML과 관련된 계산에 대한 필요성이 급격하게 요구서버 측 스크립트 언어와 클라이언트 측 스크립트 언어의 등장이 요구 됨

클라이언트 측 언어 : 클라이언트측에서 직접 처리하는 언어이며 때문에 서버에 부하를 주지 않음 , JavaScript 등 서버 측 언어 : 서버는 웹서비스를 하면서 웹브라우저를 통해 정보를 뿌려주게 되어 있음 , 웹브라우저가 인식할 수 있는 HTML코드로 변환 , PHP, ASP, JSP 등

33

Page 34: 2 주  :  프로그래밍 언어의 기초

웹프로그래밍 언어웹프로그래밍 언어웹프로그래밍 언어웹프로그래밍 언어웹프로그램은 정적인 것과 동적인 것이 존재

정적 : HTML 처럼 변하지 않고 프로그래머가 짜놓은 그대로 화면에 나타내어 지는 것동적 : ASP,PHP,JSP,PERL(CGI) 처럼 프로그램을 해 놓은 상태에서 각 웹사이트를 돌아 다니시다 보면 화면이 매번 바뀌는 것을 볼 수 있을겁니다 .

웹프로그램은 그 어느 것을 말하는 것이 아닌 HTML과 ASP,PHP,JSP,PERL(CGI) 등이 같이 쓰여져 웹페이지에서 글도 쓰고 회원가입도 하는 인터넷으로 할수 있는 모든 서비스HTML 은 화면에 보여지는 자체가 HTML 이고 ASP,PHP,JSP,PERL(CGI) 등은 HTML 에 생명을 불어 넣는 프로그램 ASP,PHP,JSP,PERL(CGI) 는 HTML이 없이는 화면에 보여질 수 없음

34

Page 35: 2 주  :  프로그래밍 언어의 기초

웹프로그래밍 언어웹프로그래밍 언어웹프로그래밍 언어웹프로그래밍 언어

ASP(Active Server Page)MicroSoft 의 IIS(Internet Information Server) 에서 사용

Visual Basic 의 스크립트 버전인 Visual Basic Script 사용Windows 서버의 여러 기능 활용을 통한 높은 생산성 , 강력한 기능의 쉬운 구현WINDOW NT 계열 , IIS 서버 , MSSQL 데이타베이스 , 중소형쇼핑몰

PHP(Hypertext Preprocessor) 1994 년 rasmus lerdorf 라는 사람에 의해 처음으로 고안이 되었으며 자신의 개인홈페이지를 만들기 위해 사용

웹서버인 아파치웹서버에 모듈형태로 장착되어 쓰임 , 유닉스뿐만 아니라 윈도우에서도 사용이 가능ASP 의 ODBC 나 JSP 의 JDBC 와 같이 보조적인 메커니즘이 필요하지 않고 바로 함수를 통한 처리방식을 채택 , 즉 데이터베이스에 대한 공통 인터페이스를 가지고 있지 않고 모든 DB에 대해 자체 라이브러리를 지원

35

Page 36: 2 주  :  프로그래밍 언어의 기초

웹프로그래밍 언어웹프로그래밍 언어 (cont’d)(cont’d)웹프로그래밍 언어웹프로그래밍 언어 (cont’d)(cont’d)

php 의 최대 장점은 사이트에서 다운받아 무료로 사용대부분의 운영체제를 지원하며 데이타베이스를 다양하게 지원함수가 많아 작업이 편리리눅스계열 , APACHE 서버 , MYSQL 데이타베이스 , 개인 혹은 중소형소핑몰사용

JSP(Java Server Page) JAVA 를 기반으로 하는 SUN 사에서 개발한 언어

주로 은행이나 중요회사에 많이 쓰이며 보완성이 뛰어남 하지만 코딩이 어렵고 ASP 에 비해 코드량이 1.5 배 가량 됨동작 가능한 곳은 리눅스와 윈도우즈 모두 가능하며 데이타베이스도 다양하게 지원JVM(Java Visual Machine) 이라는 프로그램이 운영체제 위에 설치되면 기종을 가리지 않고 사용할 수 있기 때문에 코딩이 어려워도 요즘 많이 쓰이는 추세WINDOW혹은 리눅스 계열 , TOMCAT혹은 RESIN 서버 , ORACLE데이타베이스 , 은행 및 보안중요성회사 , 대형쇼핑몰에 사용 36

Page 37: 2 주  :  프로그래밍 언어의 기초

참고 참고 : : 자바스크립트와 자바의 차이자바스크립트와 자바의 차이참고 참고 : : 자바스크립트와 자바의 차이자바스크립트와 자바의 차이

37