절차적 프로그래밍
IT 위키
더 많은 작업
- 상위 문서: 정보처리기사/프로그래밍 언어 활용
- Procedural Programming
- 프로그램을 순서대로 실행되는 명령과 이를 묶은 프로시저(함수, 서브루틴)의 호출로 구성하는 프로그래밍 패러다임
- 명령형 프로그래밍의 한 갈래로, "어떻게(How)" 처리할지를 단계별로 기술한다.
- 큰 문제를 작은 프로시저로 나누는 하향식(Top-down) 설계와 순차·선택·반복의 구조적 제어 흐름을 사용한다.
- 데이터와 이를 처리하는 함수가 분리되어 있다.
- 순차적 실행: 명령이 작성된 순서대로 실행되며, 제어문(if, for, while)으로 흐름을 바꾼다.
- 모듈화: 반복되는 처리를 함수로 만들어 재사용한다. 관련 문서: 모듈
- 변수와 상태 변경: 대입문으로 변수의 값을 바꾸어 가며 결과를 만든다.
- 장점: 실행 흐름이 직관적이고 컴퓨터 동작 방식과 가까워 실행 속도가 빠르다.
- 단점: 데이터가 여러 함수에 공유되어 규모가 커질수록 유지보수와 재사용이 어렵다. 데이터 보호(은닉)가 약하다.
| 언어 | 특징 |
|---|---|
| FORTRAN | 1950년대 IBM에서 개발한 최초의 고급 언어 중 하나. 과학·수치 계산용 |
| COBOL | 사무·업무 처리용. 영어 문장과 비슷한 문법, 금융권 레거시 시스템에서 사용 |
| Pascal | 교육용 구조적 프로그래밍 언어. 강한 타입 검사 |
| C 언어 | 시스템 프로그래밍용. 포인터로 메모리 직접 접근, 이식성이 높음 |
| ALGOL, BASIC | 구조적·교육용 언어 |
| 구분 | 절차적 | 객체지향 | 함수형 | 선언형 |
|---|---|---|---|---|
| 기본 단위 | 프로시저(함수) | 객체(클래스) | 순수 함수 | 규칙·질의 |
| 관점 | 처리 순서(How) | 데이터와 행위의 결합 | 함수의 조합·평가 | 원하는 결과(What) |
| 상태 변경 | 변수 값 변경 | 객체 내부 상태 변경 | 불변 데이터 지향 | 기술하지 않음 |
| 핵심 개념 | 순차·선택·반복, 모듈화 | 캡슐화, 상속, 다형성 | 일급 함수, 고차 함수 | 선언적 명세 |
| 대표 언어 | C, Pascal, FORTRAN, COBOL | Java, C++, C#, Smalltalk | Haskell, LISP, Erlang | SQL, Prolog, HTML |
#include <stdio.h>
int sum(int n) { /* 1부터 n까지 합을 구하는 프로시저 */
int total = 0;
for (int i = 1; i <= n; i++)
total += i;
return total;
}
int main(void) {
printf("%d\n", sum(10)); /* 55 */
return 0;
}
- 같은 결과를 선언형으로 표현하면 SQL의
SELECT SUM(n) FROM t;처럼 처리 방법 없이 원하는 결과만 기술한다.
- 절차적 언어의 예(C, FORTRAN, COBOL, Pascal)와 객체지향 언어의 예(Java, C++, Smalltalk)를 구분한다.
- 절차적은 "How", 선언형은 "What"을 기술한다는 차이가 출제된다.
- 선언형 언어의 예로 SQL, Prolog, HTML, Haskell을 기억한다.