본문 바로가기
airbnb clone coding

[Django] 2. OOP with Python

by busybee-busylife 2024. 7. 10.
반응형

속성은 같으나 데이터만 다른 경우 

 

  • class: 쿠키 틀
  • instance/object: 쿠키 
  • method: 클래스 안의 함수 
    • constructor method: 초기화 목적으로 사용되는 메써드 
  • inheritance: 코드를 재사용 가능한 조각으로 나눈다.
    • child class가 parent class의 속성을 갖는다. 

   

1. Encapsulation(캡슐화)

데이터와 데이터를 활용하는 함수를 하나의 캡슐(class) 안에 넣는다.

어떻게 클래스 정보에 접근/수정하는지 결정하는 권한을 제공한다.

 

2. Inheritance(상속)

클래스를 확장(extension)한다. 

여러 class에서 반복적인 부분을 추상화한다. 

 

3. Abstraction(추상화)

구현 세부정보를 숨기는 일반 인터페이스를 지정하는 행위

(act of specifying a general interface hiding implementation details)

e.x. 핸들과 페달로 운전이 가능. 자동차 내부의 구현 세부정보는 노출 X 

 

4. Polymorphism(다형성) 

method overriding: 같은 메써드를 쓰지만 다르게 구현 

 

 

class Human:
  def __init__(self, name):
    self.name = name
  def say_hello(self):
    print(f"hello my name is {self.name}")


class Fan(Human):
  def __init__(self, name, fav_team):
    self.fav_team = fav_team

nico_fan = Fan("nico_fan", "dontknow")
nico_fan.say_hello()

#>> Human을 상속받았지만 Human을 initialize하지 않은 상태 
#>> 'name'에서 에러가 발생

 

 

class Human:
  def __init__(self, name):
    self.name = name
  def say_hello(self):
    print(f"hello my name is {self.name}")


class Fan(Human):
  def __init__(self, name, fav_team):
    super().__init__(name)
    self.fav_team = fav_team

nico_fan = Fan("nico_fan", "dontknow")
nico_fan.say_hello()

#>> super(): Human 클래스에 접근할 수 있도록 한다 

#>> super().__init__(name): Human을 initialize한다(Human의 init 메써드를 호출해야) 

 

 

class Dog:
  def woof(self):
    print("woof woof")

class Beagle(Dog):
  def jump(self):
    print("jump")

beagle = Beagle()
beagle.woof()
beagle.jump()

#>> woof woof
#>> jump

init 메써드가 필수적인 것은 아니다 

 

 

class Dog:
  def woof(self):
    print("woof woof")

class Beagle(Dog):
  def jump(self):
    super().woof()
    print("jump")

beagle = Beagle()
beagle.jump()

#>> woof woof
#>> jump

부모의 woof 메써드를 child의 jump 메써드에 넣어서 같은 결과를 출력 

 

 

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

jia = Dog("jia")
print(jia)
#>> <__main__.Dog object at 0x7d688137bac0>

object가 어디에 있는지를 출력한다

 

 

 

class Dog:
  def __init__(self, name):
    self.name = name
  def __str__(self):
    return f"Dog: {self.name}"

jia = Dog("jia")
print(jia)
#>> Dog: jia

클래스가 문자열로 보이도록 커스텀했다

jia 객체는 내부적으로 str 메서드를 실행

 

 

 

class Dog:
  def __init__(self, name):
    self.name = name
  def __str__(self):
    return f"Dog: {self.name}"

jia = Dog("jia")
print(dir(jia))
#>> ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name']

dir: 클래스의 속성과 메서드를 보여줌

클래스의 내부 구조를 확인할 수 있다

반응형