05-1 파이썬의 클래스

1. 클래스란 무엇인가?

클래스는 프로그래밍 언어에서 객체 지향 프로그래밍(OOP)을 지원하는데 필요한 기본 단위 중 하나입니다. 클래스는 데이터(속성)와 데이터 조작을 위한 메소드(함수)를 하나로 묶는 데 사용됩니다. 클래스를 사용하면 코드의 구조를 잘 정리하고, 더 재사용 가능하게 만들 수 있습니다.

2. 클래스와 객체의 차이

클래스는 객체를 생성하기 위한 청사진(설계도)입니다. 객체는 클래스를 기반으로 생성된 실체이며, 런타임에 메모리를 점유하고 행동할 수 있는 상태를 가집니다.

3. 클래스 정의하기

클래스는 class 키워드를 사용하여 정의합니다. 클래스 이름은 보통 대문자로 시작되며, 클래스 본문은 들여쓰기 되어야 합니다.

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

4. 생성자와 소멸자

생성자는 객체가 생성될 때 자동으로 호출되는 메소드로, 주로 객체의 초기 상태를 설정하는 데 사용됩니다. 파이썬에서는 __init__ 메소드가 그 역할을 합니다. 소멸자는 객체가 삭제될 때 호출되며, __del__ 메소드로 정의할 수 있습니다.

5. 클래스 변수와 인스턴스 변수

클래스 변수는 클래스에 의해 공유되는 변수로, 모든 인스턴스에서 동일한 값을 가집니다. 인스턴스 변수는 객체마다 별도의 값을 가질 수 있는 변수입니다.

class Car:
    number_of_wheels = 4  # 클래스 변수

    def __init__(self, make, model, year):
        self.make = make    # 인스턴스 변수
        self.model = model  # 인스턴스 변수
        self.year = year    # 인스턴스 변수

6. 메소드 정의

메소드는 클래스 내부에 정의된 함수로, 객체의 동작을 정의합니다. 보통 인스턴스 메소드가 사용되며, 첫 번째 매개변수로 self를 사용하여 해당 객체에 접근할 수 있습니다.

class Car:
    def start_engine(self):
        print("Engine started")

7. 상속

상속은 기존 클래스를 기반으로 새로운 클래스를 만드는 기법으로, 코드 재사용성을 높입니다. class DerivedClass(BaseClass): 형태로 정의합니다.

class ElectricCar(Car):
    def __init__(self, make, model, year, battery_size):
        super().__init__(make, model, year)
        self.battery_size = battery_size

8. 다형성

다형성은 같은 인터페이스로 서로 다른 데이터 타입을 처리할 수 있는 기능입니다. 파이썬에서는 메소드 오버라이딩을 통해 다형성을 구현할 수 있습니다.

class Animal:
    def sound(self):
        pass

class Dog(Animal):
    def sound(self):
        return "Woof!"

class Cat(Animal):
    def sound(self):
        return "Meow!"

9. 캡슐화

캡슐화는 객체의 일부 구현 내용에 대해 외부로부터의 접근을 제한하는 것을 의미합니다. 파이썬에서는 관습적으로 변수명 앞에 밑줄을 붙여(private) 캡슐화를 나타냅니다.

10. 클래스 활용 예제

여기서는 앞서 설명한 모든 개념을 포함한 예제를 만들어 보겠습니다.

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self._pages = pages  # Private 변수

    def __str__(self):
        return f"{self.title} by {self.author}"

    def set_pages(self, pages):
        if pages > 0:
            self._pages = pages
        else:
            raise ValueError("페이지 수는 양수여야 합니다.")

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다