본문 바로가기

Boostcamp/U1

[1-4] python 기초 문법 (3)

개요

  • 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를 물려받은 자식 클래스를 생성하는 것
    • 부모클래스를 불러오는 selfsuper() 를 사용한다.
    • 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을 호출한다.
  • fromimport 를 사용해 모듈 안 필요한 함수와 클래스만 불러올 수 있다.
  • 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 사용한다.

  1. 폴더별로 __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