본문 바로가기
AI 웹개발반

[python] 객체 지향 특강 + homework

by 째깍단 2023. 5. 1.

 

 

클래스는 객체를 생성하기위한 청사진이다!

객체를 정의하고 속성, 동작을 정의함

 

 

클래스를 메모리에 담으면 인스턴스

 

객체는 클래스의 인스턴스

 

 

클래스  = 붕어빵틀

인스턴스 =  붕어빵

 

클래스 안에 속성(어트리뷰트, 트러퍼티) 메서드(클래스 안에서 만드는 함수) 있다

 

class Car():
	def __init__(self, model, color, speed, ...):
	    ...

예를들어 class Car()가 있을 때, 

 

Car       = 속성을 보겠다! (model, color같은 내용들)

Car()    = 괄호를 넣으면 함수를 실행하겠다 (Car의 __init__ 함수 실행)

 

 

 

 

  • 캡슐화!

getter 와 setter,

코드 형태를 보존하기위해! 사용할 부분을 지정해줌

 

아래에서는 init 에 들어있는 것이 캡슐화된 부분!

accel과 brk 조절하여 사용할 수 있도록 하였고, 직접 init을 건드리지 않도록 함

 

class Car():
    def __init__(self, model, color, speed=0):
        self.model = model
        self.color = color
        self.speed = 0

    def accelerate(self):
        accel = 20 
        self.speed += accel
        print(f"{self.model} accelerate!")

    
    def brake(self):
        brk = 10
        self.speed -= brk
        print(f"{self.model} brake!")

        
    def get_speed(self):
        print(f"{self.model}의 현재 속도는 {self.speed}km/h입니다.")


car = Car("소나타", "자주색",0)

car.accelerate()
car.brake()
car.brake()
car.get_speed()

 

 

 

 

  • 다형성

같은 이름의 메서드를 다른 클래스에서 다르게 구현하는 것

 

상속받은 클래스를 오버라이딩하여 각 클래스에서 메서드가 다르게 구현되는것 = 다형성! 

코드의 가독성과 유지보수성을 높여준다

 

 

class Animal():
    def __init__(self, name, speak):
        self.name = name
        self.speak = speak
        print(f"동물 {name}은 {speak}!")

class Dog(Animal):
    def __init__(self, name, speak):
        super().__init__(name, speak)

class Cat(Animal):
    def __init__(self, name, speak):
        super().__init__(name, speak)


dog = Dog("비숑", "멍멍")
cat = Cat("코숏", "야옹")

dog
cat

 

 

 

 

  • 추상 클래스

Abstract class

붕어빵 틀을 만들어주는 붕어빵틀의 틀

 

관계성을 만들어줄 수 있고, 사용하는 방법이 명시되어있는 클래스를 만들어준다.

 

 

class Shape():
    def get_area(self):
        pass

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

    def get_area(self):
        return (self.radius ** 2) * 3.14

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

    def get_area(self):
        return self.width * self.length
    
circle = Circle(5)
rectangle = Rectangle(5, 10)

print(circle.get_area())
print(rectangle.get_area())