십대를 위한 코딩/십대를 위한 파이썬

객체 지향 프로그래밍(OOP)과 절차적 프로그래밍의 차이점

forSilver 2025. 2. 12. 15:11
반응형

🔍 객체 지향 프로그래밍(OOP)과 절차적 프로그래밍의 차이점

프로그래밍 패러다임에는 여러 가지가 있지만, 대표적으로 **절차적 프로그래밍(Procedural Programming)**과 **객체 지향 프로그래밍(Object-Oriented Programming, OOP)**이 있습니다. 이 두 가지는 코드를 구성하고 실행하는 방식이 다릅니다.


✅ 1. 절차적 프로그래밍 (Procedural Programming)

🔹 코드를 순차적으로 실행하는 방식
🔹 데이터를 중심으로 **함수(프로시저)**를 만들어 필요한 작업을 수행
🔹 프로그램의 흐름을 따라 순차적으로 실행되며, 함수 호출을 통해 모듈화 가능

특징

명령어 기반: 명령어를 순차적으로 실행하는 방식
함수 중심: 데이터를 처리하는 함수(프로시저)를 사용
상태 공유: 전역 변수 또는 함수 인자를 통해 데이터를 공유
코드 재사용 어려움: 동일한 기능이 필요한 경우 중복 코드가 발생할 가능성이 높음

📌 예제 (절차적 프로그래밍)

# 학생 성적을 관리하는 절차적 프로그래밍 방식
def get_sum(korean, math, english, science):
    return korean + math + english + science

def get_average(total):
    return total / 4

# 학생 데이터 (리스트로 관리)
students = [
    ("윤인성", 87, 98, 88, 95),
    ("김현정", 92, 98, 96, 98),
]

# 학생 성적 출력
for student in students:
    name, korean, math, english, science = student
    total = get_sum(korean, math, english, science)
    avg = get_average(total)
    print(f"이름: {name}, 총점: {total}, 평균: {avg:.2f}")

🏆 절차적 프로그래밍 단점

❌ 데이터와 함수를 별도로 관리해야 하므로 유지보수가 어렵다.
❌ 코드가 길어지면 구조가 복잡해지고, 중복 코드가 발생할 가능성이 높다.
❌ 프로그램 확장이 어렵다.


✅ 2. 객체 지향 프로그래밍 (OOP, Object-Oriented Programming)

🔹 데이터(객체)와 이를 처리하는 기능(메서드)을 하나의 단위로 묶는 방식
🔹 코드의 재사용성과 확장성이 뛰어나며, 유지보수가 용이함

특징

객체 중심: 데이터를 포함하는 객체를 정의하고, 객체가 동작을 수행
캡슐화(Encapsulation): 객체 내부의 데이터를 보호하고, 메서드를 통해 조작
상속(Inheritance): 기존 클래스의 기능을 물려받아 새로운 클래스를 생성
다형성(Polymorphism): 같은 인터페이스에서 다른 방식으로 동작 가능

📌 예제 (객체 지향 프로그래밍)

# 학생 성적을 관리하는 객체 지향 프로그래밍 방식
class Student:
    def __init__(self, name, korean, math, english, science):
        self.name = name
        self.korean = korean
        self.math = math
        self.english = english
        self.science = science

    def get_sum(self):
        return self.korean + self.math + self.english + self.science

    def get_average(self):
        return self.get_sum() / 4

    def __str__(self):
        return f"이름: {self.name}, 총점: {self.get_sum()}, 평균: {self.get_average():.2f}"

# 객체 생성
students = [
    Student("윤인성", 87, 98, 88, 95),
    Student("김현정", 92, 98, 96, 98),
]

# 학생 정보 출력
for student in students:
    print(student)

🏆 객체 지향 프로그래밍 장점

✅ 데이터와 기능을 하나의 객체로 묶어 재사용성이 높다
✅ 유지보수와 확장성이 뛰어나며, 코드의 가독성이 좋아진다
✅ 상속을 통해 기능을 확장하기 용이하다


🔥 절차적 프로그래밍 vs 객체 지향 프로그래밍 비교

비교 항목 절차적 프로그래밍 객체 지향 프로그래밍

구조 명령어를 순차적으로 실행 객체(데이터 + 메서드) 중심
데이터 관리 전역 변수, 함수 매개변수 사용 클래스 내부 속성으로 관리 (캡슐화)
코드 재사용 함수 단위로 재사용 가능 클래스, 상속 등을 통해 재사용
확장성 코드 수정이 어렵고, 중복 발생 가능 상속과 다형성을 활용하여 확장 가능
유지보수 프로그램이 커질수록 복잡도가 증가 모듈화가 잘 되어 유지보수 용이

🎯 결론

작은 프로젝트에서는 절차적 프로그래밍이 간단하고 직관적이지만,
규모가 커질수록 객체 지향 프로그래밍이 유지보수 및 확장성 측면에서 훨씬 유리하다.

➡ **객체 지향 프로그래밍(OOP)**을 활용하면 코드의 재사용성, 확장성, 유지보수성을 높일 수 있다! 🚀