[BoostCamp] DAY4 파이썬 기초 문법#3

3 분 소요

[BoostCamp] DAY4 파이썬 기초 문법#3


1. Python OOP

OOP? Object-Oriented Progrmming의 약자로서 객채지향 프로그래밍을 의미한다.

1.Class & Object

  • 객체란? 실생활에서 일종의 물건이다. –> 속성(Attribute)와 행동(Action)을 가진다.
    • 속성 : 변수 (variable)
    • 행동 : 함수 (method)
  • OOP는 Class + Instance로 구성되어 있다.
    • Class : 설계도
    • Instance : 실제 구현체

1) Class 구현 in Python

- 1. class 선언

image

※ 알아두면 좋아요!! Python naming rule snake_case

  • 띄워쓰기 부분에 “_“사용
  • 파이썬 함수, 변수 명에 사용 ex) test_case CamelCase
  • 띄워쓰기 대신 띄어쓰기 앞 문자 대문자로 표기
  • 파이썬 class명에 사용한다.
- 2. Attribute 선언하기

우선, 객체를 초기화하기 위해 __init__을 정의해주자.

※ 알아두면 좋아요!!
__

  • 특수한 예약 함수나 변수 그리고 함수명 변경으로 사용한다. ex) __main__, __add__, __str__, __eq__
def MyClass():   
	def __init__(self, name):
    	self.name = name  #name Attribute 즉, 변수
        
- 3.method 구현하기

method구현은 기존의 함수 구현과 동일하나, self를 추가해야만 class함수로 인정된다.

class MyClass():
	def change_my_name(self, name):
    	print("이름을 {}에서 {}로 변경합니다".format(self.name, name))
        self.name = name
- 4.object(instance) 사용하기
my_class = MyClass("Tumblery")  
print("현재 나는 {}입니다".format(my_class.name))
my_class.change_my_name("happyBeagle")  
print("현재 나는 {}입니다".format(my_class.name))

2) OOP의 특징

- 1.Inheritance 상속

부모클래스로 부터 속성과 Method를 물려받은 자식 클래스를 생성하는 것
image
새는 조류의 특성을 가져온다.
이것을 상속이라고 한다.

class Birds():
	def __init__(self, feather_color):
    	self.feather_color = feather_color
        
    
    def about_me(self):
    	print("저는 조류이며 저의 깃털 색은 {}이에요.".format(self.feather_color))
        
        
class Bird(Birds):   
	def __init__(self, feather_color, species):
    	super().__init__(feather_color)
        self.species = species
        
    def about_me(self):
    	super().about_me()
        print("저는 조류과의 {}에요".format(self.species))

- 2.Polymorphism 다형성
  • 같은 이름 메소드의 내부 로직을 다르게 작성한다.
  • 파이썬에서는 Dynamic Typing 특성으로 인해 같은 부모 클래스의 상속에서 주로 일어난다.
class Animal:
	def __init__(self, name):
    	self.name = name
    
    
    def talk(self):
    	raise NotImplementedError("Subclass must implement abstract method")
        
class Cat(Animal):
	def __init__(self, name):
    	super().__init__(name)
        
       
    def  talk(self):
    	print("냐옹")
        
        
class Dog(Animal):
	def __init__(self, name):
    	super().__init__(name)
    
    
    def talk(self):
    	print(멍멍)
        
- 3.Visibility 가시성
  • 객체의 정보를 볼 수 있는 레벨을 조절
  • 누구나 객체 안의 모든 변수를 볼 필요가 없다.
    • 객체를 사용하는 사용자가 임의로 정보 수정
    • 필요없는 정보에는 접근할 필요 X
    • 코드를 보호할 필요도 있음

※ 알아두면 좋아요!!
Encapsulation

  • 캡슐화 혹은 은닉이라고 한다.
  • Class를 설계할 때, 클래스 간 감섭/정보 공유의 최소화
