본문 바로가기
Python/문법

[Python] 파이썬 클래스 사용법 (+ 상속, 다형성)

by 에파 2024. 8. 3.
728x90

파이썬 클래스는 객체 지향 프로그래밍의 핵심 개념입니다. 클래스를 사용하면 데이터와 해당 데이터를 처리하는 코드를 하나의 논리적 단위로 묶을 수 있습니다. 이번 글에서는 클래스의 기본 개념과 사용법, 다양한 기능들에 대해 설명하겠습니다.

 

1. 클래스란?

클래스는 객체를 생성하기 위한 설계도입니다. 클래스는 속성(데이터)과 메서드(함수)를 포함할 수 있습니다. 클래스를 사용하면 여러 객체를 효율적으로 생성하고 관리할 수 있습니다.

 

class Dog:
    # 초기화 메서드
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 메서드
    def bark(self):
        return f"{self.name} is barking."

# 객체 생성
my_dog = Dog("Buddy", 3)

# 메서드 호출
print(my_dog.bark())

# 출력 결과:
# Buddy is barking.

 

위 코드에서는 'Dog'라는 클래스를 정의하고, 'name'과 'age'라는 속성을 초기화하는 '__init__' 메서드와 'bark' 메서드를 포함하고 있습니다. 'my_dog' 객체를 생성하고 'bark' 메서드를 호출하여 결과를 출력하고 있습니다.

 

'self'는 클래스의 인스턴스를 나타내는 예약어입니다.

 

'__init__'은 클래스의 인스턴스를 생성할 때 호출되는 함수입니다. 코드의 12번 째 라인에서 'Dog("Buddy", 3)' 이라는 코드로 객체가 생성됐고, 자동으로 '__init__' 함수가 실행됩니다.

 

2. 클래스와 인스턴스

클래스는 설계도이고, 인스턴스는 그 설계도를 바탕으로 생성된 실제 객체입니다. 여러 개의 인스턴스를 생성할 수 있으며, 각 인스턴스는 독립적인 상태를 가집니다.

 

dog1 = Dog("Buddy", 3)
dog2 = Dog("Molly", 5)

print(dog1.bark())  # 출력 결과: Buddy is barking.
print(dog2.bark())  # 출력 결과: Molly is barking.

 

위 코드에서는 'Dog' 클래스의 두 인스턴스를 생성하고, 각 인스턴스의 'bark' 메서드를 호출합니다.

 

3. 클래스 속성과 인스턴스 속성

클래스 속성은 모든 인스턴스가 공유하는 속성이고, 인스턴스 속성은 각 인스턴스마다 고유한 속성입니다.

 

class Dog:
    # 클래스 속성
    species = "Canis familiaris"

    def __init__(self, name, age):
        # 인스턴스 속성
        self.name = name
        self.age = age

dog1 = Dog("Buddy", 3)
dog2 = Dog("Molly", 5)

print(Dog.species)  # 출력 결과: Canis familiaris
print(dog1.species)  # 출력 결과: Canis familiaris
print(dog2.species)  # 출력 결과: Canis familiaris

 

위 코드에서는 'species' 라는 클래스 속성을 정의하고, 이를 통해 모든 'Dog' 인스턴스가 같은 값을 공유합니다.

 

4. 메서드 종류

클래스 내에는 여러 종류의 메서드가 있습니다. 일반 메서드, 클래스 메서드, 정적 메서드가 그 예입니다.

 

일반 메서드

일반 메서드는 첫 번째 매개변수로 항상 인스턴스 자신을 가리키는 'self'를 받습니다.

클래스 메서드

클래스 메서드는 첫 번째 매개변수로 클래스 자신을 가르키는 'cls'를 받으며, '@classmethod' 데코레이터로 정의합니다.

정적 메서드

정적 메서드는 클래스나 인스턴스에 관계없이 호출될 수 있으며, '@staticmethod' 데코레이터로 정의합니다.

 

class Dog:
    species = "Canis familiaris"

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        return f"{self.name} is barking."

    @classmethod
    def get_species(cls):
        return cls.species

    @staticmethod
    def is_domestic():
        return True

print(Dog.get_species())  # 출력 결과: Canis familiaris
print(Dog.is_domestic())  # 출력 결과: True

 

위 코드에서는 'bark'라는 일반 메서드, 'get_species'라는 클래스 메서드, 'is_domestic'이라는 정적 메서드를 정의하고 호출합니다.

 

5. 상속

상속은 기존 클래스를 기반으로 새로운 클래스를 생성하는 방법입니다. 상속을 통해 코드를 재사용하고, 기능을 확장할 수 있습니다.

 

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError("Subclass must implement this method")

class Dog(Animal):
    def speak(self):
        return f"{self.name} says woof!"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says meow!"

dog = Dog("Buddy")
cat = Cat("Molly")

print(dog.speak())  # 출력 결과: Buddy says woof!
print(cat.speak())  # 출력 결과: Molly says meow!

 

위 코드에서는 'Animal'이라는 부모 클래스를 상속받아 'Dog'와 'Cat' 클래스를 생성하고, 각 클래스에서 'speak' 메서드를 구현합니다.

 

6. 다형성

다형성은 같은 인터페이스를 통해 다른 클래스의 객체를 처리할 수 있는 능력입니다. 이는 코드의 유연성과 확장성을 높입니다.

 

animals = [Dog("Buddy"), Cat("Molly")]

for animal in animals:
    print(animal.speak())

# 출력 결과:
# Buddy says woof!
# Molly says meow!

 

위 코드에서는 'Dog'와 'Cat' 객체를 같은 리스트에 넣고, 반복문을 통해 각 객체의 'speak' 메서드를 호출합니다.

 

 

이번 글에서는 파이썬 클래스의 개념과 기능들에 대해 살펴보았습니다. 파이썬 클래스는 객체 지향 프로그래밍의 핵심 개념으로, 복잡한 프로그램을 설계하고 유지보수하는 데 매우 유용합니다. 이상입니다.

댓글