파이thon - 클래스와 객체

안녕하세요, 파이THON 프로그래머를 꿈꾸는 여러분! 오늘, 우리는 파이THON에서 객체지향 프로그래밍(OOP)의 세계로 흥미로운 여행을 떠날 거예요. 자리 잡고, 여러분이 코드에 대한 생각을 바꿀 거예요!

Python - Classes & Objects

파이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는 우리의 클래스입니다. namebreed와 같은 속성이 있으며, 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