"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python의 객체 지향 프로그래밍(OOP): 클래스 및 객체 설명

Python의 객체 지향 프로그래밍(OOP): 클래스 및 객체 설명

2024-11-06에 게시됨
검색:949

Object-Oriented Programming (OOP) in Python: Classes and Objects Explained

객체 지향 프로그래밍(OOP)은 소프트웨어 개발에 사용되는 핵심 접근 방식입니다.

이 기사에서는 OOP의 주요 아이디어, 특히 Python의 클래스, 객체, 상속 및 다형성을 살펴보겠습니다.

이 가이드가 끝나면 OOP 원칙을 사용하여 Python 코드를 구성하여 프로그램을 더욱 모듈화하고 재사용 가능하며 유지 관리하기 쉽게 만드는 방법을 이해하게 됩니다.


객체 지향 프로그래밍이란 무엇입니까?

객체 지향 프로그래밍(OOP)은 기능과 논리보다는 데이터 또는 객체를 중심으로 소프트웨어 설계를 구성합니다.

객체는 고유한 속성(데이터)과 동작(함수)을 가진 컨테이너와 같습니다. OOP는 다음과 같은 몇 가지 핵심 개념에 중점을 둡니다.

캡슐화
이는 데이터(속성)와 해당 데이터에 대해 작동하는 메서드(함수)를 클래스라고 하는 단일 단위로 묶는 것을 의미합니다.

또한 객체의 일부 구성 요소에 대한 액세스를 제한하여 더욱 안전하게 만듭니다.

추출
이는 복잡한 구현 세부 사항을 숨기고 객체의 필수 기능만 표시하려는 아이디어입니다.

복잡성을 줄이고 프로그래머가 더 높은 수준의 상호 작용에 집중할 수 있게 해줍니다.

계승
이는 기존 클래스(기본 클래스)에서 새 클래스(파생 클래스)를 생성하는 메커니즘입니다.

새 클래스는 기존 클래스의 속성과 메서드를 상속합니다.

다형성
이는 단일 인터페이스를 사용하여 다양한 데이터 유형을 나타내는 기능입니다.

객체를 상위 클래스의 인스턴스로 처리할 수 있으며 상위 클래스의 메서드와 이름이 같은 하위 클래스의 메서드를 정의할 수 있습니다.


Python의 OOP 기본: 클래스 및 객체

Python의 객체지향 프로그래밍(OOP)의 핵심은 클래스와 객체입니다.

수업
클래스는 객체를 생성하기 위한 청사진과 같습니다.

객체가 갖게 될 일련의 속성(속성)과 작업(메서드)을 정의합니다.

Python에서는 class 키워드를 사용하여 클래스를 만듭니다. 예는 다음과 같습니다.

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

    def start_engine(self):
        print(f"{self.make} {self.model}'s engine started.")

사물
객체는 클래스의 인스턴스입니다.

클래스를 정의하면 해당 클래스에서 여러 개체(인스턴스)를 만들 수 있습니다.

각 객체는 클래스에 정의된 속성에 대해 고유한 값을 가질 수 있습니다.

객체를 만들고 사용하는 방법은 다음과 같습니다.

my_car = Car("Toyota", "Corolla", 2020)
my_car.start_engine()  # Output: Toyota Corolla's engine started.

이 예에서 my_car는 ​​Car 클래스의 객체입니다.

제조업체, 모델, 연도에 대한 고유한 값이 있으며 start_engine과 같은 메소드를 사용할 수 있습니다.


Python의 상속

상속을 통해 한 클래스(자식 클래스)가 다른 클래스(상위 클래스)의 속성과 메서드를 취할 수 있습니다.

코드를 재사용하고 클래스 간 계층 구조를 설정하는 데 유용합니다.

예는 다음과 같습니다.

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

    def drive(self):
        print("Driving...")


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

    def start_engine(self):
        print(f"{self.make} {self.model}'s engine started.")


my_car = Car("Honda", "Civic", 2021)
my_car.drive()  # Output: Driving...
my_car.start_engine()  # Output: Honda Civic's engine started.

이 예에서 Car 클래스는 Vehicle 클래스에서 상속됩니다.

이 때문에 Car 클래스는 Vehicle 클래스에 정의된 주행 방식을 사용할 수 있습니다.

메서드 재정의
때로는 하위 클래스가 상위 클래스에서 상속받은 메서드의 동작을 변경하거나 추가해야 하는 경우도 있습니다.

이 작업은 메서드 재정의를 통해 수행됩니다.

예는 다음과 같습니다.

class Vehicle:
    def drive(self):
        print("Driving a vehicle...")


class Car(Vehicle):
    def drive(self):
        print("Driving a car...")


my_vehicle = Vehicle()
my_vehicle.drive()  # Output: Driving a vehicle...

my_car = Car()
my_car.drive()  # Output: Driving a car...

이 예에서는 Car 클래스의 운전 방법이 Vehicle 클래스의 운전 방법을 재정의하여 사용자 정의된 동작을 허용합니다.

다중 상속
Python은 또한 클래스가 둘 이상의 기본 클래스에서 상속할 수 있는 다중 상속을 지원합니다.

예는 다음과 같습니다.

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

    def drive(self):
        print("Driving a vehicle...")


class Electric:
    def charge(self):
        print("Charging...")


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

    def start_engine(self):
        print(f"{self.make} {self.model}'s engine started.")


class HybridCar(Car, Electric):
    def switch_mode(self):
        print("Switching to electric mode...")


