240 likes | 785 Views
Chapter 1. 프로그래밍 언어의 소개. Introduction. 프로그래밍 언어 사용자가 컴퓨터가 해야 할 일을 기술하는데 사용하는 매체 (media) 내용 프로그래밍 언어의 역사 프로그래밍 언어의 정의 프로그래밍 언어의 학습 이유 좋은 프로그래밍 언어의 조건. 프로그래밍 언어의 정의. 프로그램 컴퓨터가 실행하는 명령어들의 집합 컴퓨터가 수행할 계산 절차를 기술한 것 프로그래밍 언어 프로그램을 작성하기 위한 표기법 (notation) 프로그래밍 언어의 학습 문법 (syntax)
E N D
Introduction • 프로그래밍 언어 • 사용자가 컴퓨터가 해야 할 일을 기술하는데 사용하는 매체 (media) • 내용 • 프로그래밍 언어의 역사 • 프로그래밍 언어의 정의 • 프로그래밍 언어의 학습 이유 • 좋은 프로그래밍 언어의 조건
프로그래밍 언어의 정의 • 프로그램 • 컴퓨터가 실행하는 명령어들의 집합 • 컴퓨터가 수행할 계산 절차를 기술한 것 • 프로그래밍 언어 • 프로그램을 작성하기 위한 표기법 (notation) • 프로그래밍 언어의 학습 • 문법 (syntax) • 프로그래밍 언어 구성 요소들이 결합되는 방법 • 의미론 (semantics) • 문법적으로 옳은 프로그램 각 문장의 의미를 해석하는 규칙
프로그래밍 언어를 배우는 이유 • 프로그래밍 언어론 학습 • 여러 언어의 특성 비교, 분석 • 자신이 사용하는 언어의 이해력 증진 • 보다 신뢰성 있고 효율적인 프로그램 작성 • 학습 이유 (Pratt & Zelkowitz) • 효과적인 알고리즘 개발 능력 향상 • 현재 사용하고 있는 프로그래밍 언어의 이용도 증진 • 유용한 프로그래밍 구조에 대한 어휘력 증진 • 적절한 프로그래밍 언어의 선택 • 새로운 언어의 용이한 습득 • 새로운 언어의 설계
좋은 프로그래밍 언어의 조건 (1) • 1960년대 이전 • 효율성: 적은 실행 메모리, 짧은 실행 시간 • FORTRAN: 실행 속도, 실행 파일 크기 • Readability (해독성, 판독성, 가독성) • 프로그램의 용이한 이해 • C 언어: 간결, 이해의 어려움 • COBOL • 영어 문장 같은 언어, 프로그램의 크기 증가, 역효과 • 70년대: 프로그램의 유지 보수 주석 허용 Z = X + Y; ADD X TO Y GIVING Z
좋은 프로그래밍 언어의 조건 (2) • 간결성 • 단순하게 표현할 수 있게 하는 특성 • 프로그램 작성, 이해 용이 • Pascal: 간결성을 주요 설계 목표로 함 성공 • 프로그램 구조 복잡, 프로그래밍 작업량 증대 • 프로그램 검증의 용이성 • 단순 명확한 문법 구조와 언어 의미 • 프로그램의 크기가 커지고 중요한 프로그램일 경우 중요한 이슈
좋은 프로그래밍 언어의 조건 (3) • Orthogonality (직교성, 독립성) • 프로그래밍 언어의 직교성 • 모든 가능한 조합을 사용하여 프로그래밍 언어의 요소를 결합할 수 있도록 허용하는 것 • 프로그램 작성 용이 • 프로그램의 오류 발견의어려움 • Algol 68 B+C (1) B: 정수, 실수 C: 정수, 실수 (2) B: 정수, 실수, 배열, 레코드 C: 정수, 실수, 배열, 레코드
좋은 프로그래밍 언어의 조건 (4) • Abstraction (추상화, 단순화) • 추상화 • 객체가 자신의 복잡한 내부 구조, 구현 방법 등을 외부로부터 감추어 블랙박스로 단순화 한다는 의미 • 객체의 필수적인 속성만으로 객체를 사용할 수 있도록 하는 것 • 프로그래밍 작업의 단순화, 분업화
좋은 프로그래밍 언어의 조건 (5) • stack, queue class stack { int top; int data[100]; public: stack() { top=0; } void push(int x) { data[top++] = x; } int pop() { return data[--top]; } }; int top=0; int data[100]; void push(int x) { data[top] = x; top++; } int pop() { top--; return data[top]; }
좋은 프로그래밍 언어의 조건 (6) • Machine independence (기계 독립성) • 작성된 프로그램이 모든 컴퓨터 시스템에서 동일한 기능을 수행할 수 있어야 한다. • PASCAL의 MAXINT: 기계 종속적인 부분을 분리 • 프로그램의 이식성 (portability) 향상에 중요 • 개발 환경 • 신뢰성 있고 효율적인 컴파일러 • 풍부한 개발 환경: 편집기, 유틸리티, debugger
좋은 프로그래밍 언어의 조건 (7) • 일반성 • 언어의 문법은 일반적으로 많이 사용하는 표현과 일치하는 것이 좋다. • Java에서의 상수: const (x) final (o) • Algol 68에서의 형 선언: type (x) mode (o)
좋은 프로그래밍 언어의 조건 (8) • 획일성 (Uniformity) • 비슷한 의미를 지닌 것은 비슷한 형식을 가져야 함 function ex1 : integer; begin … ex1 := 3 end procedure p1; (* terminator *) var x, y : integer; (* terminator *) begin x := 0; (* separator *) y := 3 end; (* terminator *) 함수 ex1의 return value가 3
프로그래밍 언어의 종류 (1) • 저급 언어 • 기계어, 어셈블리어 • 프로그램 작성과 이해가 어렵다. • 고급 언어 • FORTRAN, C, PASCAL, … • 이해가 쉽다. • 이식성이 높다. • 기계어로 번역하는 과정이 필요하다.
프로그래밍 언어의 종류 (2) • 응용 분야별 구분 • 범용 언어 (general purpose language) • Pascal, C, Ada, C++, … • 인공지능 언어 • 논리 연산과 융통성 • LISP, Prolog
프로그래밍 언어의 종류 (3) • 병렬 처리 언어 (parallel language) • 상호 통신하는 프로세스를 실행시킬 수 있는 언어 • Linda, concurrent Pascal • 페이지 기술 언어 (page description language) • 문서의 형식을 기술하는 언어 • Postscript, HTML, … • 데이터베이스 질의어 (query language) • 데이터베이스 정보 검색을 위한 언어 • SQL (structured query language)
프로그래밍 언어의 종류 (4) • 세대별 구분 • 1세대 (1940 ~ 50년대): 기계어, 어셈블리어 • 2세대: 비구조적 고급어, FORTRAN • 3세대: 구조적 고급어, Algol, PASCAL • 4세대: 특수 목적 언어, SQL, Lotus, Delphi • 5세대: 초 고급 언어, Prolog, SETL
프로그래밍 언어의 종류 (5) • 계산 모델에 의한 구분 • 명령형 언어 (imperative language, procedural language) • 문제를 해결할 모든 절차를 기술해야 하는 언어 • 기억 장소의 내용을 조작/변경하여 계산 과정 수행 • 순차적 문장들로 프로그램 구성
프로그래밍 언어의 종류 (6) • 함수형 언어 (functional language, applicative language) • 입력과 출력의 함수만을 사용하여 프로그램 기술 • 프로그램의 실행: 입력 데이터를 원하는 결과로 변환 • LISP result function_n(…function_2(function_1(data))…)
프로그래밍 언어의 종류 (7) • 논리 언어 (logic language, rule-based language) • 프로그램 = rule + 규칙 활성화 조건 • 조건 만족 시 연관 조건 실행 • Knowledge base: 규칙의 집합 • Prolog enabling condition1 action1 enabling condition2 action2 enabling condition3 action3 …
프로그래밍 언어의 종류 (8) • 객체 지향 언어 (object oriented language) • 기본 개념 • 클래스 (class) • 객체간 계층화 (hierarchy) • 상속 (inheritance) • 다형성 (polymorphism) • 객체 (object): 프로그램 안의 모든 독립 개체 • 프로그램의 수행 : 객체간의 메시지 교환 • C++, Smalltalk, Java
프로그래밍 언어의 종류 (9) • 구현 기법에 의한 구분 • 구현 기법: 프로그램을 실제 기계에서 실행시키는 방법 • 번역 방식 (translation) • 프로그램을 번역 기계어 프로그램 생성 실행 • 필요한 프로그램 • 컴파일러 (compiler): 고급 언어 기계 언어 • 링커 (linker) • 목적 코드 + 다른 목적 코드 + 라이브러리 실행 가능한 프로그램 • 로더 (loader): 실행 가능 파일 주기억 장치 • 기타: 어셈블러 (assembler), 프리프로세서 (preprocessor) • 빠른 실행 시간 • 프로그램의 변경 모든 프로그램의 재 번역 • Fortran, Algol, PL/I, Pascal, C, C++, …
프로그래밍 언어의 종류 (10) • 인터프리터 방식 (interpreter) • 명령문을 중간 형태로 번역 바로 실행 • 실행 시간이 길다. • 프로그램의 개발 단계에서 유용 • 교육용: 대화식 프로그래밍 • 목적 프로그램을 위한 기억 장소가 필요 없다. • 사용자 적응성 • Basic, Prolog, Lisp, Snobol, … • 하이브리드 (hybrid) 방식의 실행 • 중간 언어로 번역 • 소프트웨어 인터프리터로 실행 • Java: byte code로 번역 java virtual machine에서 실행