본문 바로가기
BoostCamp AI Tech - U Stage

BoostCamp AI Tech - Day04

by getamped 2021. 1. 21.

이번 게시글은 파이썬의 객체지향 프로그래밍이 무엇인지 알아보고자 한다.

 

※ 객체지향 프로그래밍(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

댓글