새롭게 시작하는 객체지향 시리즈 입니다. 총 다섯편으로 구성할 계획입니다. 그럼 시작해볼까요?
1. 객체지향 프로그래밍(OOP)이란?
객체지향 프로그래밍(Object-Oriented Programming, OOP)은 현실 세계의 개념을 프로그래밍에 적용하는 방식입니다. 프로그램을 구성하는 요소를 **객체(Object)**로 표현하며, 이러한 객체들이 서로 상호작용하며 동작하는 구조를 가집니다.
✅ 객체(Object)란?
- 객체는 **속성(데이터, 변수)**과 **동작(메서드, 함수)**을 포함하는 독립적인 개체입니다.
- 예: "자동차" 객체는 색상, 브랜드 등의 속성을 가지며, 가속, 정지 등의 동작을 수행할 수 있습니다.
✅ 클래스(Class)란?
- 클래스는 객체를 만들기 위한 설계도입니다.
- 예: "자동차"라는 클래스가 있다면, 현대, BMW 등의 자동차 객체를 만들 수 있습니다.
✅ OOP의 특징 (4대 원칙)
- 캡슐화(Encapsulation): 데이터를 보호하고, 객체 내부의 변수를 외부에서 직접 접근하지 못하게 합니다.
- 상속(Inheritance): 기존 클래스를 확장하여 새로운 클래스를 만들 수 있습니다.
- 다형성(Polymorphism): 같은 이름의 메서드가 여러 형태로 동작할 수 있습니다.
- 추상화(Abstraction): 불필요한 정보를 숨기고, 중요한 정보만 노출합니다.
2. 클래스와 객체 만들기 (예제)
🔹 클래스 정의 및 객체 생성
class Car:
def __init__(self, brand, color):
self.brand = brand # 속성 (Attribute)
self.color = color # 속성 (Attribute)
def drive(self):
return f'{self.color} {self.brand} 자동차가 달립니다!'
# 객체 생성
car1 = Car("Hyundai", "Red")
car2 = Car("BMW", "Blue")
# 메서드 호출
print(car1.drive())
print(car2.drive())
🖥 실행 결과
Red Hyundai 자동차가 달립니다!
Blue BMW 자동차가 달립니다!
위 예제에서 Car 클래스는 brand와 color 속성을 가지고 있으며, drive() 메서드를 통해 자동차가 달리는 동작을 수행합니다.
3. 캡슐화(Encapsulation): 데이터 보호
캡슐화는 객체 내부의 변수를 외부에서 직접 접근하지 못하도록 제한하는 개념입니다. 이를 통해 데이터가 함부로 변경되는 것을 방지할 수 있습니다.
🔹 예제: private 변수 사용하기
class BankAccount:
def __init__(self, owner, balance):
self.owner = owner
self.__balance = balance # private 변수 (__) 사용
def deposit(self, amount):
self.__balance += amount
return f'{amount}원이 입금되었습니다. 현재 잔액: {self.__balance}원'
def withdraw(self, amount):
if amount > self.__balance:
return '잔액 부족!'
self.__balance -= amount
return f'{amount}원이 출금되었습니다. 현재 잔액: {self.__balance}원'
def get_balance(self):
return f'현재 잔액: {self.__balance}원'
# 객체 생성
account = BankAccount("Kim", 10000)
print(account.deposit(5000))
print(account.withdraw(12000))
print(account.get_balance())
🖥 실행 결과
5000원이 입금되었습니다. 현재 잔액: 15000원
12000원이 출금되었습니다. 현재 잔액: 3000원
현재 잔액: 3000원
🔹 __balance 변수 앞에 __를 붙이면 외부에서 직접 접근할 수 없게 됩니다. 이는 캡슐화를 위한 방법 중 하나입니다.
4. 상속(Inheritance): 코드 재사용성
상속을 사용하면 기존 클래스의 기능을 확장하여 새로운 클래스를 만들 수 있습니다.
🔹 예제: Animal 클래스를 상속하는 Dog 클래스
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
return "소리를 냅니다."
class Dog(Animal): # Animal 클래스를 상속
def make_sound(self):
return "멍멍!"
# 객체 생성
dog = Dog("바둑이")
print(dog.name) # 부모 클래스의 속성
print(dog.make_sound()) # 오버라이딩된 메서드
🖥 실행 결과
바둑이
멍멍!
5. 추상화(Abstraction): 공통적인 인터페이스 제공
추상화는 구체적인 세부 구현을 감추고, 공통된 인터페이스만 제공하는 개념입니다.
파이썬에서 추상화를 구현하려면 abc 모듈을 사용해야 합니다.
🔹 예제: 추상 클래스 사용하기
from abc import ABC, abstractmethod
class Animal(ABC): # ABC를 상속받아 추상 클래스로 정의
@abstractmethod
def make_sound(self):
pass
class Dog(Animal):
def make_sound(self):
return "멍멍!"
class Cat(Animal):
def make_sound(self):
return "야옹!"
# 객체 생성
dog = Dog()
cat = Cat()
print(dog.make_sound())
print(cat.make_sound())
🖥 실행 결과
멍멍!
야옹!
🔹 ABC는 추상 클래스를 정의하기 위한 클래스이며, @abstractmethod는 반드시 하위 클래스에서 구현해야 하는 메서드를 의미합니다.
🎯 마무리
객체지향 프로그래밍(OOP)은 코드의 재사용성을 높이고, 유지보수를 쉽게 해주는 강력한 패러다임입니다. 다음 편에서는 클래스와 객체를 더욱 깊이 있게 다루겠습니다! 🚀
혼자 공부하는 파이썬:1:1 과외하듯 배우는 프로그래밍 자습서 - 프로그래밍 언어 | 쿠팡
현재 별점 4.8점, 리뷰 198개를 가진 혼자 공부하는 파이썬:1:1 과외하듯 배우는 프로그래밍 자습서! 지금 쿠팡에서 더 저렴하고 다양한 프로그래밍 언어 제품들을 확인해보세요.
www.coupang.com
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
'파이썬 > [객체지향 시리즈!]' 카테고리의 다른 글
📌 5. OOP 실전 프로젝트: 간단한 도서 관리 시스템 개발 (0) | 2025.02.07 |
---|---|
📌 4. 캡슐화와 추상화: 데이터 보호와 인터페이스 설계 (2) | 2025.02.06 |
📌 3. 상속과 다형성: 코드 재사용성과 확장성 높이기 (0) | 2025.02.05 |
📌 2. 파이썬 클래스와 객체: 기본 개념과 활용 (0) | 2025.02.04 |
댓글