객체 지향 프로그래밍 (Object oriented Programming)
객체 지향 프로그래밍이란 객체와 관련된 코드를 분리할 수 있게 하여 객체를 위주로 생각하여 프로그래밍 하는 것!
이러한 구조가 계속 반복되다 보니 클래스라는 구조가 만들어짐 !
클래스 (class)
클래스란 데이터와 그 데이터를 효과적으로 다룰 수 있는 함수를 하나로 묶은 새로운 타입. 즉, 객체와 관련하여 묶은 새로운 데이터 타입!
* 이름을 지을 때 BeautifulSoup 처럼 단어마다 앞에 대문자로 바꾸어 붙여야함.
(캐멀 케이스 규칙)
객체 (object)
여러 가지 속성을 가질 수 있는 대상 !
+ 사람을 객체로 표현한다면 이름, 성별 등등이 속성 !
* 클래스 기반으로 만들어진 객체는 인스턴스라고 함.
ex) self.__salary = 1000
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender =gender
def about_me(self):
print("저의 이름은 ", self.name)
def __str__(self):
return f"저의 이름은 {self.name} 입니다"
class Employee(Person):
def __init__(self,name,age,gender, salary):
#super().__init__(name, age, gender)
self.salary = salary
def about_me(self):
#super().about_me()
print('급여는', self.salary)
A = Person('John',28,'M')
B = Employee('sam',30,'M',1000)
선행 개념
1.First - class objects
- 변수나 데이터 구조에 할당이 가능한 객체
- 파라미터로 전달이 가능 + 리턴 값으로 사용
- 파이썬의 함수는 일급함수 (아래 예시를 보면 함수를 파라미터로 받아서 사용함.)
def square(x):
return x*x
def cube(x):
return x*x*x
def formula(method, x):
return method(x)
print(formula(square,6))
print(formula(cube,6))
2. Inner function
- 함수 내에 또 다른 함수가 존재
- 두 번째 예시는 위의 특성을 일급 함수 개념을 살려서 함수 자체를 return 함. 이 개념이 closure임.
def print_msg(msg):
def printer():
print(msg)
printer()
print_msg('hi')
def print_msg(msg):
def printer():
print(msg)
return printer
hi = print_msg('hi')
hi()
3.decorator
- 복잡한 클로져 함수를 간단하게 해줄 수 있음.
def star(func):
def inner(*args):
print("*"*30)
func(*args)
print("*"*30)
return inner
@star
def printer(msg):
print(msg)
printer('hi')
밑의 star(printer('hi))는 마지막 return 값이 존재하는데, printer('hi')는 존재하지 않는다. 어떤 순서로 데코레이터가 동작하는 것일까?
def star(func): def inner(*args): print("*"*30) func(*args) print("*"*30) return inner @star def printer(msg): print(msg) star(printer('hi')) printer('hi')
-> 데코레이터를 사용하면 star(printer('hi'))가 아니라 star(printer)('hi')로 동작한다. star는 inner라는 함수를 반환하기 때문에 그 반환 함수의 인자로 ('hi')를 받는다는 뜻이다. 따라서 inner 함수가 한 번 실행이 되고 종료된다.