개요
- OOP
- Module and Project
1.객체지향 프로그래밍
1.1 OOP(Object Oriented Programming)
프로그램을 작성할 때 코드 순서대로 실행하지 않고, 관련된 주체들 중심으로 작성하여 연결하는 것을 의미한다. <> 절차지향 프로그래밍
- 파이썬 : 객체 지향 프로그램 언어
- 설계도에 해당되며, 클래스(class)와 실제 구현체인 인스턴스(instance)로 나뉜다.
1.2 Object 객체
실생활에서 일종의 물건에 해당되며, 물건의 속성은 변수(Variable), 행동은 함수(Method)로 표현된다.
1.2.1 Class 선언하기
< 변수, Class명, 함수명 작성 Rule >
- Snake_case : 띄워쓰기 부분에 "_" 추가, 파이썬 함수/변수명에 사용
ex) Professor_name
- CamelCase : 띄워쓰기 부분에 대문자, 파이썬 Class명에 사용
ex) ProfessorName
1.2.2 Attribute 추가하기
- __init__와 self 사용
__ : 특수한 예약 함수나 변수 그리고 함수명 변경(맨글링)으로 사용한다.
ex) __main__, __add__, __str__, __eq__ 등 ⇒ magic method
__init__ : 객체 초기화 예약 함수, 객체의 초기 정보 선언한다.
self : 생성된 인스턴스 자신. self를 추가해야만 class 함수로 인정된다.
1.2.3 objects(instance)
- object 이름 선언과 함께 초기값 입력하기
1.2.4 class 구현하기(Example)
class SoccerPlayer(object):
def __init__(self, name, position, back_number):
self.name = name
self.position = position
self.back_number = back_number
def change_back_number(self, new_number):
print("선수의 등번호를 변경합니다 : From %d to %d" % (self.back_number, new_number))
self.back_number = new_number
jinhyun = SoccerPlayer("Jinhyun", "MF", 10)
print("현재 선수의 등번호는 :", jinhyun.back_number)
jinhyun.change_back_number(5)
print("현재 선수의 등번호는 :", jinhyun.back_number)
1.3 OOP characteristics
- inheritance 상속
- 부모클래스로부터 속성과 Method를 물려받은 자식 클래스를 생성하는 것
- 부모클래스를 불러오는 self인 super() 를 사용한다.
- super() 를 통해 속성값을 추가하거나, 중복상속문을 해결할 수 있다.
- polymorphism 다형성
- 같은 이름 메소드의 내부 로직을 다르게 작성하는 것
- 파이썬의 Dynamic Typing 특성으로 인해 같은 부모클래스의 상속에서 주로 발생한다.
- 변수 타입에 구애받지 않으며, 같은 함수명인데 다른 역할 가능하다.
- visibility 가시성
- 객체의 정보를 볼 수 있는 레벨을 조절하는 것
- 객체 안의 정보를 아무나 보거나 수정하지 못하도록 조절하는 것을 말한다.
- 누구나 객체object 안 모든 변수를 볼 필요는 없다.
- Encapsulation 은닉
- 캡슐화 또는 정보 은닉(information Hiding)이라 한다.
- Class를 설계할 때, 클래스 간 간섭/정보 공유를 최소화하기 위해 사용한다.
- __ 를 변수 앞에 넣어 private변수로 선언해주어 타객체가 접근 불가능하게 만들어준다. ex) self.__items = []
1.4 Decorate
필요한 개념들 1.first-class objects , 2.inner function , 3.decorator 가 있다.
- first-class objects
- 변수나 데이터 구조에 할당이 가능한 객체로, 일등함수 또는 일급 객체라 부른다.
- parameter를 통해 전달이 가능하며, return 값으로 사용할 수 있다.
- 함수를 파라미터로 사용 가능하다.
- 참고로 파이썬의 함수는 모두 일급함수이다.
- inner function
- 함수 내 존재하는 함수
- 이 내부함수가 자신을 둘러싼 함수 내의 상태값을 참조하고, 둘러싼 함수가 내부함수를 반환해준다면 이 내부함수를 클로저(Closer)라 한다.
- decorator
- 클로저 Closer 를 간단하게 구현할 수 있게 도와주는 function(@)
2. Module and Project
python은 대부분의 라이브러리가 이미 다른 사용자에 의해 구현되어 있다.
python에서 모듈 Module은 .py파일을 의미하며, 하나의 대형 프로젝트를 위해 다양한 모듈과 폴더를 모아둔 것을 패키지 Package 라 한다.
패키지 Package를 공개하는 것이 프로젝트 Project 이다.
2.1 Module
- 프로그램에서 작은 프로그램 조각들, 모듈들을 모아서 하나의 큰 프로그램을 개발한다.
- 프로그램을 모듈화시키면 다른 프로그램이 사용하기 쉽다.
- import 문을 사용해 Module을 호출한다.
- from 과 import 를 사용해 모듈 안 필요한 함수와 클래스만 불러올 수 있다.
- as 를 사용해 Alias 별칭을 붙여 사용 가능하다.
- 모듈에서 모든 함수 또는 클래스 호출할 때는 *을 사용한다. from ~ import *
- Built-in Module
- python이 기본 제공하는 라이브러리
- 문자처리, 웹, 수학 등 다양한 모듈을 제공한다.
- import 문으로 호출가능하다.
2.2 Package
- 모듈을 모아놓은 단위, 하나의 프로그램
- 하나의 대형 프로젝트를 만드는 코드의 묶음
- 다양한 모듈들의 합, 폴더로 연결된다.
- __init__ 이나 __main__ 등 키워드 파일명이 사용된다.
- 다양한 오픈 소스들이 모두 패키지로 관리된다.
<package 만들기>
1) 기능들을 세부적으로 나눠 폴더로 만든다
2) 각 폴더별로 필요한 모듈을 구현한다.
3) 폴더별로 __init__.py 파일 생성한다.
- 현재 폴더가 패키지임을 알리는 초기화 스크립트
- python 3.3부터는 없어도 패키지로 간주한다.
- 하위폴더와 py 파일(모듈)을 모두 포함한다.
- import 와 __all__keyword 사용한다.
- 폴더별로 __main__.py 파일 생성한다.
Package 내에서 다른 폴더의 모듈을 부를때, 상대 참조로 호출하는 방법
from game.graphic.render import render_test()
from .render import render_test()
# '.'을 붙여 현재 디렉토리의 모듈을 부른다
from ..sound.echo import echo_test()
# '..'을 붙여 부모 디렉토리 호출
Visual Environment 가상환경 설정
- 프로젝트 진행시 필요한 패키지만 설치하는 환경 생성
- 기본 인터프리터 + 프로젝트 종류별 패키지를 설치한다.
- 다양한 패키지 관리 도구가 있다. ex) virtualenv, conda
virtualenv + pip
- 가장 대표적인 가상환경 관리 도구
- 레퍼런스+패키지 개수가 다양하다
conda
- 상용 가상환경 도구(miniconda)
- 설치 용이
python은 C를 컴파일하여 실행하는데, pip은 컴파일된 코드가 없는 경우 존재한다.
conda는 필요한 컴파일 코드를 자동으로 설치해준다. 따라서 일일이 컴파일 코드 호출 필요 X
conda 가상환경 생성하기
conda create -n my_project python=3.9 입력하기
my_project : 가상환경 이름(임의)
conda activate my_project : 가상환경 호출
conda deactivate : 가상환경 해제
conda install <패키지명> : 설치하고자하는 패키지명 입력
<Example>
conda install matplotlib : 그래프 관리 패키지 matplotlib 설치
conda install tqdm : loop이 얼마나 남았는지 표시
- matplotlib
- 다양한 데이터 분석 도구들과 함께 사용된다.
- 대표적인 파이썬 그래프 관리 패키지
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()
from tqdm import tqdm
import time #남은 실행시간 표시
for i in tqdm(range(100000)):
if i % 1000 == 0:
time.sleep(1)
3. 피어세션
__dict__를 사용하면
파이썬에서 private 함수를 다른 명칭으로 저장해놓은 것을 찾을 수 있다.
그래서 사실상 다른 사람 사용 가능?
decorator 마지막 문제
generate_power(2)(raise_two)
generate_power(2)(raise_two)
로 실행한 거와 같다?
과제
MorseCode 프로그램 구현하기
'Boostcamp > U1' 카테고리의 다른 글
[1-3] python 기초 문법 (2) (0) | 2022.05.25 |
---|---|
[1-2] python 기초 문법 (1) (0) | 2021.11.19 |
[1-1] python 개발환경 (0) | 2021.11.19 |