class Inventory(object):
	def __init__(self):
    	self.__items = []    
    
    @property    #decorator
    def items(self):
    	return self.__items   
        
  • Inventory class에서 item객체 앞에 보면 __이 있다.
    • 앞에만 __이 존재한다면 private로 정의한 것이다.
    • 그렇다면, 외부에서는 item에 접근이 불가능하다.
    • 하지만 item객체의 내용을 알고 싶다면 어떻게 해야할까?
  • 우리는 items 메소드위에 @property라는 표현을 볼 수 있다.
    • 이것이 숨겨진 변수를 반환하게 해주는 property decorator이다.
Decorate

java에서의 annotation과 같은 역할을 한다.
파이썬은 함수형 언어이다.
즉 파이썬의 함수는 일급함수라는 특성을 가진다.

※일급함수?

  • 변수나 데이터 구조에 할당이 가능한 객체
  • 매개 변수로 전달이 가능하며 리턴값으로도 사용가능하다.

※ closure?
inner function을 return값으로 반환한다.

def print_msg(msg):
	def printer():
    	print(msg)
    return printer  
    

그렇다면 decorator도 만들수 있을 까?

def star(func):
	def inner(*args):
    	print("*"*30)
        func(*args)
        print("*"*30)
   	return inner 
    
@star
def printer(msg):
	print(msg)

그런데 decorator에도 매개변수가 존재할 수 있을까?

def my_power(e):
	def wrapper(f):
    	def inner(*args):
        	result = f(*args)
            return e**result
        return inner
    return wrapper

@my_power(2)
def raise_two(2):
	return n**2

2. Module & Project

파이썬은 대부분의 라이브러리가 이미 다른 사용자에 의해 구현되어있다.
그런데 어떻게 사용을 할 수 있을 까?

1) Module & Package

- 1.Module

  • 어떤 대상의 부분 혹은 조각이다.
  • 주로 레고 블록, 벽돌에 자주 비유된다.
  • 프로그램에서는 작은 프로그램 조각들을 일컫는다.
    ex)파이썬 built-in Module,
모듈을 만들어 보자.
  • 파이썬에서 모듈은 .py 파일을 의미한다.

my_calc.py

def my_calc(a, b, c):
	return (a + b) * c

이제 해당 모듈과 같은 디렉터리내에서 새로운 .py파일을 생성해서 작성해보자.

import my_calc as c   

c.my_calc(1, 2, 3)
  • 모듈 안에는 함수와 클래스등이 존재가능하다.
  • 필요한 내용만 골라서 호출 가능하다.

※알아두자!!
Built-in Module?

  • 파이썬이 제공하는 기본 라이브러리이다
  • 별다른 조치없이 import문으로 활용가능하다.

- 2.Package

  • 모듈을 모아놓은 단위, 하나의 프로그램을 말한다.
  • 다양한 모듈들의 합이다. 폴더로 연결된다.
  • __init__, __main__등 키워드 파일명이 사용된다.
  • 다양한 오프손스들이 패키지로 관리된다.

image
위와 같은 구조를 가진 package가 있다고 생각해보자.

  1. 폴더별로 구현된 __init__.py는 무엇일까?
    • 현재 폴더가 패키지임을 알리는 초기화 스크립트이다.
    • 원래는 없을 경우 패키지로 생각하지 않으나 3.3부터는 그렇지 않다.
    • 하위폴더와 py파일을 모두 포함한다.
    • import와 __all__키워드를 사용한다.
     __all__ = ['calc', 'validator', 'type']
    
     from . import calc   
     from . import validator   
     from . import type  
    
    
  2. __main__.py는 무엇일까?
    파이썬에서 package를 실행시킬때, main으로 실행되는 파일이다.

3. 이모저모

  • 강의
    • 재미있었다. 평소 파이썬에 대해 어느정도 안다고 생각했지만 중간중간 세심하게 하나씩 설명해주시는 데에서 알게되는 부분이 있는 것이 재미있었다.
  • 피어 세션
    • 개인 공부를 하고 싶은 분들과 프로젝트를 하고 싶은 분들로 나뉘었다.
    • 나는 프로젝트를 하기로했는데 많은 것을 얻어갈 수 있었으면 좋겠다.
    • 같이 발전하는 경험이 되었으면 좋겠다.

댓글남기기