"The only way to go fast, is to go well."
(빠르게 가는 유일한 방법은 잘 가는 것이다.)
- Robert C. Martin
절차지향 프로그래밍 (Procedural Programming)
개념
절차지향 프로그래밍은 프로그램을 일련의 절차나 함수로 구성하는 방법론이다.
프로그램은 시작부터 끝까지 순차적으로 실행되는 일련의 명령어로 이루어져 있다.
특징
- 함수 중심
- 프로그램은 함수의 호출과 절차적인 흐름으로 구성함
- 각 함수는 특정 작업을 수행함
- 전역 데이터
- 데이터는 주로 전역 변수를 통해 공유되며, 함수가 이 전역 데이터를 처리함
- 순차 실행
- 프로그램은 명령어를 순차적으로 실행함
- 모듈화
- 코드를 함수 단위로 분리하여 재사용성을 높이려고 함
- 하지만 데이터와 함수가 분리되어 있으므로 완전한 캡슐화는 어려움
객체 지향 프로그래밍 (Object-Oriented Programming)
개념
객체지향 프로그래밍(OOP)은 프로그램을 객체들의 집합으로 구성하고, 이들 객체 간의 상호작용을 통해 문제를 해결하는 방법론이다.
각각의 객체는 데이터와 그 데이터를 처리하는 메서드를 함께 묶어서 관리한다.
특징
- 클래스와 객체
- 클래스는 객체를 생성하기 위한 설계도이며, 객체는 클래스의 인스턴스임
- 추상화
- 중요한 부분만 모델링하고 세부 사항을 숨김
- 캡슐화
- 데이터와 메서드를 하나로 묶고, 외부에서의 데이터 접근을 제한함
- 상속
- 기존 클래스를 기방으로 새로운 클래스를 만드는 기능
- 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받아 재사용할 수 있음
- 다형성
- 동일한 메서드가 여러 형태로 동작할 수 있음
객체지향 프로그래밍과 절차지향 프로그래밍의 차이
위의 각 개념들을 비교해 보면 아래와 같이 정리할 수 있다.
- 객체 지향 프로그래밍: 프로그램을 객체들의 집합으로 구성하며, 데이터와 메서드를 묶어서 관리합니다.
- 절차 지향 프로그래밍: 프로그램을 함수의 목록으로 구성하며, 데이터와 절차를 분리하여 구현합니다.
특징들을 비교해 보면 아래와 같이 정리할 수 있다.
중심 개념
- 절차지향 프로그래밍
- 함수와 절차가 중심
- 객체지향 프로그래밍
- 객체와 클래스가 중심
데이터 관리
- 절차지향 프로그래밍
- 데이터는 주로 전역 변수로 관리되며, 함수는 이 적역 데이터를 수정함
- 객체지향 프로그래밍
- 데이터는 객체 내부에 캡슐화되며, 객체 간의 인터페이스를 통해 접근
재사용성과 확장성
- 절차지향 프로그래밍
- 재사용성을 높이기 위해 함수와 모듈을 사용하지만, 데이터와 함수가 분리되어 있어 캡슐화가 어려움
- 객체지향 프로그래밍
- 상속과 다형성을 통해 코드의 재사용성과 확장성을 높임
모델링 방식
- 절차지향 프로그래밍
- 문제를 함수와 절차로 분해
- 객체지향 프로그래밍
- 문제를 객체로 모델링하고, 객체 간의 상호작용으로 문제를 해결
예시 코드 | C# 객체지향 프로그래밍
using System;
//. GameCharacter 클래스
public class GameCharacter
{
public string Name { get; set; }
public int Health { get; set; }
//.# 공통 공격 메서드 구현
public virtual void Attack()
{
Console.WriteLine($"🥊캐릭터 {Name}이(가) 기본 공격을 합니다!");
}
}
//. Warrior 클래스 (GameCharacter클래스를 상속 받음)
public class Warrior : GameCharacter
{
public Warrior(string name)
{
Name = name;
Health = 100;
}
//.# 전사만의 공격 메서드 override
public override void Attack()
{
Console.WriteLine($"🥊전사 {Name}이(가) 칼을 휘두릅니다!");
}
}
class Program
{
static void Main()
{
Warrior warrior = new Warrior("김전사"); // 전사 객체 생성
warrior.Attack(); // 전사 공격 실행
}
}
예시 코드 | C++ 절차지향 프로그래밍
#include <iostream>
#include <string>
//. 전사의 공격 함수
void warriorAttack(const std::string& name)
{
std::cout << name << "가 칼을 휘두릅니다!🥊" << std::endl;
}
int main()
{
// 전사의 공격 호출
warriorAttack("김전사");
return 0;
}
각각의 프로그래밍 방식은 특정한 상황이나 요구에 따라 선택되어야 하며,
객체 지향 프로그래밍은 대규모, 복잡한 프로젝트에 유리하고, 절차 지향 프로그래밍은 간단하고 직관적인 문제 해결에 적합해 보인다!
'💾 Computer Science > Software Engineering' 카테고리의 다른 글
[CS/Design Pattern] GoF 디자인 패턴 정리 (0) | 2024.07.09 |
---|---|
[CS/OOP] 객체지향 설계의 5가지 기본 원칙 SOLID (0) | 2024.07.08 |
[CS/OOP] 객체지향 프로그래밍(OOP) 개념과 특징 (0) | 2024.07.06 |