의사 소통 하는 방식 (언어) <-> 생각하는 방법 (사고)
프로그래밍 언어 <-> 컴퓨터에 대한 이해와 활용
컴퓨터 발전 <-> 컴퓨터에 대한 생각 <-> 프로그래밍 언어의 이해
프로그래밍 언어 설계
: 요구사항 및 구현 부분에서는 완벽하지 X
: 기본 법칙, 개념 , 설계 지식 -> 컴퓨터와 의사 소통, 컴퓨터 이해
프로그래밍 언어 정의
-> 기계가 읽을 수 있고, 사람이 읽을 수 있는 형식으로 계산을 기술하는 표현 체계
1940s 이전 : 프로그래밍이 전선 연결 (전선과 스위치로 입력)
1940s : Von Neumann 방식 (Program stored computer)
- CPU가 처리할 작업을 명령 코드로 작성
- 프로그래밍 개념 시작
- 어셈블리 언어 탄생 (Symbol 사용) -> 기계 종속적, 저급 수준의 추상화, 읽고 쓰기 어려움
- 고급 수준의 추상화 요구 -> 고급 언어의 등장 -> 프로그램 간략, 이해 용이, 이식성 증가, 배정 , 반복, 선택 개념
계산(computation)
: 수학적으로 형식적인 정의 가능 (튜링 머신 등)
: 컴퓨터가 처리할 수 있는 작업을 의미 (일반적)
Machine-readable
: 효과적인 번역 가능 ( 간결한 구조의 언어 요구)
: 단순 번역 알고리즘 존재
: 제한된 시간 내에 번역 가능 (프로그램 크기 단순 비례 이상적임)
: 문맥 자유 언어 (context free language)
Human-readable
: 기계 독립적인 추상성 제공 -> 자연어 형태
: 프로그램 대형화 -> 판독성은 새로운 국면 -> 지역성 요구
: 프로그래밍 언어 -> S/W 개발 환경에 포함되는 경향
프로그래밍 언어를 배우는 이유
1. 프로그래밍 언어 고찰 (언어들의 특징 기본개념, 특징들의 구현 & 문제점 , 특징들의 설계에 대한 기본 개념, ex) 비교분석)
2. 사용하고 있는 언어의 이해와 효율적인 알고리즘 작성
( 일부 특징 및 특성은 거의 사용 안되며 이해 못함)
( 특징들 사용의 효율성과 비효율성 이해 Ex) recursion , 동적 기억장소 할당 (PL/I) , 병행성)
( 효율적인 알고리즘 작성 가능)
3. 유용한 프로그래밍 구사 능력
(언어 <-> 사고)
(다양한 언어 구조 -> 알고리즘 작성 시 어휘 구사력 증가)
(어휘를 적재적소 사용)
(특징 구현 기술 -> 실제 적용 능력 제공 (coroutine 등))
(좋은 알고리즘 작성)
4. 프로그래밍 언어 선택 능력
- 문제 해결에 적절한 언어 선택
- 문자처리 : Snobol 4, 상업용 : Cobol , 시스템 내장 프로그램 : Ada , Modula-2
프로그래밍 언어에서의 추상화
- 추상화 (abstraction) : 주어진 작업이나 객체를 속성들의 일부분을 가지고 필요한 만큼 묘사할 수 있는 방법을 지원하는 것
- 필수적인 속성만으로 주어진 것을 묘사하므로, 나머지 속성들은 추상화/은닉/삭제
1) 자료 추상화 : 문자열, 수, 트리와 같은 계산될 자료의 특성을 추상화
2) 제어 추상화 (알고리즘 추상화) : 실행 순서를 제어하는 특성을 추상화 (반복문, 조건문, 프로시저 호출)
추상화의 목적 : readability 증가
정보의 양에 따른 분류
1) 기본 추상화 (basic abstraction) : 가장 지역적인 기계정보에 대한 추상화
2) 구조 추상화 (structured abstraction) : 보다 전역적인 정보인 프로그램의 구조에 대한 추상화
3) 단위 추상화 (unit abstraction) : 단위 프로그램 전체에 대한 정보의 추상화
자료추상화
1) 기본 추상화
- 컴퓨터 내부 자료표현을 추상화
- 기억 장치의 장소 -> 변수로 추상화 (int x; float y;)
- 자료의 값(2진수) -> 수를 10진 자료형으로 추상화 (x = 5.7;)
2) 구조 추상화
- 관련된 자료의 집합을 추상화
- ex) 배열, 레코드 (구조형 자료)
- 구조형에 새 이름 부여 기능 (새 차원의 추상화)
- type student = record ....
3) 단위 추상화
- 자료의 생성과 사용에 대한 정보를 한 장소에 모아두고, 자료의 세부 사항에 대한 접근을 제한
- 자료형의 구조 변경이 프로그램 전체에 영향을 주지 않음
- 자료 구조의 세부사항 무시
- 자료 캡슐화, 자료 추상화
- Ex) c++ , Java의 class / Modula-2의 module / Ada의 package
제어 추상화
1) 기본 추상화
- 몇 개의 기계 명령어를 모아 이해하기 쉬운 추상 구문화
- 배정문 : 계산과 값의 저장을 추상화한 것 (x := x + y)
- 분기문 (FORTRAN의 GOTO문 , IF문) (IF (A .GT. B) GOTO 10)
2) 구조 추상화
- (검사 값에 따라) 분할된 명령어 그룹 수행
- 택일문 : if 문과 같은 택일문 / Pascal의 case문 / C 언어의 switch 문
- 구조화 반복문 : for, repeat, while , loop-exit
- 강력한 구조 제어 : 부프로그램 ( 프로시저 추상화)
Ex) Ada의 if 문
if x > y then
t := x;
x := y;
y := t;
else
x := x + y;
y := y + l;
endif;
Ex) Java의 if 문
if (x > y) {
t = x;
x = y;
y = t;
} else {
x = x + y ;
y = y + l;
}
Ex) Ada의 반복문
i := 0;
loop
i := i + 1;
exit when sentence(i) /= '$';
endloop;
Ex) Java의 반복문
i = 0;
do
i = i + 1;
while (sentence(i) = '$');
3) 단위 추상화
- 프로시저의 집합을 추상화 (관련된 프로시저 그룹 추상화)
- 자료 관리 프로그램에서 유사한 작업 프로그램들을 모아서 하나의 단위 프로그램화
- 지원 도구 : Ada의 package, Modula-2의 module, C++와 Java의 class
cf) 기타 제어 추상화 : 병행 프로그래밍 (동기화 , 통신개념 지원) -> coroutine , task, process
계산 전형 (computational paradigms)
- 명령형 언어 (imperative L. ) / 절차적 언어 (procedural L. )
: 명령의 순차적 실행 , 변수 사용 , 배정문 사용
문제점 1) 폰 노이만 병목현상 발생 (순차실행)
2) 많은 자료의 동시 계산, 비결정적 계산, 순서에 의존하지 않는 계산 등에 비효율적
비 절차적 언어 -> 함수형 언어, 논리형 언어
- 함수형 언어 (functional L. ) / 적용형 언어 (applicative L.)
: 함수의 평가와 함수 적용을 기본으로 함 , 함수의 평가 및 호출 방법 제공 ,
변수/배정문 없음 , 반복연산은 재귀적 함수 이론에 기술됨
Ex) 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
cf) 절차형 언어를 쓴 함수형프로그래밍
// 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 }
cf) 함수형 언어를 사용한 예시
define (gcd u v) (if ( = v0 ) u (gcd v ( remainder u v))))
- 논리형 언어(Logical L. ) / 선언적 언어 (declarative L.)
: 기호 논리학에 근거
: 계산 실행 순서(how) 대신, 무엇을 하려고 하는가 (what)를 선언
: 반복이나 선택 개념 불필요
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).
'CS(Computer Science) > 프로그래밍언어' 카테고리의 다른 글
2. Algol 60 , Algol 68 (0) | 2023.04.19 |
---|---|
1. Fortran (0) | 2023.04.19 |
4. 프로그래밍 언어 구문과 구현 기법 (0) | 2023.04.07 |
3. 프로그래밍 언어 설계 시 주의점 (0) | 2023.04.07 |
2. 언어의 변천 (0) | 2023.04.07 |