이번 강의에서는 객체 지향 프로그래밍 언어, Object Oriented Programming(OOP)에 대해서 배웁니다. OOP는 프로그래밍 언어를 배우는 데 있어서 매우 중요한 개념입니다. python도 OOP 형태로 구성되어 있기도 하지만, python 이외의 언어인 JAVA, C++, C# 같은 언어들이 모두 OOP 기반의 언어이기 때문입니다. OOP를 배우는 것은 이전에 우리가 if 문이나 loop문을 배우듯이 프로그래밍 언어를 배우는 데 있어 가장 기본적인 개념입니다.
class SoccerPlayer(object):
def __init__(self, name, position, back_number):
self.name = name
self.position = position
self.back_number = back_number
def change_backNumber(self, new_number):
print('선수의 등번호를 변경합니다: From {} to {}'.format(self.back_number, new_number))
self.back_number = ner_number
__init__
(객체 초기화 예약 함수), self
를 사용self
를 추가해야만 class 함수로 인정됨❗️self
는 생성된 instance 자신을 의미함
❗️python에서 __
는 특수한 예약 함수나 변수 그리고 함수명 변경(맨글링)으로 사용
부모 class를 상속함으로써, 부모 class의 속성과 행동을 모두 그대로 사용할 수 있는 것을 의미합니다. 하지만 class 자체는 다른 class로 정의됩니다.
class Person(object): # 부모 class
def __init__(self, name, age):
self.name = name
self.age = age
class Korean(Person): # 자식 class
def __init(self, name, age, language):
super().__init(name, age) # super()는 부모 class의 속성을 그대로 가져오는 것을 의미함
self.language = language # language는 부모 class에 존재하지 않았던 속성
부모 class에서 상속받은 같은 이름의 method를 overriding하여 기능을 확장하거나 변경하는 것을 의미합니다.
❗️overriding: 슈퍼클래스를 상속받은 서브클래스에서 슈퍼클래스의 메소드를 같은 이름, 같은 반환값, 같은 인자로 메소드 내의 로직을 새롭게 정의하는 것
객체의 정보를 볼 수 있는 권한을 조절하는 것을 의미합니다.
하나의 객체에 대해 그 객체가 특정한 목적을 위한 필요한 변수나 메소드를 하나로 묶는 것을 의미합니다.
# 일반적인 class 구현
class Inventory(object):
def __init__(self):
self.items = []
def add_newItem():
pass
my_inventory = Inventory()
my_inventory.items
-> []
# items 가시성 조절
class Inventory(object):
def __init__(self):
self.__items = [] # __ 로 items를 접근하지 못하도록 함
def add_newItem()
my_inventory = Inventory()
my_inventory.__items
-> AttributeError: 'Inventory' object has no attribute 'items'
# poperty decorator
class Inventory(object):
def __init__(self):
self.__items = [] # __ 로 items를 접근하지 못하도록 함
@property # property decorator, 숨겨진 변수를 반환하게 해줌
def items(self):
return self.__items
my_inventory = Inventory()
my_inventory.items
-> []
def f(x):
return x * x
area = f
area(5)
-> 25
이번 강의에서는 파이썬 프로젝트의 기본이 되는 모듈과 패키지, 그리고 프로젝트의 개념에 대해서 배웁니다.
우리는 이미 파이썬에서 제공하는 다양한 모듈들을 사용하고 있습니다. 이러한 모듈과 패키지를 구성하고 실제로 다른 개발자가 만든 모듈을 사용하는 방법에 대해서 다루게 됩니다.
python으로 프로그램을 개발하기 위해 코드를 작성하게 되면 작게는 수천, 많게는 수만~수억 라인의 코드가 필요합니다. 이렇게 프로그램이 길어짐에 따라서, 유지 및 보수를 보다 쉽게 하기 위해서 여러 개의 파일로 구분하는 방법이 있습니다.
이 때, 각 프로그램의 역할에 따라서 코드 및 프로그램을 모듈로 나눠서 관리할 수 있습니다. 즉, 모듈은 파이썬 정의와 문장들을 담고 있는 파일이며 모듈이 모여 더 큰 프로그램을 이루게 됩니다.
import {module명}
을 해주면 해당 모듈이 메모리에 로딩됨❗️pycache 파일은 모듈을 쉽게 로딩할 수 있도록 미리 컴파일시켜놓은 파일
import {모듈}
import {모듈} as {alias}
from {모듈} import {def/class}
from {모듈} import *
패키지는 《점으로 구분된 모듈 이름》 를 써서 파이썬의 모듈 이름 공간을 구조화하는 방법입니다.
__init__.py
을 포함하고 있음__init__.py
이 없어도 패키지로 인식됨from game.graphic.render import render_test # 자식의 자식의 디렉토리
from .render import render_test # 현재 디렉토리
from ..sound.echo import echo_test # 부모의 자식 디렉토리