순차적 프로그래밍: 컴퓨터 프로그래밍의 가장 기본적인 패러다임 중 하나로, 코드가 위에서 아래로 순서대로 실행되는 구조이다. 프로그램의 흐름이 명확하고 단순하며, 작은 규모의 프로그램을 작성할 때 유용하다.
특징
1. 위에서 아래로 흐르는 구조
- 코드가 작성된 순서대로 실행된다.
- 조건문이나 반복문이 없는 경우, 프로그램은 단순히 명령어를 순차적으로 처리한다.
2. 함수나 모듈화 개념이 없다
- 함수나 모듈화 개념이 없다.
- 모든 코드는 단일 흐름으로 작성된다.
3. 원시적 형태
- 어셈블리어와 같은 초기 언어에서 주로 사용되었다.
goto
나jmp
와 같은 명령어로 특정 위치로 이동하는 방식이 포함될 수 있다.
4. 직관적이고 단순함
- 코드가 간단해서 초보자에게 적합하다.
- 프로그램의 전체 흐름을 쉽게 이해할 수 있다.
장점
- 단순성: 복잡한 구조가 없어 이해하기 쉽다.
- 빠른 작성 가능: 소규모 프로그램을 빠르게 구현할 수 있다.
- 명확한 흐름: 코드의 실행 순서를 쉽게 파악할 수 있다.
단점
- 확장성 부족: 프로그램이 커질수록 유지보수와 수정이 어렵다.
- 재사용성 부족: 코드가 반복될 가능성이 높으며, 이를 줄이기 위한 함수나 모듈화 개념이 부재하다.
- 오류 발생 가능성: 순서에 의존하기 때문에 코드 실행 순서가 잘못되면 오류가 발생할 가능성이 크다.
예시
#include <stdio.h>
int main() {
int userInput;
// 사용자 입력 받기
printf("정수를 입력하세요: ");
scanf("%d", &userInput);
// 입력값 출력
printf("입력한 수: %d\n", userInput);
return 0;
}
위 코드는 입력값을 받고 출력하는 단순한 흐름으로 구성되어 있으며, 위에서 아래로 순차적으로 실행된다.
그렇다면, 절차적 프로그래밍과는 뭐가 다를까?
순차적 프로그래밍 vs 절차적 프로그래밍
- 순차적 프로그래밍: 단순히 명령어를 순서대로 실행하는 방식
- 절차적 프로그래밍: 함수(프로시저)를 활용하여 코드를 모듈화하고 재사용성을 높이는 방식.
즉, 절차적 프로그래밍은 순차적 프로그래밍의 발전된 형태라 볼 수 있다.
이 두 패러다임의 차이점을 표로 보기 쉽게 정리했다.
특징 | 순차적 프로그래밍 | 절차적 프로그래밍 |
---|---|---|
기본 개념 | 코드가 작성된 순서대로 위에서 아래로 실행됨 | 함수를 사용하여 프로그램을 구조화하고 모듈화함 |
구조화 수준 | 비구조적 (모든 코드가 하나의 흐름으로 작성됨) | 구조적 (코드를 함수나 블록으로 나눔) |
재사용성 | 코드 재사용이 어려움 | 함수나 프로시저를 통해 코드 재사용 가능 |
규모 | 소규모 프로그램에 적합 | 대규모 프로그램 개발에 적합 |
유지보수성 | 유지보수가 어렵고 수정 시 전체 코드를 변경해야 할 수 있음 | 유지보수가 용이하며, 특정 함수만 수정하면 됨 |
흐름 제어 | 순차적으로 실행되며, 흐름 제어가 제한적임 | 조건문, 반복문, 함수 호출 등을 통해 흐름 제어 가능 |
예제 언어 | 초기 언어 (어셈블리어 등) | C, Pascal, Python 등 대부분의 현대 언어 |
주요 차이점
(이라 쓰고 절차적 프로그래밍의 장점이라 읽는다 ㅎㅎ)
- 구조화와 모듈화
- 순차적 프로그래밍은 모든 명령이 하나의 흐름으로 작성되며, 코드가 길어질수록 복잡도가 증가한다.
- 절차적 프로그래밍은 함수를 사용해 코드를 모듈화하여 가독성과 유지보수성을 높인다.
2. 코드 재사용
- 순차적 프로그래밍에서는 동일한 작업을 반복할 경우 동일한 코드를 여러 번 작성해야 한다.
- 절차적 프로그래밍에서는 함수를 정의하여 동일한 작업을 반복적으로 호출할 수 있다.
3. 확장성
- 순차적 프로그래밍은 작은 규모의 프로그램에 적합하며, 확장성이 부족하다.
- 절차적 프로그래밍은 대규모 프로그램을 설계하고 확장하는 데 적합하다.
예제
- 순차적 프로그래밍 예제 (C)
#include <stdio.h>
int main() {
int a = 5;
int b = 10;
int sum = a + b;
printf("합계: %d\n", sum);
int c = 20;
int total = sum + c;
printf("최종 합계: %d\n", total);
return 0;
}
모든 작업이 순서대로 진행되며, 중복된 작업(합계 계산)이 반복된다.
- 절차적 프로그래밍 예제 (C)
#include <stdio.h>
// 함수 정의
int add(int x, int y) {
return x + y;
}
int main() {
int a = 5;
int b = 10;
int sum = add(a, b);
printf("합계: %d\n", sum);
int c = 20;
int total = add(sum, c);
printf("최종 합계: %d\n", total);
return 0;
}
add
라는 함수를 정의하여 중복된 작업을 줄이고 코드 재사용성을 높였다.
결론
- 순차적 프로그래밍은 단순하고 직관적인 방식으로 소규모 프로그램에 적합하지만 확장성과 유지보수성이 부족하다.
- 절차적 프로그래밍은 함수와 모듈화를 통해 복잡한 문제를 해결하기 쉽고 대규모 프로그램 개발에 적합하다.