프로그래밍에는 다양한 패러다임이 존재한다.
그 중 순차적 프로그래밍, 절차적 프로그래밍, 객체지향 프로그래밍은 가장 기본적이고 널리 사용되는 방식들이다.
그러나 ‘객체지향 프로그래밍(OOP)은 알겠는데, 순차적 프로그래밍과 절차적 프로그래밍 같은 거 아니야?’라고 생각하는 친구가 있어 이 세 가지 프로그래밍 패러다임의 특징과 차이점을 비교하는 글을 쓰게 되었다.
일단, 각 프로그래밍 패러다임에 대해서 간략히 설명하겠다.
1. 순차적 프로그래밍
특징
- 코드가 작성된 순서대로 실행되는 가장 단순한 형태의 프로그래밍.
- 모든 명령어가 하나의 흐름으로 구성되어 있어 구조화되지 않음.
- 소규모 프로그램에 적합하지만, 확장성과 유지보수성이 부족.
예제 (C)
#include <stdio.h>
int main() {
int a = 10;
int b = 20;
int sum = a + b;
printf("합계: %d\n", sum);
return 0;
}
2. 절차적 프로그래밍
특징
- 함수를 활용하여 코드를 구조화하고 모듈화하는 방식.
- 코드의 재사용성이 높아지고, 유지보수가 용이함.
- 조건문, 반복문 등을 통해 프로그램 흐름을 제어할 수 있어 대규모 프로그램 개발에 적합.
예제 (C)
#include <stdio.h>
// 함수 정의
int add(int x, int y) {
return x + y;
}
int main() {
int a = 10;
int b = 20;
printf("합계: %d\n", add(a, b));
return 0;
}
3. 객체지향 프로그래밍 (OOP)
특징
- 데이터와 메서드를 하나의 객체로 묶어 관리하는 방식.
- 클래스와 객체를 중심으로 설계하며, 상속, 캡슐화, 다형성 같은 개념을 활용.
- 복잡한 시스템을 설계하고 확장하는 데 매우 적합.
예제 (Python)
class Calculator:
def add(self, x, y):
return x + y
calc = Calculator()
print(f"합계: {calc.add(10, 20)}")
4. 세 가지 패러다임 비교
특징 | 순차적 프로그래밍 | 절차적 프로그래밍 | 객체지향 프로그래밍 |
---|---|---|---|
구조화 수준 | 비구조적 | 함수 중심으로 구조화 | 클래스와 객체 중심으로 고도로 구조화 |
재사용성 | 낮음 | 함수로 인해 재사용 가능 | 상속과 다형성을 통해 높은 재사용성 |
확장성 | 부족 | 대규모 프로그램에 적합 | 매우 높은 확장성 |
유지보수성 | 어렵고 비효율적 | 특정 함수만 수정 가능 | 캡슐화를 통해 유지보수 용이 |
데이터 관리 | 데이터와 코드가 혼재 | 데이터와 코드 분리 | 데이터와 메서드가 객체 내부에 캡슐화 |
예제 언어 | 초기 언어 (어셈블리어 등) | C, Python 등 | Java, Python, C++ 등 |
결론
- 순차적 프로그래밍: 가장 단순한 형태로 소규모 프로그램에 적합하지만, 확장성과 유지보수성이 부족하다.
- 절차적 프로그래밍: 함수를 활용해 구조화된 코드를 작성하며 대규모 프로그램 개발에도 적합하다.
- 객체지향 프로그래밍(OOP): 데이터를 객체로 묶고 상속, 다형성 등을 활용하여 복잡한 시스템을 효율적으로 설계할 수 있다.
각 패러다임은 목적과 상황에 따라 선택적으로 사용해야 한다.
요즘 개발 트렌드로 객체지향 프로그래밍이 가장 널리 사용되고 있다는 점만 참고하자.