3. 명령형 - 절차 지향 프로그래밍
절차 지향 방식의 특징은 함수를 통해 코드를 논리적인 단위로 구분하고 분할해서 정복해나가자는 것으로, 함수를 중심으로 프로그램을 설계하여 코드를 작성함
절차 지향 방식으로 작성하는 대표적인 프로그래밍 언어는 C (인간이 이해하기 쉬운 자연어 기준)
1. 주문/결제 프로그램 설계 시나리오
실제 점원이 수행하던 주문/결제 방식을 프로그램을 통해 자동화하기 위해 작성한 시퀀스 다이어그램 예시
C로 작성한 주문/결제를 수행하는 프로그램 코드
#include <stdio.h>
// 메뉴 선택 함수
int menuSelection() {
int menu;
printf("메뉴를 선택하세요 (1. 김밥 - 3000원, 2. 라면 - 4000원): ");
scanf("%d", &menu);
return menu;
}
// 비용 계산 함수
int calculatePrice(int menu) {
if (menu == 1) return 3000;
else if (menu == 2) return 4000;
else return 0;
}
// 주문 처리 함수
void takeOrder(int* selectedMenu, int* totalPrice) {
*selectedMenu = menuSelection();
*totalPrice = calculatePrice(*selectedMenu);
if (*totalPrice == 0) {
printf("잘못된 메뉴입니다.\n");
} else {
printf("주문 완료. 총 금액은 %d원입니다.\n", *totalPrice);
}
}
// 결제 처리 함수
void processPayment(int price) {
int paid;
printf("결제 금액을 입력하세요: ");
scanf("%d", &paid);
if (paid >= price) {
printf("결제가 완료되었습니다. 거스름돈: %d원\n", paid - price);
} else {
printf("결제 실패: 금액이 부족합니다.\n");
}
}
// 프로그램 진입점
int main() {
int selectedMenu = 0;
int totalPrice = 0;
// 함수를 순차적으로 호출
takeOrder(&selectedMenu, &totalPrice);
if (totalPrice > 0) {
processPayment(totalPrice);
}
return 0;
}1-1. 절차 지향 방식의 특징
절차 지향 방식을 적용할만한 시나리오는 다음과 같음
- 임베디드 시스템과 같이 요구사항이 명확하고, 요구사항이 변경될 가능성이 적은 경우,
- 특정한 기능을 수행하는 작은 독립적 모듈이 많고, 굳이 객체 간의 복잡한 상호작용이 필요 없는 경우,
ex. 센서에서 온도 값을 읽고, 특정 임계값을 넘으면 모터를 켜는 작업
→ 온도 센서는 센서일 뿐, 다른 객체와 복잡하게 메시지를 주고받을 필요가 없음
단순히 readTemperature()와 같은 함수 하나로 충분할 수 있음
1-2. 절차 지향 방식의 단점
우리가 살고 있는 현실 세계는 수많은 사람들과 다양한 물건들,
심지어 감정과 같은 추상적인 개념과 물 분자와 같이 육안으로는 보이지 않는 개념들로 구성되어 있음
또한 이러한 모든 것들은 상호작용을 하며 서로 협력하여 동작함
그 과정 속에서 우리가 작성한 프로그램은 자동화(Automation)라는 핵심 특성을 통해 사람들에게 보다 윤택한 삶을 제공할 수 있음
과거에 비해 현실의 비즈니스 요구사항은 폭발적으로 증가하고 지속적으로 변화하며, 그에 따라 이해 관계가 상당히 복잡하게 얽혀있음
택시를 탑승하는 시나리오
이전 - 택시 호출 프로그램(이 있었다고 가정)
가고 싶은 목적지, 출발 일정 등을 선택 후 전송하면 해당 시간에 택시가 도착
승객과 택시 기사는 예약 과정 중간에 소통을 하거나 메시지를 주고받는 기능을 제공하지 않음
최근 - 카카오 택시
가고 싶은 목적지, 목적지에 도달하는 네비게이션 루트, 희망하는 차량 종류, 기사님과 메시지나 전화를 통해 대화를 주고받을 수 있어야 하는 등
기사님과 승객 간의 다양한 상호작용이 필요
이처럼 사용자 대상의 비즈니스에 있어서 택시 호출 프로그램과 같이 단순한 규모의 프로그램은 C 언어로 작성해도 괜찮을 수 있지만,
카카오 택시와 같이 택시 기사와 승객이 서로 협력하여 동작해야 하는 수많은 비즈니스 요구사항들을 C 언어로 구현하는 것은 코드의 가독성과 유지보수성에서 한계에 직면할 수 있음