Transcript 제 4 장 자바 소개
제 2장 언어의 변천
2.1 디지털 컴퓨터 이전의 언어
2.2 1950년대 : 최초의 프로그래밍 언어
2.3 1960년대 : 프로그래밍 언어의 폭증
2.4 1970년대 : 간결성, 추상화, 연구사항
2.5 1980년대 : 통합과 새로운 방향
2.6 1990년대 : 웹을 위한 언어
2.7 2000년대 : C#, 마크업 언어
2.8 프로그래밍 언어의 세대론과 미래
언어의 변천
2.1 디지털 컴퓨터 이전의 언어
B.C 1500∼3000년대의 찰흙판
60진법 사용
대수학 방정식
Euclid
B.C 300년
최대 공약수 알고리즘
언어의 변천
Charles Babbage (1792∼1871)
Difference Engine
계산 처리용
유한차 원리
기호 논리학 근거
현재 컴퓨터와 유사 구조
저장 개념 없음
언어의 변천
Ada Augusta
최초의 컴퓨터 프로그래머
알고리즘에 대한 탁월한 견해
Ada 언어는 그녀의 이름 작명
2–6
Copyright © 2007 Addison-Wesley. All rights reserved.
Plankalkül Syntax
• An assignment statement to assign the
expression
| A + 1 => A
V | 4
5
(subscripts)
S | 1.n
1.n
(data types)
Copyright © 2007 Addison-Wesley. All rights reserved.
언어의 변천
2.2 1950년대 : 최초의 프로그래밍 언어
1950년대 초반
기계어 사용
어셈블리 언어
1950년대 중반
FORTRAN (FORmula TRANslation)
최초의 고급언어 (John Backus)
효율적 기계어 코드 생성
배열, 반복 구조, 분기문, 부프로그램 사용
Example 2.1 FORTRAN
C A HYPOTHETICAL PROGRAM IN FORTRAN
FUNF(T) = SQRTF(ABSF(T)) + 5.0*T**3
DIMENSION A(11)
1 FORMAT(6F12.4)
READ 1,A
DO 10 J = 1,11
I = 11-J
Y = FUNF(A(I+1))
IF(400.0-Y)4,8,8
4 PRINT 5,I
5 FORMAT(I10, 10H TOO LARGE)
GO TO 10
8 PRINT 9,I,Y
9 FORMAT(I10,F12.7)
10 CONTINUE
STOP
언어의 변천
1950년대 후반
COBOL (Common Business Oriented Language)
상업 자료 처리용
ALGOL 60(ALGOrithmic Language 60)
알고리즘 기술, 범용
LISP(LISt Processor)
기초 연산, 리스트 처리용
APL(A Programming Language)
배열 처리용
언어의 변천
COBOL
미국방성팀 고안 (1959∼60)
사용자들의 편의성 고려
특징
Record 구조
자료구조와 실행 부분 분리
“PICTURE” 사용
Example 2.2 COBOL
비구조화 프로그램
1 IDENTIFICATION DIVISION.
2 PROGRAM-ID.
SALARY.
3 INSTALLATION. CRUSADERS.
4 DATE-WRITTEN.
1984. 8. 15.
5 DATE-COMPILED. 84.08.11.
6 SECURITY. YOU HAD BETTER NOT KNOW.
7 ENVIROMENT DIVISION.
8 CONFIGURATION SECTION.
9 SOURCE-COMPUTER.
COMPUTER-X.
10 OBJECT-COMPUTER.COMPUTER-X.
11 INPUT-OUTPUT SECTION.
12 FILE-CONTROL
13
SELECT
EMPL-FILE ASSIGN TO CARD-READER.
14
SELECT
PRINT-FILE ASSIGN TO LINE-PRINTER.
15 DATA DIVISION.
16 FILE SECTION.
17 FD EMPL-FILE
18
LABEL RECORDS ARE OMITTED
19
DATA RECORD IS EMPL-RECORD.
20 01 EMPL-RECORD.
21
02 NAME-IN
PIC X(15).
22
02 SEX-CODE
PIC 9.
23
88 MALE
VALUE 1.
24
88 FEMA
VALUE 2.
25
88 ERROR-SEX-CODE VALUE ZERO, 3 THRU 9.
26
27
02 SALARY-IN PIC 99999V99.
02 FILLER
PIC X(57).
28 FD PRINT-FILE
29
30
LABEL RECORDS OMITTED
DATA RECORD IS PRINT-LINE.
31 01 PRINT-LINE
PIC X(132).
32 WORKING-STORAGE SECTION.
33 01 SEX-COUNTERS.
34
02 NO-OF-MEN
PIC 99 VALUE ZERO.
35
02 NO-OF-WOMEN PIC 99 VALUE ZERO.
36 01 SAL-TOTALS.
37
02 MEN-TOTAL-SAL
38
02 WOMEN-TOTAL-SAL
PIC 9(7)V99 VALUE ZERO.
PIC 9(7)V99 VALUE ZERO.
39 01 END-OF-FILE-TEST
40
88 NO-MORE-RECORDS VALUE ‘YES’.
41 01 HEARDER1.
42
02 FILLER
PIC X(41) VALUE SPACES.
43
02 FILLER
PIC X(13) VALUE ‘ANNUAL SALARY’.
44 01 HEARDER2.
45
02 FILLER
PIC X(16) VALUE SPACES.
46
02 FILLER
PIC X(13) VALUE ‘EMPLOYEE NAME’.
47
02 FILLER
PIC X(10) VALUE SPACES.
48
02 FILLER
PIC X(41) VALUE ‘MEN’.
49
02 FILLER
PIC X(41) VALUE SPACES.
50
02 FILLER
PIC X(41) VALUE ‘WOMEN’
51 01 REPORT-LINE.
52
02 FILLER
PIC X(15) VALUE SPACES.
53
02 NAME-OUT
PIC X(15).
54
02 ERROR-SIGNAL
PIC X(5) VALUE SPACES.
55
02 MEN-SAL-OUT
PIC ZZZ9999.99 BLANK WHEN ZERO.
56
02 FILLER
57
02 WOMEN-SAL-OUT
PIC X(5) VALUE SPACES.
PIC X(41) ZZZ9999.99 BLANK WHEN ZERO.
58 PROCEDURE DIVISION.
59 PROGRAM-SUMMARY.
60
OPEN INPUT EMPL-FILE
61
OUTPUT PRINT-FILE.
62 PRINT-HEADINGS.
63
WRITE PRINT-LINE FROM HEARDER1
64
AFTER ADVANCING PAGE.
65
WRITE PRINT-LINE FROM HEARDER2
66
AFTER ADVANCING 2 LINES.
67
MOVE SPACES TO PRINT-LINE
68
WRITE PRINT-LINE
69
AFTER ADVANCING 2 LINES.
70 READ-EMPL-RECORD.
71
READ EMPL-FILE AT END GO TO PRINT-SUMMARY.
72
PROCESS-A-RECORD.
73
IF MALE
74
MOVE SALARY-IN TO MEN-SAL-OUT
75
MOVE ZEROS TO WOMEN-SAL-OUT
76
ADD 1 TO NO-OF-MEN
77
ADD SALARY-IN TWO MEN TOTAL SAL.
78
IF FEMA
79
MOVE SALARY-IN TO WOMEN-SAL-OUT
80
MOVE ZEROS TO MEN-SAL-OUT
81
ADD 1 TO NO-OF-WOMEN
82
ADD SALARY-IN TO WOMEN-TOTAL-SAL.
83
IF ERROR-SEX-CODE
84
MOVE ALL ‘*’ TO ERROR-SIGNAL.
85
MOVE NAME-IN TO NAME-OUT
86
WRITE PRINT-LINE FROM REPORT-LINE
87
AFTER ADVANCING 1 LINE.
88
MOVE SPACES TO REPORT-LINE.
89
GO TO READ-EMPL-RECORD.
90 PRINT-SUMMARY.
91
MOVE ‘TOTAL’ TO NAME-OUT
92
MOVE MEN-TOTAL-SAL TO MEN-SAL-OUT
93
MOVE WOMEN-TOTAL-SAL TO WOMEN-SAL-OUT
94
WRITE PRINT-LINE FROM REPORT-LINE
95
AFTER ADVANCING 3 LINES.
96
DIVIDE NO-OF-MEN INTO MEN-TOTAL-SAL
97
98
GIVING MEN-SAL-OUT
DIVIDE NO-OF-WOMEN INTO WOMEN-TOTAL-SAL GIVING WOMEN-SAL-OUT.
99
MOVE ‘A V E R A G E’ TO NAME-OUT
100
WRITE PRINT-LINE FROM REPORT-LINE
101
102
AFTER ADVANCING 2 LINES.
CLOSE EMPL-FILE
103
104
PRINT-FILE.
STOP RUN.
COBOL 구조화 프로그램
1 ~ 61 COBOL 비구조화 프로그램과 동일함
62
PERFOEM PRINT-HEADINGS.
63
PERFOEM READ-EMPL-RECORD.
64
PERFORM PROCESS-A-RECORD
65
UNTIL NO-MORE-RECORDS.
66
PERFORM PRINT-SUMMARY.
67
CLOSE EMPL-FILE
68
69
PRINT-FILE.
STOP RUN.
70 PRINT-HEADINGS.
71
72
WRITE PRINT-LINE FROM HEARDER1
AFTER ADVANCING PAGE.
73
WRITE PRINT-LINE FROM HEARDER2
74
AFTER ADVANCING 2 LINES.
75
MOVE SPACES TO PRINT-LINE
76
WRITE PRINT-LINE
77
AFTER ADVANCING 2 LINES.
78 READ-EMPL-RECORD.
79
80
READ EMPL-FILE
AT END MOVE ‘YES’ TO END-OF-FILE-TEST.
81 PROCESS-A-RECORD.
82
83
IF MALE
PERFORM PROCESS-MEN.
84
85
86
87
IF FEMA
PERFORM PROCESS-WOMEN.
IF ERROR-SEX-CODE
PERFORM PROCESS-ERROR-CODE.
88
MOVE NAME-IN TO NAME-OUT
89
WRITE PRINT-LINE FROM REPORT-LINE
90
AFTER ADVANCING 1 LINE.
91
MOVE SPACES TO REPORT-LINE.
92
PERFORM READ-EMPL-RECORD.
93 PROCESS-MEN.
94
MOVE SALARY-IN TO MEN-SAL-OUT.
95
MOVE ZEROS TO WOMEN-SAL-OUT.
96
ADD 1 TO NO-OF-MEN.
97
ADD SALARY-IN TO MEN-TOTAL-SAL.
98 PROCESS-WOMEN.
99
MOVE SALARY-IN TO WOMEN-SAL-OUT.
100
MOVE ZEROS TO MEN-SAL-OUT.
101
ADD 1 TO NO-OF-WOMEN.
102
ADD SALARY-IN TO WOMEN-TOTAL-SAL.
103 PROCESS-ERROR-CODE.
104
MOVE ALL ‘*’ TO ERROR-SIGNAL.
105 PRINT-SUMMARY.
106
MOVE ‘TOTAL’ TO NAME-OUT
107
MOVE MEN-TOTAL-SAL TO MEN-SAL-OUT
108
MOVE WOMEN –TOTAL-SAL TO MEN-SAL-OUT
109
WRITE PRINT-LINE FROM REPORT-LINE
110
111
112
AFTER ADVANCING 3 LINES.
DIVIDE NO-OF-MEN INTO MEN-TOTAL-SAL
GIVING MEN-SAL-OUT
113
DIVIDE NO-OF-WOMEN INTO WOMEN-TOTAL-SAL GIVING WOMEN-SAL-OUT.
114
MOVE ‘ A V E R A G E’ TO NAME-OUT
115
WRITE PRINT-LINE FROM REPORT-LINE
116
AFTER ADVANCING 2 LINES.
언어의 변천
ALGOL 60
알고리즘 서술용 (1958∼1960)
특징
Free format
구조적 명령문
begin - end 블록
변수 타입 선언, stack 기반
되부름, BNF 사용
Example 2.3 ALGOL 60
begin integer i, real y; real array a[0:10]
real procedure f(t); real t; value t;
f := sqrt(abs(t)) + 5 * t ↑ 3;
for i := 0 step 1 until 10 do read(a[i]);
for i := 10 step -1 until 0 do
begin y := f(a[i]);
if y > 400 then write(i, ‘too large’)
else write(i, y)
end
end
언어의 변천
언어의 변천
LISP
MIT (1950년대 후반)
List 구조, 함수 기본
인공지능 분야
특징
S-expression
함수 적용
garbage collection 개념 소개
되부름의 원조
Example 2.4 LISP
/* 세번째 인자 가운데 두번째 인자가 있는 곳에
첫번째 인자를 삽입하는 프로그램 ( recursion 사용) */
(DEFUN SUBST ( X Y Z)
(COND
[(EQUAL Y Z) X]
[(ATOM Z) Z]
[(CONS(SUBST X Y(CAR Z)) (SUBST X Y (CDR Z)))]))
(SUBST `a`b`(c b a))
→(c a a)
언어의 변천
APL
하버드 (1950∼1960)
배열의 강력성
언어의 단점
제어구조가 없음
특정 터미널에만 있는 그리스 기호 사용
프로그램을 이해하기 어려움
Example 2.5 APL
/* increment 프로그램 */
▽INCREMENT
[1] Z ← 1
[2] Z ← Z+R
[3] Z
[4] → 2
[5] ▽
실행
R←2
INCREMENT
3
5
7
.
.
.
언어의 변천
2.3 1960년대 : 프로그래밍 언어의 폭증
언어의 변천
1960년대의 언어
PL/I (Programming Language One)
ALGOL 68
Simula 67
BASIC
(Beginners All-purpose Symbolic
Instruction Code)
언어의 변천
PL/I (Programming Language One)
FORTRAN, COBOL, ALGOL 60의 장점
병행성, 기억장소 할당, 예외처리기능 추가
번역기 크고, 실행 효율 저하
상호작용으로 인한 신뢰성 저하
언어의 변천
ALGOL 68
ALGOL 60에 다른 기능 보강
직교성 강조
이론적 실험성 강한 언어
SNOBOL(StriNg Oriented symBOlic Language)
최초의 문자열 처리
패턴 매칭 기능 다양
Example 2.6 SNOBOL
/* INPUT file에서 ‘X’를 ‘A’로 ‘Y’는 ‘B’로 바꾸는 프로그램*/
LOOP TEXT = INPUT
:F(END)
ONE TEXT ‘X’ = ‘A’
:S(ONE)
TWO TEXT ‘Y’ = ‘B’
:S(TWO)
OUTPUT = TEXT
END
언어의 변천
Simular 67
최초의 객체지향 언어 (Class 개념)
시뮬레이션 목적
BASIC
간단한 언어
교육용, 가정용, 사무처리용
언어의 변천
2.4 1970년대 : 간결성, 추상화, 연구사항
1970년대 초반 언어 특징
간결성, 일관성 추구
PASCAL (1971, Wirth)
작고, 간결, 구조적, 효율적 : 교육용
C (1972, Dennis Ritchie)
수식 위주, type system
기계 접근성, 운영체제용 (UNIX)
언어의 변천
1970년대 중반 언어 특징
자료 추상화, 병행성, 증명 시도
CLU
Euclid
Mesa
언어의 변천
2.5 1980년대 : 통합과 새로운 방향
1980년대 언어 특징
Ada 등장
자료 추상화, package
병행처리(task), 예외처리
Modular-2
PASCAL 결점 보안
함수형 언어 : Scheme, ML
논리형 언어 : Prolog
객체지향 언어 : Small talk, C++
Example 2.7 PROLOG
/* 규칙과 질문으로 추론 기능 */
likes(joe, fish).
likes(mary, book).
likes(john, money).
질문:
?
- likes(mary, book).
: yes
likes(john, X) : - likes(X,wine), likes(X, food).
: John likes X if X likes wine and likes food.
2.6 1990년대 : 웹을 위한 언어
2.6.1 JAVA
C++ 로부터 시작
C++ 보다 단순성, 신뢰성 원칙
객체지향 언어
Pointer , 다중상속 지원 안함
Multithread 제공
Web 은 Java 의 응용분야
2.6.1 JAVA
- 더하기 연산
* 소스
public class PlusTest{
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = a + b;
System.out.println(“a + b = “ + c);
}
}
* 결과
30
2.6.2 JavaScript
HTML 문서에 내포된 클라이언트 측 스크립트 언어
동적 HTML 문서 생성
JavaScript는 동적 타입 언어
문자 스트링과 배열은 동적 길이를 가짐
상속 메소드에 대한 메소드 호출의
동적 바인딩 지원 못함
2.6.2 JavaScript
- 더하기 연산
* 소스
<!DOCTYPE html>
<html>
<head>
<title>script</title>
</head>
<body>
<script>
var x = 10;
y = 20;
z = x + y;
w = “40”;
// integer 형식
// String 형식
document.write("<h3>x = " + x + "</h3>");
document.write("<h3> y = " + y + "</h3>");
document.write("<h3>x + y = " + z + "입니다.</h3>");
document.write("<h3>w = " + w + "</h3>");
</script>
</body>
</html>
2.6.2 JavaScript
- 더하기 연산
* 소스
<HTML>
<HEAD>
<TITLE> 자바스크립트 더하기 예제 </TITLE>
<script language = “javascript”>
<!-function add(){
with(document.FORMtest){
t3.value=parselInt(t1.value) +
parselInt(t2.value)}
}
-->
</script>
</HEAD>
<BODY>
<from name = “FORMtest”>
<inpute type=“text” name=“t1” value=“10”> + <input type=“text” name=‘t2”
value=“20”> = <input type=“text” name=“t3” value=“”>
</form>
<a href=“javascript; add()”> t3.value = parseInt(t1.value) +
parseInt(t2.value) : JavaScript 더하기 연산</a><br>
</BODY>
</HTML>
2.6.3 PHP (Personal Home Page)
Power Hypertext Preprocessor 사용
서버 측 스크립트 언어
구문형태나 String과 배열의 동적 타입 사용의
관점에서 JavaScript와 유사
HTML 폼 데이터에 대한 간단한 접근 허용
2.6.3 PHP (Personal Home Page)
- 더하기 연산
* 소스
<?
* 결과
30
$a=20;
$b=10;
$c=$a+$b;
echo $c;
?>
2.7 2000년대 : C#, 마크업 언어
2.7.1 C#
C++ 와 Java 기반
.NET Framework에서 제공
CTS (Common Type System) 사용
IL (Intermediate Language)
IL 실행 전, 기계 코드로 번역
Java의 C++제거요소 다시 포함
2.7.1 C#
- 더하기 연산
* 소스
using System;
class PlusTest
{
static void Main()
{
int a, b;
a = 10;
b = 20;
Console.WriteLine(“{0}은 a + b의 값”, a + b);
}
}
* 결과
30은 a + b의 값
2.7.2 XLST
(eXtensible Stylesheet Language Transformation)
XML (eXtensible Markup Language)문서를
다른 형태의 마크업 언어로 변환하는 한 가지 방법
마크업 / 프로그래밍 혼합형 언어
2.7.3 JSP
Java Server Page
동적인 웹 문서를 지원하고, 웹 문서의 다른 처리
요구들을 위해 설계된 기술
2.7.3 JSP
- 더하기 연산
* 소스
<%@ page language=“java” contentType=“text/html; charset=EUC-KR”
pageEncoding=“EUC-KR”%>
<%
int a = 10;
int b = 20;
int c = a + b;
%>
<!DOCTYPE html PUBLIC “-//W3c//DTD HTML 4.01 Transitional//EN”
http://www.w3.org/TR/html4/loose.dtd>
<html>
<head>
<meta http-equiv=Content-Type” content=“text/html; charset=EUC-KR”>
<title>PlusTest</title>
</head>
<body>
<div><h2>a + b의 합 : <%=c%></h2></div>
</body>
</html>
언어의 변천
2.8 프로그래밍 언어의 세대론과 미래
프로그래밍 언어의 세대구분 (견해에 따른 2가지 분류)
• 제 1 세대 - 어셈블리 언어
• 제 2 세대 - 비구조적 고급 언어
• 제 3 세대 - 구조적 고급 언어
• 제 5 세대 - 초 고급 언어
Fortran, Cobol, Algol, PL/I 등
Pascal, C 언어 등 프로시져 위주의 고급 언어
Prolog, SETL과 같은 초고급 언어
• 제 1 세대 - 기계어
• 제 2 세대 - 어셈블리 언어
• 제 3 세대 - 고급 언어
언어의 변천
4세대 언어의 특징
Software crisis 해결책
Database System 위주
SQL, Lotus, Delphi
기타. Ruby
* 소스(http://www.ruby-lang.org/ko/ 참고)
기타. Perl
- 더하기 연산
* 소스
#!/usr/bin/perl
use strict; use warnings;
use Math::Complex;
my $a = 10;
my $b = 20;
print $a + $b, “\n”;
* 결과
30