CS/객체지향 프로그래밍

객체지향 프로그래밍과 절차지향 프로그래밍의 차이점

devrabbit22 2026. 4. 8. 18:55

객체지향 프로그래밍(Object-Oriented Programming)

개념

객체지향 프로그래밍(OOP)은 프로그램을 객체의 집합으로 구성하고, 이들 객체 간의 상호작용을 통해 문제를 해결하는 프로그래밍 방법론이다.

각각의 객체는 데이터(속성)와 그 데이터를 처리하는 메서드(동작)를 함께 묶어 관리한다.

 

특징

1. 클래스와 객체

  • 클래스는 객체를 생성하기 위한 설계도이며, 객체는 클래스에 의해 생성된 인스턴스(instance)이다.

2. 추상화 (Abstraction)

  • 객체의 중요한 속성과 동작만을 모델링하고 불필요한 세부 사항은 숨기는 것을 의미한다.

3. 캡슐화 (Encapsulation)

  • 데이터와 메서드를 하나의 객체로 묶고, 접근 제한자를 통해 외부에서 직접 접근하지 못하도록 보호하는 것이다.

4. 상속 (Inheritance)

  • 기존 클래스를 기반으로 새로운 클래스를 만드는 방식이다.
  • 자식 클래스는 부모 클래스의 속성과 메서드를 물려받아 재사용할 수 있다.

5. 다형성 (Polymorphism)

  • 같은 이름의 메서드가 객체의 타입에 따라 서로 다른 방식으로 동작할 수 있는 특징을 의미한다.

절차지향 프로그래밍(Procedural Programming)

개념

절차지향 프로그래밍은 프로그램을 일련의 절차나 함수 중심으로 구성하는 프로그래밍 방법론이다.

프로그램은 시작부터 끝까지 순차적으로 실행되는 명령어의 흐름으로 이루어져 있으며, 함수 호출을 통해 작업을 수행한다.

 

특징

1. 함수 중심

  • 프로그램은 함수의 호출과 절차적인 흐름으로 구성된다.
  • 각 함수는 특정 작업을 수행하며, 프로그램의 기능은 여러 함수가 순차적으로 실행되면서 이루어진다.

2. 전역 데이터

  • 데이터는 주로 전역 변수를 통해 공유되며, 함수는 이러한 전역 데이터를 처리하는 방식으로 동작한다.

3. 순차 실행

  • 프로그램은 명령어가 작성된 순서대로 실행되는 구조를 가진다.

4. 모듈화

  • 코드를 함수 단위로 분리하여 코드의 재사용성을 높이려고 한다.
  • 데이터와 함수가 분리되어 있기 때문에 객체지향 프로그래밍에서와 같은 캡슐화를 구현하기는 어렵다.

객체지향 프로그래밍과 절차지향 프로그래밍의 차이점 정리

구분 절차지향 프로그래밍 객체지향 프로그래밍
중심 개념 함수와 절차 객체와 클래스
데이터 관리 전역 변수 중심 객체 내부 캡슐화
재사용성 함수 재사용 상속과 다형성
문제 해결 방식 절차 중심
(문제를 함수와 절차로 분해하여 해)
객체 모델링
(문제를 객체로 모델링하고, 객체간의 상호작용으로 해결)

예시코드

C (절차지향)

더보기

데이터
monsterHp

함수
attack()

 

→ 데이터와 함수가 분리되어 있다.

#include <stdio.h>

void attack(int* monsterHp, int damage)
{
    *monsterHp -= damage;
    printf("몬스터에게 %d의 피해를 입혔습니다.\n", damage);
}

int main()
{
    int monsterHp = 100;
    int playerDamage = 20;

    attack(&monsterHp, playerDamage);

    printf("몬스터 남은 체력: %d\n", monsterHp);

    return 0;
}

C# (객체지향)

using System;

class Character
{
    public int hp;
    public int damage;

    public Character(int hp, int damage)
    {
        this.hp = hp;
        this.damage = damage;
    }

    public void Attack(Character target)
    {
        target.hp -= damage;
        Console.WriteLine($"{damage}의 피해를 입혔습니다.");
    }
}

class Program
{
    static void Main()
    {
        Character player = new Character(100, 20);
        Character monster = new Character(80, 10);

        player.Attack(monster);
    }
}

절차지향 프로그래밍에서는 데이터와 함수를 분리하여 프로그램을 구성한다. 반면 객체지향 프로그래밍에서는 데이터와 메서드를 하나의 객체로 묶어 관리한다.
이러한 구조 차이로 인해 객체지향 프로그래밍은 객체 간의 상호작용을 중심으로 프로그램이 구성된다.