이번 게시글은 파이썬의 객체지향 프로그래밍이 무엇인지 알아보고자 한다.
※ 객체지향 프로그래밍(OOP : Object-Oriented Programmming)이란?
- 속성(Attribute)과 행동(Action)을 가진 객체의 개념을 프로그램으로 표현하는 것
- 여기서 속성은 변수(Variable), 행동은 함수(methode)로 표현됨
- 클래스(class)와 실제 구현체인 인스턴스(instance)로 나눔
1. 파이썬으로 Class 구현하기
파이썬의 클래스는 아래와 같이 선언한다.
class SoccerPlayer(object):
(class : 예약어, SoccerPlayer : class 이름, object : 상속받는 객체명)
※ object는 python3에서 자동 상속(즉, 생략가능)
2. Attribute 추가하기
- Attribute 추가는 __init__,self와 함께 사용한다.
(__init__ : 객체 초기화 예약 함수)
class SoccerPlayer(object):
def __init__(self,name,position,back_number):
self.name=name
self.position=position
self.back_number=back_number
- 인스턴스 생성
son = SoccerPlayer("son","FW",7)
park = SoccerPlayer("park","WF",13)
(self는 Java의 this 키워드와 비슷한 것 같다.)
※ 여담
파이썬에서의 __의미
- '__'는 특수한 예약 함수나 변수 그리고 함수명 변경(맨글링)으로 사용한다고 한다.
(ex. __main__, __add__, __str__, __eq__)
(참고링크 : corikachu.github.io/articles/python/python-magic-method)
3. 객체지향 프로그래밍의 특징
(이 개념은 Python에만 국한되지 않지만, 여기선 Python으로 다뤄본다)
3-1. 상속(Inheritance)
- 부모클래스로부터 속성과 메소드를 물려받은 자식 클래스를 생성하는 것
3-2. 다형성(Polymorphism)
- 같은 이름 메소드의 내부 로직을 다르게 작성
- Dynamic Type 특성이 있어 파이썬에서는 같은 부모클래스의 상속에서 발생한다.
3-3. 가시성(Visibility)
- 객체의 정보를 볼 수 있는 레벨을 조절하는 것
- 누구나 객체 안에 모든 변수를 볼 필요가 없음
1) 객체를 사용하는 사용자가 임의로 정보 수정
2) 필요 없는 정보에는 접근 할 필요가 없음
3) 소스의 보호
4. decorate
- 사전에 알아둬야 할 개념(first-class objects, inner function, decorator)
4.1 first-class objects
- 일등 함수 또는 일등 객체
- 변수나 데이터 구조에 할당이 가능한 객체
- 파라미터로 전달이 가능하고 리턴 값으로도 활용된다. 즉, 함수를 변수로 사용할 수 있다.
4.2 inner function
- 함수 내에 또 다른 함수가 있는 것
def print_msg(msg):
def printer():
print(msg)
printer()
print_msg("Hello, Python")
- closures : inner function을 return값으로 반환해주는 것
def tag_func(tag,text):
text=text
tag=tag
def inner_func():
return '<{0}>{1}<{0}>'.format(tag,text)
return inner_func
h1_func = tag_func('title','This is Python Class')
# <title>This is Python Class<title>
p_func = tag_func('p','Data Academy')
# <p>Data Academy<p>
4.3 decorator function
- 복잡한 클로져 함수를 간단하게한다.
def asterisk(func):
def inner(*args,**kwargs):
print("*"*30)
func(*args, **kwargs)
print("*"*30)
return inner
def percent(func):
def inner(*args, **kwargs):
print("%"*30)
func(*args, **kwargs)
print("%"*30)
return inner
@star
@percent
def printer(msg)
print(msg)
printer("Hello")
'''
****************************************
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Hello
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
****************************************
''''BoostCamp AI Tech - U Stage' 카테고리의 다른 글
| BoostCamp AI Tech - Day06 (0) | 2021.01.25 |
|---|---|
| BoostCamp AI Tech - Day05 (0) | 2021.01.22 |
| BoostCamp AI Tech - Day03 (0) | 2021.01.20 |
| BoostCamp AI Tech - Day02 (0) | 2021.01.19 |
| BoostCamp AI Tech - Day01 (0) | 2021.01.18 |
댓글