≣ 목차
파이썬 클래스는 객체 지향 프로그래밍(OOP)의 기본 요소로, 코드를 재사용 가능하고 효율적으로 관리할 수 있게 해줍니다. 클래스를 사용하면 데이터와 해당 데이터를 처리하는 코드를 하나로 묶을 수 있어 코드의 가독성과 유지 보수성을 크게 향상시킬 수 있습니다. 이번 글에서는 파이썬 클래스의 기본적인 사용법부터 고급 기능, 그리고 사람들이 자주 궁금해하는 내용까지 자세히 다뤄보겠습니다.
♛ 공지
본 포스팅의 무단도용 및 배포를 금지합니다.
1. 클래스란?
클래스는 객체를 정의하는 틀(template)입니다. 클래스를 통해 객체의 속성과 행동을 정의할 수 있습니다. 클래스는 객체의 구조와 행동을 정의하고, 해당 클래스를 기반으로 객체를 생성할 수 있습니다. 예를 들어, 자동차라는 클래스를 정의하면 다양한 개별 자동차 객체들을 만들 수 있습니다.
2. 클래스 정의하기
파이썬에서 클래스를 정의하려면 class 키워드를 사용합니다. 간단한 클래스를 정의하고 객체를 생성하는 예제를 보겠습니다.
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
def display_info(self):
print(f"{self.year} {self.make} {self.model}")
# 객체 생성
my_car = Car("Toyota", "Corolla", 2021)
my_car.display_info() # 2021 Toyota Corolla
위 예제에서 Car 클래스는 make, model, year 속성을 가지고 있으며, display_info라는 메서드를 통해 자동차 정보를 출력합니다.
3. __init__ 메서드
__init__ 메서드는 클래스의 생성자입니다. 객체가 생성될 때 자동으로 호출되며, 객체의 초기 상태를 설정하는 역할을 합니다. self는 생성된 객체 자신을 참조하는 매개변수입니다. 모든 인스턴스 메서드는 첫 번째 매개변수로 self를 받아야 합니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
person1 = Person("Alice", 25)
person1.greet() # Hello, my name is Alice and I am 25 years old.
4. 클래스 속성과 인스턴스 속성
- 클래스 속성: 클래스 자체에 공통으로 적용되는 속성입니다.
- 인스턴스 속성: 특정 객체에만 적용되는 속성입니다.
class Dog:
species = "Canis familiaris" # 클래스 속성
def __init__(self, name, age):
self.name = name # 인스턴스 속성
self.age = age # 인스턴스 속성
dog1 = Dog("Buddy", 3)
dog2 = Dog("Max", 5)
print(dog1.species) # Canis familiaris
print(dog2.species) # Canis familiaris
print(dog1.name) # Buddy
print(dog2.name) # Max
위 예제에서 species는 모든 Dog 객체가 공유하는 클래스 속성이고, name과 age는 각각의 인스턴스에 고유한 인스턴스 속성입니다.
5. 메서드 종류
- 인스턴스 메서드: 객체에서 호출하며, self를 첫 번째 매개변수로 받습니다.
- 클래스 메서드: 클래스 자체에서 호출하며, cls를 첫 번째 매개변수로 받습니다. @classmethod 데코레이터로 정의합니다.
- 정적 메서드: 클래스나 인스턴스와 관계없이 독립적으로 동작하는 메서드입니다. @staticmethod 데코레이터로 정의합니다.
class MathOperations:
@staticmethod
def add(a, b):
return a + b
@classmethod
def describe(cls):
return "This class contains basic math operations."
print(MathOperations.add(5, 3)) # 8
print(MathOperations.describe()) # This class contains basic math operations.
6. 상속 (Inheritance)
상속을 사용하면 기존 클래스의 기능을 확장할 수 있습니다. 부모 클래스의 속성과 메서드를 자식 클래스가 물려받습니다.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} makes a sound.")
class Dog(Animal):
def speak(self):
print(f"{self.name} barks.")
my_dog = Dog("Rex")
my_dog.speak() # Rex barks.
위 예제에서 Dog 클래스는 Animal 클래스를 상속받아 speak 메서드를 재정의(오버라이딩)합니다.
7. 다형성 (Polymorphism)
다형성은 동일한 인터페이스를 가진 여러 객체가 서로 다른 방식으로 동작할 수 있게 합니다. 같은 이름의 메서드가 객체에 따라 다르게 동작하는 것을 의미합니다.
class Cat(Animal):
def speak(self):
print(f"{self.name} meows.")
animals = [Dog("Rex"), Cat("Whiskers")]
for animal in animals:
animal.speak()
위 예제에서 speak() 메서드는 각각의 객체에 맞게 다르게 동작합니다.
8. 접근 제어자
파이썬은 변수의 접근 제어를 위해 이름 앞에 밑줄을 사용합니다.
- _: 암묵적으로 보호된 속성 (접근을 제한할 필요가 있지만 완전히 숨기지는 않음).
- __: 이름 맹글링(name mangling)으로, 외부에서 접근하기 어렵게 만듭니다.
class BankAccount:
def __init__(self, balance):
self._balance = balance # 보호된 속성
self.__account_number = "123-456-789" # 비공개 속성
account = BankAccount(1000)
print(account._balance) # 1000
# print(account.__account_number) # AttributeError 발생
9. 자주 궁금해하는 질문들
9.1. 클래스와 인스턴스의 차이점은 무엇인가요?
클래스는 객체의 청사진이며, 인스턴스는 이 청사진을 사용하여 생성된 구체적인 객체입니다. 예를 들어, Car는 클래스이고, 특정한 my_car는 Car 클래스의 인스턴스입니다.
9.2. self는 꼭 사용해야 하나요?
self는 인스턴스 메서드에서 해당 객체 자신을 참조하는 매개변수입니다. 이를 통해 각 인스턴스의 속성과 메서드를 구별할 수 있습니다. self는 파이썬의 규칙이므로 반드시 사용해야 합니다.
9.3. 클래스 메서드와 정적 메서드의 차이점은 무엇인가요?
- 클래스 메서드는 cls를 첫 번째 매개변수로 받아 클래스 자체에 접근할 수 있습니다.
- 정적 메서드는 클래스나 인스턴스와 독립적으로 동작하며, 어떤 매개변수도 특별히 받지 않습니다. 클래스와 관련된 유틸리티 기능을 제공할 때 유용합니다.
이번 글에서는 파이썬 클래스의 정의와 활용법, 객체 지향 프로그래밍의 주요 개념인 상속, 다형성, 접근 제어자에 대해 알아보았습니다. 클래스를 잘 이해하고 사용하면 코드의 재사용성과 유지 보수성을 높일 수 있습니다. 파이썬 클래스와 객체 지향 프로그래밍의 기본 개념을 이해하는 데 이 글이 도움이 되었길 바랍니다. 추가 질문이 있으면 언제든 문의해주세요.
'프로그래밍 > 파이썬(Python)' 카테고리의 다른 글
파이선(Python) from import: 심화편 (2) | 2024.10.15 |
---|---|
파이썬(Python) 함수, 모듈, 패키지: 완벽히 이해하기 (2) | 2024.10.15 |
파이썬(Python) 매직 메서드: 완벽 가이드 (+코드) (3) | 2024.10.15 |
파이썬(Python) Slicing: 완벽 가이드 (+코드) (2) | 2024.10.15 |
파이썬(Python) 버전 확인: 상황별 주요 모든 방법 (+코드) (2) | 2024.10.15 |