본문 바로가기
Python

[Python] Week 19: 객체지향 프로그래밍 - 상속

by cogito21_python 2024. 6. 1.
반응형

 

Day 1: 상속의 기본 개념

  • 강의 내용:
    • 상속의 정의와 필요성
      • 상속의 개념과 장점
      • 코드 재사용성과 유지보수성 향상
    • 기본 상속 구조
      • 부모 클래스와 자식 클래스
      • 기본 상속 문법
  • 실습:
    • 기본 상속 예제 작성
# 부모 클래스 정의
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

# 자식 클래스 정의
class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"

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

print(dog.speak())  # 'Buddy says Woof!'
print(cat.speak())  # 'Whiskers says Meow!'

 

Day 2: 부모 클래스 호출

  • 강의 내용:
    • 부모 클래스 메서드 호출
      • super() 함수 사용
      • 부모 클래스의 초기화 메서드 호출
    • 부모 클래스의 메서드 오버라이딩
  • 실습:
    • super() 함수를 사용한 예제 작성
# 부모 클래스 정의
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

# 자식 클래스 정의
class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed

    def speak(self):
        return f"{self.name} the {self.breed} says Woof!"

# 객체 생성 및 사용
dog = Dog("Buddy", "Golden Retriever")
print(dog.speak())  # 'Buddy the Golden Retriever says Woof!'

 

Day 3: 메서드 오버라이딩

  • 강의 내용:
    • 메서드 오버라이딩의 개념
      • 부모 클래스의 메서드를 자식 클래스에서 재정의
    • 메서드 오버라이딩의 필요성과 사용 예제
  • 실습:
    • 메서드 오버라이딩을 사용하는 클래스 예제 작성
# 부모 클래스 정의
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

# 객체 생성 및 사용
rectangle = Rectangle(5, 10)
print(rectangle.area())  # 50

 

Day 4: 다중 상속

  • 강의 내용:
    • 다중 상속의 개념
      • 다중 상속의 정의와 사용
      • 다중 상속의 장단점
    • 다중 상속 사용 예제
  • 실습:
    • 다중 상속을 사용하는 클래스 예제 작성
# 부모 클래스 정의
class Flyer:
    def fly(self):
        return "Flying high in the sky!"

class Swimmer:
    def swim(self):
        return "Swimming deep in the sea!"

# 자식 클래스 정의 (다중 상속)
class FlyingFish(Flyer, Swimmer):
    pass

# 객체 생성 및 사용
flying_fish = FlyingFish()
print(flying_fish.fly())  # 'Flying high in the sky!'
print(flying_fish.swim())  # 'Swimming deep in the sea!'

 

Day 5: 다형성과 추상 클래스

  • 강의 내용:
    • 다형성의 개념
      • 다형성의 정의와 필요성
      • 동일한 인터페이스의 다양한 구현
    • 추상 클래스
      • abc 모듈을 사용한 추상 클래스 정의
      • @abstractmethod 데코레이터
  • 실습:
    • 다형성과 추상 클래스를 사용하는 예제 작성
from abc import ABC, abstractmethod

# 추상 클래스 정의
class Animal(ABC):
    @abstractmethod
    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 6: 상속과 구성

  • 강의 내용:
    • 상속과 구성의 차이
      • 상속의 장점과 단점
      • 구성의 정의와 사용
    • 상속과 구성의 사용 예제
  • 실습:
    • 상속과 구성을 사용하는 클래스 예제 작성
# 상속 예제
class Engine:
    def start(self):
        return "Engine started"

class Car(Engine):
    def drive(self):
        return "Car is driving"

car = Car()
print(car.start())  # 'Engine started'
print(car.drive())  # 'Car is driving'

# 구성 예제
class Engine:
    def start(self):
        return "Engine started"

class Car:
    def __init__(self, engine):
        self.engine = engine

    def drive(self):
        return f"{self.engine.start()} and car is driving"

engine = Engine()
car = Car(engine)
print(car.drive())  # 'Engine started and car is driving'

 

Day 7: 상속 종합 연습 및 프로젝트

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

    def perimeter(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

    def perimeter(self):
        return 2 * (self.width + self.height)

rect = Rectangle(4, 5)
print(f"Area: {rect.area()}")  # Area: 20
print(f"Perimeter: {rect.perimeter()}")  # Perimeter: 18

# 연습 문제 2: 직원 관리 시스템 클래스 작성 (상속 사용)
class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

    def get_details(self):
        return f"Name: {self.name}, Salary: {self.salary}"

class Manager(Employee):
    def __init__(self, name, salary, department):
        super().__init__(name, salary)
        self.department = department

    def get_details(self):
        return f"Name: {self.name}, Salary: {self.salary}, Department: {self.department}"

emp = Employee("Alice", 50000)
mgr = Manager("Bob", 70000, "IT")

print(emp.get_details())  # 'Name: Alice, Salary: 50000'
print(mgr.get_details())  # 'Name: Bob, Salary: 70000, Department: IT'

# 미니 프로젝트 예제: 차량 관리 시스템
class Vehicle:
    def __init__(self, make, model):
        self.make = make
        self.model = model

    def get_info(self):
        return f"Make: {self.make}, Model: {self.model}"

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

    def get_info(self):
        return f"Make: {self.make}, Model: {self.model}, Doors: {self.num_doors}"

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

    def get_info(self):
        return f"Make: {self.make}, Model: {self.model}, Payload Capacity: {self.payload_capacity} kg"

car = Car("Toyota", "Corolla", 4)
truck = Truck("Ford", "F-150", 1200)

print(car.get_info())  # 'Make: Toyota, Model: Corolla, Doors: 4'
print(truck.get_info())  # 'Make: Ford, Model: F-150, Payload Capacity: 1200 kg'

 

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

반응형