🔍 객체 지향 프로그래밍(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)**을 활용하면 코드의 재사용성, 확장성, 유지보수성을 높일 수 있다! 🚀
'십대를 위한 코딩 > 십대를 위한 파이썬' 카테고리의 다른 글
파이썬 셸(Python Shell, REPL)과 IDLE 에디터(IDLE, Integrated Development and Learning Environment) (1) | 2025.02.14 |
---|---|
객체(Object)와 인스턴스(Instance)의 차이점 (1) | 2025.02.13 |
[파이썬] 클래스와 객체(Class & Object) (1) | 2025.02.11 |
[파이썬] range() 함수 (0) | 2025.02.10 |
[파이썬] default 인수와 keyword 인수 정리 (2) | 2025.02.07 |