8.2. 프로그램 언어 파이썬에서의 캡슐화, 상속, 다형성 구현

프로그램언어 파이썬(Python)에서의 캡슐화 개념과 구현 방법

캡슐화(Encapsulation)는 객체지향 프로그래밍의 중요한 개념 중 하나로, 데이터와 그 데이터를 처리하는 메서드를 하나로 묶는 것을 말합니다. 이를 통해 데이터를 보호하고 외부에서의 직접적인 접근을 제한함으로써 안정성을 높이고 코드의 유지보수를 용이하게 합니다.

파이썬에서 캡슐화를 구현하는 방법은 주로 속성(property)과 메서드(method)를 활용하는 것입니다. 클래스 내부에 속성을 정의하고, 메서드를 통해 속성에 접근하고 조작할 수 있도록 합니다.

아래는 파이썬에서 캡슐화를 구현하는 간단한 예제 코드입니다.


class Car:
    def __init__(self, brand, model):
        self.__brand = brand  # __로 시작하는 속성은 private으로 설정
        self.__model = model

    def get_brand(self):
        return self.__brand

    def set_model(self, model):
        self.__model = model

# 객체 생성
my_car = Car("Toyota", "Corolla")

# 속성에 직접 접근할 수 없음
# print(my_car.__brand)  # AttributeError 발생

# 메서드를 통해 속성에 접근
print(my_car.get_brand())  # 출력: Toyota

# 속성 변경
my_car.set_model("Camry")

위 예제에서는 Car 클래스 내부에 브랜드(brand)와 모델(model)을 private 속성으로 정의하고, 이를 외부에서 접근할 수 있는 메서드를 제공합니다. 이렇게 함으로써 외부에서 속성에 직접 접근하는 것을 막고, 안전하게 데이터를 다룰 수 있습니다.

프로그램언어 파이썬(Python)에서의 상속 개념과 상속 활용 방법

상속은 객체지향 프로그래밍에서 중요한 개념 중 하나로, 기존 클래스의 속성과 메서드를 다른 클래스가 이어받아 사용할 수 있게 해줍니다. 파이썬(Python)에서도 상속을 지원하며, 이를 통해 코드의 재사용성을 높일 수 있습니다.

상속을 활용하기 위해서는 새로운 클래스를 정의할 때 괄호 안에 상속받고자 하는 부모 클래스의 이름을 넣어주면 됩니다. 파이썬에서는 다중 상속도 지원하므로 여러 부모 클래스로부터 상속을 받을 수 있습니다.

아래는 간단한 예제 코드를 통해 파이썬에서의 상속 개념과 활용 방법을 보여드리겠습니다.


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

    def speak(self):
        pass

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

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

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

print(dog.name, "says:", dog.speak())
print(cat.name, "says:", cat.speak())

위 예제 코드에서는 Animal 클래스를 부모 클래스로 정의하고, Dog와 Cat 클래스가 Animal 클래스를 상속받아 speak 메서드를 오버라이딩하여 구현하고 있습니다. 이후 각각의 인스턴스를 생성하여 speak 메서드를 호출하면 각 동물의 울음소리가 출력됩니다.

프로그램언어 파이썬(Python)에서의 다형성 개념과 활용

다형성은 객체지향 프로그래밍에서 중요한 개념 중 하나로, 같은 이름의 메소드나 함수가 서로 다른 동작을 할 수 있는 능력을 의미합니다. 파이썬(Python)은 동적 타이핑 언어로 다형성을 쉽게 구현할 수 있습니다.

다형성은 코드의 재사용성과 유지보수성을 높여주며, 객체 간의 관계를 유연하게 다룰 수 있게 해줍니다. 다형성을 활용하면 한 가지 타입으로 여러 가지 동작을 수행할 수 있어 코드의 유연성을 높일 수 있습니다.

파이썬에서 다형성은 상속과 메소드 오버라이딩을 통해 구현됩니다. 부모 클래스의 메소드를 자식 클래스에서 재정의하여 다른 동작을 수행하도록 할 수 있습니다.


class Animal:
    def speak(self):
        pass

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

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

# 다형성 활용
def animal_speak(animal):
    return animal.speak()

dog = Dog()
cat = Cat()

print(animal_speak(dog))  # 출력: 멍멍!
print(animal_speak(cat))  # 출력: 야옹!

