OOP는 코드를 구성하는 방법에 대한 규칙
OOP는 직관적이고 데이터아 구조를 직관적으로 생각하게 해준다.
Class 에는 속성, 메서드, 상속이 있다.
OOP 는 확장가능성 있도록만든다. OOP 는 데이터를 수정하기 위해 어떤 함수를 넣어야 하는지를 알려준다. 명확한 경게를 만드는 것이다. 많은 딕셔너리로 다른 일을 하는 함수를 만들 필요가 없다.
class 는 구조를 정의할 수 있도록 해준다.
Class 는 캡슐화 하도록 도와준다. 또한 이 데이터를 기반으로 동작하는 함수를 정의할 수 있다.
class Puppy:
pass
ruffus = Puppy() # ruffus 는 Puppy의 한 종류라는 뜻이다.
print(ruffus)
# <__main__.Puppy object at 0x0000028B34AFE470>
method는 class 안에 있는 함수이다. 그게 다다.
함수를 만들고 class 안에 넣기만 하면 끝.
즉, class 밖에 있는 것은 function(함수) 인 것이고 class 안에 있는 것은 method(메소드) 인 것이다.
class Puppy:
def __init__():
print("Puppy is born")
# TypeError: Puppy.__init__() takes 0 positional arguments but 1 was given
# 0 개의 arguments 를 가져야 하는데 1개의 arguments 가 온 것이다.
# method 를 가지고 있을 경우 자동으로 "기본적으로" method 의 첫번째 arguments 는 self 가 되어야 한다. 물론 self 라고 쓸 필요는 없다.
ruffus = Puppy() # Puppy를 생성한 순간에 바로 init 함수가 자동적으로 호출 된 것이다.
# method 의 첫번째 arguments 는 self다.
# 자신을 참조한다.
class Puppy:
def __init__(self):
print(self)
print("Puppy is born")
ruffus = Puppy() # Puppy를 생성한 순간에 바로 __init__ 함수가 실행 된 것이다.
print(ruffus)
# <__main__.Puppy object at 0x0000022295EFED70> 메모리 주소가 출력되었다.
# Puppy is born
# <__main__.Puppy object at 0x0000022295EFED70>
이것이 왜 유용할까?
자기 자신을 커스텀 할 수 있기에 유용하다.
class Puppy:
def __init__(self):
self.name = "ruffus"
self.age = 0.1
self.breed = 'biggke'
ruffus = Puppy() # Puppy를 생성한 순간에 바로 __init__ 함수가 실행 된 것이다.
print(ruffus.name, ruffus.age, ruffus.breed)
# ruffus 0.1 biggke
다음 편에서 커스텀 하는 법을 더 알아보자 ~