1. 프로그래밍 패러다임
패러다임이란?
- 한 시대의 견해나 사고를 규정하는 양식, 규범, 체계 등을 통칭하는 말
- 토머스 쿤은 과학 분야의 발전에 따라 이전의 믿음과 체계가 흔들리고 새로운 체계로 대체되는 과정에 주목
- 패러다임의 전환
- 천동설 -> 지동설
프로그래밍 패러다임
- 프로그램을 작성하는 전형적인 방식
- 특정 언어에 종속적인 것이 아닌 프로그래머가 추구하는 프로그램 작성 방식
프로그래밍 패러다임의 변화
주어진 데이터에 어떤 연산을 어떤 순서로 할지 결정하는 것이 중요
-> 명령형 프로그래밍 패러다임 등장복잡한 데이터 처리를 위해 데이터 처리 방식 자체를 잘 정리하는 것이 중요
-> 절차형 프로그래밍 패러다임 등장
데이터가 저장된 메모리를 관리하는 것이 어려운 문제로 대두
-> 함수형 프로그래밍 패러다임 등장계산 절차를 문제의 조건을 명시하는 규칙으로 생각
-> 논리 프로그래밍 패러다임 등장
-> 선언적 프로그래밍 패러다임의 한 종류
- 같은 데이터에 대해 다른 처리 절차를 여러 개 명시해야 하는 경우가 흔히 발생
-> 객체지향 프로그래밍 패러다임 등장
프로그래밍 패러다임 변화의 배경
- 응용 도메인의 변화
-> 요구 사항의 변화
-> 계산 분야 -> 다양한 응용 분야 - 프로그램 구성 방식의 변화
-> 명령어 나열 -> 존재하는 모듈의 조합 - 계산 모델의 변화
-> 튜링 기계 모델 -> 새로운 방식의 계산 모델
2. 프로그래밍 언어의 패러다임
프로그래밍 패러다임 vs 프로그래밍 언어 패러다임
프로그래밍 패러다임 : 프로그램을 작성하는 방식이나 스타일
프로그래밍 언어 패러다임:
- 해당 프로그래밍 언어가 지원하는 프로그래밍 패러다임
- 일반적으로 프로그래밍 언어는 여러 프로그래밍 패러다임을 지원
프로그래밍 패러다임의 양립성
- 다양한 프로그래밍 패러다임은 서로 양립할 수 있음
- 새로운 패러다임의 등장으로 이전에 있었던 패러다임이 더욱 공고히 완성
- 주류 프로그래밍 패러다임이 바뀜에 따라 이를 언어가 수용하는 형태로 변화
- 예: 파이썬 -> 명령형 패러다임, 절차형 패러다임 지원 -> 함수형 패러다임, 객체지향 패러다임을 포함
3. 여러 패러다임의 프로그램 예시
명령형 프로그래밍
- 프로그램: 일련의 명령어 나열
- 장점: 프로그램을 쉽게 이해할 수 있음
- 단점: 프로그램이 복잡한 경우 효과적으로 다루지 못함
- 예시: Basic
10 HOME 20 INPUT "Enter A: ";A : INPUT "Enter B: ";B 30 IF A < B THEN C = A : A = B : B = C 40 REM C = A MOD B (A modulo B) 50 LET C = A - INT(A/B)*B 60 LET A = B : B = C 70 IF B > 0 GOTO 40 80 PRINT "GCD is ";A 90 END
Enter A: 126
Enter B: 312
GCD is 6
절차형 프로그래밍
- 프로그램: 서브루틴이라는 절차의 집합
- 장점: 재귀호출을 사용하여 프로시저를 간단하게 정의
- 예시: Algol
PROC gcd = (INT a, b) INT: (
IF b = 0 THEN
a ELSE
gcd(b, a MOD b)
FI
); main:(
INT a = 126, b = 312;
printf(($x"The gcd of"g" and "g" is "gl$,a,b,gcd(a,b)))
)
The gcd of +126 and +312 is +6
구조화 프로그래밍
goto 없이 프로그램을 작성하는 방법
블록과 서브루틴을 이용
구조화된 제어문을 이용
예시: C
#include <stdio.h>
int main() {
int a, b, c;
printf("Enter a and b: ");
scanf("%d %d", &a, &b);
do {
c = a % b;
a = b;
b = c;
} while (b > 0);
printf("gcd: %d\n", a);
return 0; }
Enter a and b: 126 312
gcd: 6
객체지향 프로그래밍
프로그램: 서로 통신할 수 있는 객체의 집합
GUI 개발에 큰 획(Smalltalk)
프로그램 재사용 편의로 S/W 생산성에 크게 기여
객체의 개념
-> 상태를 유지하며 외부의 요청에 반응하는 데이터
-> 상태 - 필드, 반응 - 메서드
-> 상태는 외부에 숨기고 메서드는 외부에 공개예시: Smalltalk
igcd := [ :a :b |
|u v|
u := a. v := b. [v>0]
whileTrue: [ |t|
t := u.
u := v.
v := t rem: v ].
u abs ].
(igcd value: 126 value: 312) printNl.
함수형 프로그래밍
- 데이터는 값으로, 명령어는 함수로 취급
-> 명령어가 데이터를 바꿀 수 없음 - 대입문과 반복문 없음
- 함수 자체도 값으로 취급 가능
module Main (main) where
main :: IO ()
main = putStrLn (show (igcd 126 312))
igcd a 0 = abs a
igcd a b = igcd (abs b) (a `mod` (abs b))
선언적 프로그래밍과 논리 언어
프로그램
-> 논리식 집합논리식은 명제나 술어로 나타냄
-> 술어는 인수를 받을 수 있음puppy(happy). safe(happy). pet(X) :- puppy(X), safe(X).
?- pet(X).
X = happy.
gcd(U, 0, U).
gcd(U, V, X) :- V > 0, Y is U mod V, gcd(V, Y, X).
?- gcd(126, 312, X). X=6
4. 프로그래밍 언어와 프로그래밍 패러다임
- 객체 지향 패러다임
-> 객체 사이의 통신을 통해 계산을 표현 - 함수형 패러다임
-> 함수의 적용응 통해 계산을 표현 - 논리 패러다임
-> 논리식의 진위를 증명하는 과정을 통해 계산을 표현
반응형
'CS > 프로그래밍언어론' 카테고리의 다른 글
구문론과 의미론 용어 정리 및 연습 문제 풀이 - 프로그래밍 언어론 (1) | 2023.12.08 |
---|---|
방송대 프로그래밍 언어론 기출문제 오답률 높은 문제들 정리 및 해설 (1) | 2023.12.08 |
방송통신대학교 프로그래밍 언어론 요약 정리 및 연습 문제 (0) | 2023.12.05 |
프로그래밍 언어의 평가 기준 (0) | 2023.10.09 |
메모리에 적재된 프로그램의 기계어 명령어 하나를 컴퓨터의 CPU가 수행하는 과정 (1) | 2023.10.09 |