위 예제 코드에서 Animal 클래스를 부모 클래스로 정의하고, Dog와 Cat 클래스가 Animal 클래스를 상속받아 speak 메소드를 오버라이딩합니다. animal_speak 함수는 다형성을 활용하여 인자로 받은 객체의 speak 메소드를 호출하여 각각의 동물이 울음소리를 출력하도록 합니다.

다형성을 통해 코드의 유연성을 높이고, 객체 간의 관계를 쉽게 다룰 수 있게 됩니다. 파이썬의 다형성은 객체지향 프로그래밍을 더욱 효율적으로 작성할 수 있도록 도와줍니다.

프로그램언어 파이썬(Python)에서의 오버라이딩과 오버로딩 이해

오버라이딩(Overriding)과 오버로딩(Overloading)은 객체지향 프로그래밍에서 중요한 개념입니다. 파이썬(Python)에서도 이 두 가지 개념을 적용할 수 있습니다.

오버라이딩(Overriding)

오버라이딩은 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것을 말합니다. 즉, 자식 클래스에서 부모 클래스의 메소드를 덮어쓰는 것입니다. 이를 통해 자식 클래스는 부모 클래스의 메소드를 자신에 맞게 수정할 수 있습니다.

예제코드:


class Parent:
    def greet(self):
        print("Hello from Parent class")

class Child(Parent):
    def greet(self):
        print("Hello from Child class")

# 부모 클래스와 자식 클래스 정의
parent = Parent()
child = Child()

# 오버라이딩된 메소드 호출
parent.greet()  # 출력: Hello from Parent class
child.greet()   # 출력: Hello from Child class

오버로딩(Overloading)

파이썬은 오버로딩을 지원하지 않습니다. 오버로딩은 같은 이름의 메소드를 매개변수의 개수나 타입에 따라 다르게 정의하는 것을 말합니다. 파이썬에서는 매개변수의 개수나 타입에 따라 다르게 동작하도록 만들 수 있지만, 이는 오버로딩이 아닌 다른 방식으로 구현됩니다.

파이썬에서는 함수나 메소드의 매개변수에 기본값을 설정하거나 가변인자를 활용하여 유사한 기능을 구현할 수 있습니다.

따라서, 파이썬에서는 오버라이딩은 지원되지만 오버로딩은 직접적으로 지원되지 않는다는 점을 기억해야 합니다.

프로그램언어 파이썬(Python)에서의 정보 은닉과 확장

정보 은닉과 확장은 객체지향 프로그래밍에서 중요한 개념입니다. 파이썬(Python)에서도 이 두 가지 개념을 적용할 수 있습니다.

정보 은닉(Encapsulation)은 객체의 상태를 보호하고 외부에서 직접 접근하지 못하도록 하는 것을 말합니다. 이를 통해 객체의 내부 데이터를 보호하고 데이터의 일관성을 유지할 수 있습니다. 정보 은닉은 클래스의 멤버 변수를 private으로 선언하여 외부에서 직접 접근하지 못하도록 합니다.

확장(Inheritance)은 기존 클래스를 기반으로 새로운 클래스를 만드는 것을 말합니다. 부모 클래스의 속성과 메서드를 자식 클래스가 상속받아 재사용할 수 있습니다. 이를 통해 코드의 재사용성을 높이고 유지보수를 용이하게 할 수 있습니다.

아래는 파이썬에서 정보 은닉과 확장을 구현한 예제 코드입니다.


class Person:
    def __init__(self, name, age):
        self.__name = name  # private 변수
        self.__age = age

    def get_name(self):
        return self.__name

    def get_age(self):
        return self.__age

class Student(Person):
    def __init__(self, name, age, student_id):
        super().__init__(name, age)
        self.student_id = student_id

    def get_student_info(self):
        return f"Name: {self.get_name()}, Age: {self.get_age()}, Student ID: {self.student_id}"

# 객체 생성
student = Student("Alice", 20, "20210001")
print(student.get_student_info())

위 예제 코드에서 Person 클래스는 이름과 나이를 저장하는 private 변수를 가지고 있습니다. 이를 통해 정보 은닉을 구현하고, get_nameget_age 메서드를 통해 외부에서 접근할 수 있습니다. Student 클래스는 Person 클래스를 상속받아 학생 ID를 추가로 저장하고, get_student_info 메서드를 통해 학생 정보를 출력합니다.

Leave a Comment