프로그래밍/Python

파이썬(Python) 클래스: 완벽 가이드 (+코드)

프리다이어비티즈 2024. 10. 15. 09:28
반응형

목차

    파이썬 클래스는 객체 지향 프로그래밍(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를 첫 번째 매개변수로 받아 클래스 자체에 접근할 수 있습니다.
    • 정적 메서드는 클래스나 인스턴스와 독립적으로 동작하며, 어떤 매개변수도 특별히 받지 않습니다. 클래스와 관련된 유틸리티 기능을 제공할 때 유용합니다.

    이번 글에서는 파이썬 클래스의 정의와 활용법, 객체 지향 프로그래밍의 주요 개념인 상속, 다형성, 접근 제어자에 대해 알아보았습니다. 클래스를 잘 이해하고 사용하면 코드의 재사용성과 유지 보수성을 높일 수 있습니다. 파이썬 클래스와 객체 지향 프로그래밍의 기본 개념을 이해하는 데 이 글이 도움이 되었길 바랍니다. 추가 질문이 있으면 언제든 문의해주세요.

    반응형