파이thon - 클래스와 객체
안녕하세요, 파이THON 프로그래머를 꿈꾸는 여러분! 오늘, 우리는 파이THON에서 객체지향 프로그래밍(OOP)의 세계로 흥미로운 여행을 떠날 거예요. 자리 잡고, 여러분이 코드에 대한 생각을 바꿀 거예요!
파이THON에서 클래스란 무엇인가요?
가상의 동물원을 만드는 것을 상상해봅시다. 각 동물을 처음부터 만드는 것은 아니겠죠? 그럴 때 클래스가 유용해지죠!
파이THON의 클래스는 객체를 만들기 위한 청사진이나 템플릿입니다. 그것은 해당 클래스의 객체가 가질 속성과 메서드 집합을 정의합니다.
간단한 강아지를 나타내는 클래스를 만들어 봅시다:
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
print(f"{self.name} says Woof!")
이 예제에서, Dog
는 우리의 클래스입니다. name
과 breed
와 같은 속성이 있으며, bark()
라는 메서드가 있습니다.
파이THON에서 클래스 만들기
클래스를 만드는 것은 class
키워드 뒤에 클래스 이름을 사용하는 것만으로도 매우 간단합니다. 더 자세한 Car
클래스를 만들어 봅시다:
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer = 0
def drive(self, distance):
self.odometer += distance
print(f"Drove {distance} miles. Total: {self.odometer} miles")
def honk(self):
print("Beep beep!")
여기서, __init__
는 생성자라는 특별한 메서드입니다. 이 클래스의 새로운 객체를 만들 때 호출됩니다.
객체란 무엇인가요?
클래스가 청사진이라면, 객체는 그 청사진으로 만들어진 실제 "것"입니다. 그것은 클래스의 특정 인스턴스입니다.
파이THON에서 클래스 객체 만들기
객체를 만드는 것은 (인스턴스화라고도 함) 청사진을 사용하여 무엇인가를 실제로 만드는 것과 같습니다. 몇 대의 자동차를 만들어 봅시다:
my_car = Car("Toyota", "Corolla", 2020)
your_car = Car("Honda", "Civic", 2019)
print(my_car.make) # 출력: Toyota
your_car.drive(50) # 출력: Drove 50 miles. Total: 50 miles
my_car.honk() # 출력: Beep beep!
각 자동차는 자신만의 속성과 메서드 집합을 가진 별도의 객체입니다.
파이THON에서 객체의 속성에 접근하기
점 표기법을 사용하여 객체의 속성에 접근할 수 있습니다. 우리의 자동차를 살펴보겠습니다:
print(f"My car is a {my_car.year} {my_car.make} {my_car.model}")
# 출력: My car is a 2020 Toyota Corolla
파이THON의 내장 클래스 속성
파이THON 클래스는 내장 속성을 가지고 있습니다. 그것들을 탐험해 봅시다:
class MyClass:
x = 5
print(MyClass.__name__) # 출력: MyClass
print(MyClass.__module__) # 출력: __main__
print(MyClass.__dict__) # 출력: {'__module__': '__main__', 'x': 5, ...}
파이THON 데이터형의 내장 클래스
알고 계신가요? 파이THON의 기본 데이터형도 객체입니다. 그것을 확인해 봅시다:
print(type(5)) # 출력: <class 'int'>
print(type("Hello")) # 출력: <class 'str'>
print(type([1, 2, 3])) # 출력: <class 'list'>
파이THON에서는 모든 것이 객체입니다!
파이THON에서 가비지 수거(객체 파괴)
파이THON에서는 객체를 수동으로 파괴할 필요가 없습니다. 파이THON의 가비지 수거기가 객체가 더 이상 사용되지 않을 때 자동으로 처리합니다.
import gc
# 객체 생성
my_car = Car("Toyota", "Corolla", 2020)
# 참조 제거
my_car = None
# 가비지 수거 강제 (보통 필요하지 않음)
gc.collect()
파이THON에서 데이터 숨기기
OOP에서는 특정 속성에 접근을 제어하고 싶을 때가 많습니다. 파이THON은 언더스코어를 접두사로 사용하는 관행을 따릅니다:
class BankAccount:
def __init__(self, balance):
self._balance = balance # 보호된 속성
self.__secret = "shh" # 비밀 속성
def deposit(self, amount):
self._balance += amount
def get_balance(self):
return self._balance
account = BankAccount(1000)
print(account._balance) # 출력: 1000 (하지만 이렇게 하지 말아야 합니다!)
print(account.__secret) # 이는 AttributeError를 일으킬 것입니다
다음은 우리가 다룬 메서드를 요약한 표입니다:
메서드 | 설명 |
---|---|
__init__(self, ...) |
생성자 메서드, 새로운 객체를 생성할 때 호출됩니다 |
__str__(self) |
객체의 문자열 표현을 반환합니다 |
__repr__(self) |
객체의 자세한 문자열 표현을 반환합니다 |
__len__(self) |
내장 len() 함수의 동작을 정의합니다 |
__getitem__(self, key) |
인덱싱 연산의 동작을 정의합니다 |
__setitem__(self, key, value) |
인덱싱 할당의 동작을 정의합니다 |
그리고 이렇게 하세요! 여러분은 파이THON에서 객체지향 프로그래밍의 세계로 첫 걸음을 내딛었습니다. 기억하세요, 연습이 법치라는 말이 있습니다. 여러분만의 클래스와 객체를 만들어 보고, 곧 복잡하고 효율적인 프로그램을 전문가처럼 구축할 수 있을 거예요!
Credits: Image by storyset