본문 바로가기
Python/Python 이론

파이썬 : 캡슐화와 추상화

by P_eli 2024. 1. 22.
728x90
반응형

파이썬에서의 객체지향 프로그래밍 중 중요한 두 가지 개념인 "캡슐화"와 "추상화"에 대해 알아보려고 합니다. 이 두 가지 개념은 코드를 더 효율적으로 관리하고 유지보수하기 쉽게 만들어주는 핵심적인 요소입니다.

 

캡슐화 (Encapsulation)

캡슐화란 무엇일까요? 간단히 말하면, 캡슐화는 객체의 상태와 행위를 하나로 묶어서 외부에서의 접근을 제한하는 것을 말합니다. 이를 통해 코드의 일부를 감추고, 객체 간의 상호작용을 단순화시킬 수 있습니다.

1. 정보은닉

파이썬에서는 클래스 내의 속성(멤버 변수)을 __로 시작하는 이름으로 선언하면 해당 속성이 private으로 설정됩니다. 이렇게 함으로써 클래스 외부에서 직접적인 접근을 막아 정보은닉을 실현할 수 있습니다.

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

    def get_model(self):
        return self.__model

# 사용 예시
my_car = Car("Tesla")
print(my_car.get_model())  # 외부에서 직접 접근 불가, 메서드를 통해 간접적으로 접근

 

2. 메서드 활용

캡슐화는 메서드를 통해 객체의 내부 상태를 조작하고 제어하는 것을 강조합니다. 객체의 내부 상태를 직접 변경하는 대신, 메서드를 통한 간접적인 접근을 통해 안전하게 상태를 변경할 수 있습니다.

class BankAccount:
    def __init__(self, balance=0):
        self.__balance = balance

    def deposit(self, amount):
        self.__balance += amount

    def withdraw(self, amount):
        if amount <= self.__balance:
            self.__balance -= amount
        else:
            print("잔액 부족")

# 사용 예시
my_account = BankAccount(1000)
my_account.deposit(500)
my_account.withdraw(200)

추상화 (Abstraction)

추상화는 복잡한 시스템에서 핵심적인 기능에만 집중하고 불필요한 부분을 제거하여 간결하고 이해하기 쉬운 모델을 만드는 것입니다.

1. 클래스와 객체

파이썬에서 추상화는 주로 클래스와 객체를 통해 이루어집니다. 클래스는 객체의 틀을 제공하며, 객체는 그 틀을 기반으로 실제로 동작하는 인스턴스입니다.

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

    def speak(self):
        pass  # 추상 메서드

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

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

# 사용 예시
my_dog = Dog("멍멍이")
print(my_dog.speak())  # 멍멍!

2. 추상 클래스와 추상 메서드

추상 클래스는 추상화를 실현하기 위한 도구 중 하나입니다. 추상 클래스는 추상 메서드를 포함하며, 이를 상속받는 하위 클래스에서 반드시 구현되어야 합니다.

from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14 * self.radius * self.radius

# 사용 예시
my_circle = Circle(5)
print(my_circle.area())  # 78.5

 

 

캡슐화와 추상화는 객체지향 프로그래밍의 핵심 원칙 중 하나로, 코드의 유지보수성과 가독성을 높이는 데 큰 역할을 합니다. 이 두 가지 개념을 잘 활용하여 깔끔하고 효율적인 코드를 작성해보세요!

728x90
반응형