my_hybrid = HybridCar("Toyota", "Prius", 2022)
my_hybrid.start_engine()  # Output: Toyota Prius's engine started.
my_hybrid.drive()  # Output: Driving a vehicle...
my_hybrid.charge()  # Output: Charging...
my_hybrid.switch_mode()  # Output: Switching to electric mode...

이 예에서 HybridCar 클래스는 Car와 Electric 모두에서 상속되므로 두 상위 클래스 모두의 메서드에 액세스할 수 있습니다.


파이썬의 다형성

다형성은 메소드가 작업 중인 객체에 따라 다른 작업을 수행할 수 있도록 하는 기능입니다. 해당 메소드의 이름이 같더라도 마찬가지입니다.

이는 상속을 처리할 때 특히 유용합니다. 각 클래스에 적합한 방식으로 여러 클래스에서 동일한 메서드 이름을 사용할 수 있기 때문입니다.

함수를 사용한 다형성
예는 다음과 같습니다.

class Dog:
    def speak(self):
        return "Woof!"


class Cat:
    def speak(self):
        return "Meow!"


def make_animal_speak(animal):
    print(animal.speak())


dog = Dog()
cat = Cat()

make_animal_speak(dog)  # Output: Woof!
make_animal_speak(cat)  # Output: Meow!

make_animal_speak 함수는 말하기 메소드를 사용하여 모든 객체를 받아들임으로써 다형성을 보여줍니다.

이를 통해 차이점에도 불구하고 개와 고양이 개체 모두에서 작동할 수 있습니다.

클래스 메소드를 사용한 다형성
다형성은 클래스 계층 구조에서 메서드를 사용할 때도 작용합니다.

예는 다음과 같습니다.

class Animal:
    def speak(self):
        raise NotImplementedError("Subclass must implement abstract method")


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


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


animals = [Dog(), Cat()]

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

이 예에서 Dog와 Cat은 모두 Animal의 하위 클래스입니다.

speak 메소드는 두 하위 클래스 모두에서 구현되어 동물 목록을 반복할 때 다형성이 적용될 수 있습니다.


캡슐화 및 데이터 은닉

캡슐화는 데이터와 해당 데이터에 대해 작업하는 메서드를 클래스라고 하는 단일 단위로 결합하는 방식입니다.

또한 객체 지향 프로그래밍(OOP)에서 데이터를 보호하는 데 중요한 객체의 특정 부분에 대한 액세스를 제한하는 것도 포함됩니다.

비공개 및 공개 속성
Python에서는 이름을 밑줄로 시작하여 속성이 비공개임을 나타낼 수 있습니다.

이것이 실제로 클래스 외부에서의 액세스를 막지는 않지만 속성에 직접 액세스해서는 안 된다는 것을 나타내는 규칙입니다.

예는 다음과 같습니다.

class Account:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self._balance = balance  # Private attribute

    def deposit(self, amount):
        self._balance  = amount

    def withdraw(self, amount):
        if amount 



이 예에서 Account 클래스에는 예금, 출금 및 get_balance와 같은 메소드를 통해 조작되는 개인 속성 _balance가 있습니다.

클래스 외부에서 _balance에 직접 액세스하는 것은 권장되지 않습니다.


고급 OOP 개념

Python의 객체 지향 프로그래밍(OOP)에 대한 이해를 심화하려는 사람들을 위한 몇 가지 고급 주제는 다음과 같습니다.

클래스 메서드
이는 클래스의 개별 인스턴스가 아닌 클래스 자체에 연결되는 메서드입니다.

클래스 상태를 변경할 수 있으며 이는 클래스의 모든 인스턴스에 영향을 미칩니다.

class Car:
    total_cars = 0

    def __init__(self, make, model):
        self.make = make
        self.model = model
        Car.total_cars  = 1

    @classmethod
    def get_total_cars(cls):
        return cls.total_cars

정적 메서드
이는 클래스에 속하지만 클래스나 해당 인스턴스의 상태를 변경하지 않는 메서드입니다.

@staticmethod 데코레이터를 사용하여 정의됩니다.

class MathOperations:
    @staticmethod
    def add(x, y):
        return x   y

속성 장식자
Python의 속성 데코레이터는 보다 Python적인 방식으로 클래스 속성에 대한 getter, setter 및 deleter를 정의하는 방법을 제공합니다.

class Employee:
    def __init__(self, name, salary):
        self._name = name
        self._salary = salary

    @property
    def salary(self):
        return self._salary

    @salary.setter
    def salary(self, value):
        if value 



이 예에서 급여 속성은 일반 속성처럼 액세스되지만 getter 및 setter 메소드로 관리됩니다.


결론

Python의 객체 지향 프로그래밍(OOP)은 코드를 구성하고 관리하는 강력한 방법입니다.

클래스, 객체, 상속, 다형성, 캡슐화 등 OOP의 원리를 학습하면 잘 구성되고 재사용 가능하며 유지 관리가 쉬운 Python 프로그램을 작성할 수 있습니다.

작은 스크립트에서 작업하든 대규모 애플리케이션에서 작업하든 OOP 원칙을 사용하면 보다 효율적이고 확장 가능하며 강력한 소프트웨어를 만드는 데 도움이 됩니다.

릴리스 선언문 이 기사는 https://dev.to/devasservice/object- Oriented-programming-oop-in-python-classes-and-objects-explained-26ek?1에 재현되어 있습니다. 침해가 있는 경우에는 Study_golang@163으로 문의해 주십시오. .com에서 삭제하세요
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3