파이썬 객체 지향 프로그래밍(OOP) 완벽 정리
프로그래밍 패러다임 중 하나인 **객체 지향 프로그래밍(Object-Oriented Programming, OOP)**은 **객체(Object)와 클래스(Class)**를 사용하여 코드를 구조화하는 방법입니다. 파이썬도 객체 지향 언어로, 클래스와 객체를 사용하여 프로그램을 만들 수 있습니다. 이번 글에서는 파이썬의 OOP 개념과 활용법을 배워보겠습니다.
1. 클래스(Class)와 객체(Object)란?
1.1 클래스(Class)란?
클래스는 객체를 생성하기 위한 설계도입니다. 예를 들어, 자동차라는 클래스가 있다면, 특정한 내 차는 그 클래스에서 만들어진 객체입니다.
1.2 객체(Object)란?
**객체는 클래스에서 생성된 실체(Instance)**입니다. 객체는 클래스에서 정의한 **속성(변수)과 행동(메서드)**을 가집니다.
2. 클래스 정의와 객체 생성
2.1 클래스 정의
클래스를 만들려면 class 키워드를 사용합니다.
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def drive(self):
print(f"{self.brand} {self.model}이(가) 달립니다!")
2.2 객체 생성
클래스를 기반으로 객체를 생성하려면 아래와 같이 사용합니다.
my_car = Car("Hyundai", "Sonata")
print(my_car.brand) # Hyundai
print(my_car.model) # Sonata
my_car.drive() # Hyundai Sonata이(가) 달립니다!
3. 생성자 (__init__ 메서드)
생성자는 객체가 생성될 때 자동으로 실행되는 메서드입니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("홍길동", 25)
print(p.name) # 홍길동
print(p.age) # 25
4. 인스턴스 변수와 클래스 변수
4.1 인스턴스 변수
- 객체마다 개별적으로 관리되는 변수
- self.변수명 형태로 사용
class Dog:
def __init__(self, name):
self.name = name # 인스턴스 변수
dog1 = Dog("바둑이")
dog2 = Dog("초코")
print(dog1.name) # 바둑이
print(dog2.name) # 초코
4.2 클래스 변수
- 모든 객체가 공유하는 변수
- 클래스명.변수명 형태로 사용
class Dog:
species = "포유류" # 클래스 변수
dog1 = Dog()
dog2 = Dog()
print(dog1.species) # 포유류
print(dog2.species) # 포유류
5. 메서드 (Method)
5.1 인스턴스 메서드
객체가 사용하는 메서드이며, self를 첫 번째 매개변수로 받습니다.
class Cat:
def __init__(self, name):
self.name = name
def meow(self):
print(f"{self.name}이(가) 야옹!")
cat = Cat("나비")
cat.meow() # 나비이(가) 야옹!
5.2 클래스 메서드
클래스 변수를 변경할 때 사용하며, @classmethod 데코레이터와 cls 매개변수를 사용합니다.
class Animal:
count = 0
def __init__(self):
Animal.count += 1
@classmethod
def get_count(cls):
return cls.count
a1 = Animal()
a2 = Animal()
print(Animal.get_count()) # 2
5.3 정적 메서드
클래스와 관계없이 독립적으로 실행되는 메서드입니다. @staticmethod를 사용하며 self나 cls가 필요하지 않습니다.
class Math:
@staticmethod
def add(a, b):
return a + b
print(Math.add(3, 5)) # 8
6. 상속(Inheritance)
상속을 사용하면 기존 클래스를 확장하여 새로운 클래스를 만들 수 있습니다.
class Animal:
def speak(self):
print("소리를 냅니다.")
class Dog(Animal):
def speak(self):
print("멍멍!")
dog = Dog()
dog.speak() # 멍멍!
6.1 super() 사용
부모 클래스의 메서드를 자식 클래스에서 사용하고 싶을 때 super()를 활용합니다.
class Parent:
def show(self):
print("부모 클래스")
class Child(Parent):
def show(self):
super().show() # 부모 클래스의 메서드 호출
print("자식 클래스")
c = Child()
c.show()
출력:
부모 클래스
자식 클래스
7. 캡슐화 (Encapsulation)
캡슐화는 데이터 보호를 위해 사용됩니다.
- _변수명: 암묵적(private) (외부에서 직접 접근하지 않는 것이 권장됨)
- __변수명: 완전 private (클래스 외부에서 접근 불가)
class BankAccount:
def __init__(self, balance):
self.__balance = balance # private 변수
def get_balance(self):
return self.__balance # getter 메서드
account = BankAccount(1000)
print(account.get_balance()) # 1000
8. 다형성 (Polymorphism)
같은 메서드를 다른 클래스에서 다르게 구현할 수 있습니다.
class Bird:
def speak(self):
print("짹짹!")
class Dog:
def speak(self):
print("멍멍!")
animals = [Bird(), Dog()]
for animal in animals:
animal.speak()
출력:
짹짹!
멍멍!
9. 결론
이번 글에서는 파이썬의 객체 지향 프로그래밍(OOP) 개념과 활용 방법을 배웠습니다.
✅ 클래스와 객체: 클래스를 설계도 삼아 객체 생성
✅ 인스턴스 변수 vs 클래스 변수: 개별 vs 공유
✅ 메서드 종류: 인스턴스, 클래스, 정적 메서드
✅ 상속과 다형성: 기존 기능 확장 및 다양성 구현
✅ 캡슐화: 데이터 보호
다음 글에서는 파이썬의 모듈과 패키지 활용법에 대해 알아보겠습니다! 🚀
'BIG DATA > PYTHON' 카테고리의 다른 글
[PYTHON] 데이터 분석을 위한 파이썬 라이브러리: NumPy와 Pandas 기초 (0) | 2025.02.22 |
---|---|
[PYTHON] 파이썬 모듈과 패키지 완벽 정리 (0) | 2025.02.22 |
[PYTHON] 파이썬 기초: 파일 입출력과 예외 처리 완벽 정리 (0) | 2025.02.21 |
[PYTHON] 파이썬 기초: 함수(Function) 완벽 정리 (0) | 2025.02.21 |
[PYTHON] 파이썬 기초: 리스트, 튜플, 딕셔너리 완벽 정리 (1) | 2025.02.21 |