본문 바로가기
Python

[Python] Week 20: 객체지향 프로그래밍 - 다형성

by cogito21_python 2024. 6. 1.
반응형

Day 1: 다형성의 기본 개념

  • 강의 내용:
    • 다형성의 정의와 필요성
      • 다형성의 개념과 장점
      • 객체지향 프로그래밍에서 다형성의 역할
    • 다형성의 구현
      • 메서드 오버라이딩을 통한 다형성
      • 다양한 객체의 동일한 인터페이스
  • 실습:
    • 기본 다형성 예제 작성
# 부모 클래스 정의
class Animal:
    def speak(self):
        pass

# 자식 클래스 정의
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())  # 'Woof!' 'Meow!'

 

Day 2: 메서드 오버라이딩과 다형성

  • 강의 내용:
    • 메서드 오버라이딩
      • 부모 클래스의 메서드를 자식 클래스에서 재정의
    • 다형성의 활용
      • 메서드 오버라이딩을 통한 다형성 구현
  • 실습:
    • 메서드 오버라이딩을 사용한 다형성 예제 작성
# 부모 클래스 정의
class Shape:
    def area(self):
        return 0

# 자식 클래스 정의
class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

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

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

# 객체 생성 및 사용
shapes = [Rectangle(3, 4), Circle(5)]
for shape in shapes:
    print(shape.area())  # 12, 78.5

 

Day 3: 인터페이스와 다형성

  • 강의 내용:
    • 인터페이스의 개념
      • 인터페이스와 추상 클래스의 차이
    • 인터페이스를 통한 다형성 구현
      • 파이썬에서의 인터페이스 역할
  • 실습:
    • 인터페이스를 사용한 다형성 예제 작성
from abc import ABC, abstractmethod

# 추상 클래스 정의
class Vehicle(ABC):
    @abstractmethod
    def drive(self):
        pass

# 자식 클래스 정의
class Car(Vehicle):
    def drive(self):
        return "Driving a car"

class Bike(Vehicle):
    def drive(self):
        return "Riding a bike"

# 객체 생성 및 사용
vehicles = [Car(), Bike()]
for vehicle in vehicles:
    print(vehicle.drive())  # 'Driving a car', 'Riding a bike'

 

Day 4: 다형성과 연산자 오버로딩

  • 강의 내용:
    • 연산자 오버로딩의 개념
      • 연산자 오버로딩을 통한 다형성 구현
      • 특수 메서드를 사용한 연산자 오버로딩
    • 다형성의 장점
  • 실습:
    • 연산자 오버로딩을 사용한 다형성 예제 작성
# 클래스 정의
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __str__(self):
        return f"Vector({self.x}, {self.y})"

# 객체 생성 및 사용
v1 = Vector(2, 3)
v2 = Vector(4, 5)
v3 = v1 + v2

print(v3)  # 'Vector(6, 8)'

 

Day 5: 다형성과 타입 검사

  • 강의 내용:
    • isinstance() 함수
      • isinstance()를 사용한 타입 검사
    • 다형성과 타입 검사 활용
      • 타입 검사와 다형성의 조합
  • 실습:
    • isinstance()를 사용한 다형성 예제 작성
# 부모 클래스 정의
class Animal:
    def speak(self):
        pass

# 자식 클래스 정의
class Dog(Animal):
    def speak(self):
        return "Woof!"

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

# 객체 생성 및 사용
animals = [Dog(), Cat()]
for animal in animals:
    if isinstance(animal, Dog):
        print("This is a dog.")
    elif isinstance(animal, Cat):
        print("This is a cat.")
    print(animal.speak())  # 'Woof!' 'Meow!'

 

Day 6: 다형성과 콜백 함수

  • 강의 내용:
    • 콜백 함수의 개념
      • 콜백 함수를 사용한 다형성 구현
    • 다형성과 콜백 함수 활용
  • 실습:
    • 콜백 함수를 사용한 다형성 예제 작성
# 콜백 함수 정의
def execute_callback(callback):
    print(callback())

# 클래스 정의
class Dog:
    def speak(self):
        return "Woof!"

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

# 객체 생성 및 사용
dog = Dog()
cat = Cat()

execute_callback(dog.speak)  # 'Woof!'
execute_callback(cat.speak)  # 'Meow!'

 

Day 7: 다형성 종합 연습 및 프로젝트

  • 강의 내용:
    • 다형성 종합 연습 문제 풀이
      • 다양한 다형성 관련 문제
      • Q&A 세션
    • 미니 프로젝트
      • 주제 선정 및 프로그램 설계
      • 다형성을 활용한 프로그램 구현 및 테스트
  • 실습:
    • 종합 연습 문제 풀기
    • 미니 프로젝트 작성 및 발표
# 연습 문제 1: 다양한 도형 클래스를 작성하고, 면적을 계산하는 메서드 추가
class Shape:
    def area(self):
        pass

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

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

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

shapes = [Rectangle(4, 5), Circle(3)]
for shape in shapes:
    print(shape.area())  # 20, 28.26

# 연습 문제 2: 다양한 차량 클래스를 작성하고, 운전 방식을 정의하는 메서드 추가
class Vehicle(ABC):
    @abstractmethod
    def drive(self):
        pass

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

class Bike(Vehicle):
    def drive(self):
        return "Riding a bike"

vehicles = [Car(), Bike()]
for vehicle in vehicles:
    print(vehicle.drive())  # 'Driving a car', 'Riding a bike'

# 미니 프로젝트 예제: 간단한 텍스트 편집기
class TextEditor:
    def __init__(self):
        self.text = ""

    def add_text(self, new_text):
        self.text += new_text

    def display_text(self):
        return self.text

class UpperCaseEditor(TextEditor):
    def display_text(self):
        return self.text.upper()

class LowerCaseEditor(TextEditor):
    def display_text(self):
        return self.text.lower()

editor = UpperCaseEditor()
editor.add_text("Hello, World!")
print(editor.display_text())  # 'HELLO, WORLD!'

editor = LowerCaseEditor()
editor.add_text("Hello, World!")
print(editor.display_text())  # 'hello, world!'

 

이 강의는 파이썬의 객체지향 프로그래밍에서 다형성을 익히는 것을 목표로 하며, 각 강의는 이론과 실습을 포함합니다. 다음 주차에 대한 상세 강의를 원하시면 말씀해 주세요!

반응형