[U] Week 1 Day 4

나며기·2021년 1월 21일
0

부스트캠프 AI Tech

목록 보기
5/79
post-thumbnail

강의 복습 내용

[DAY 4] 파이썬 기초 문법 III

Python Object Oriented Programming

  • 객체 지향 프로그램 (Object Oriented Programming, OOP)
    • 객체: 속성(Attribute)와 행동(Action)을 가짐
    • OOP는 이러한 객체 개념을 프로그램으로 표현
    • 속성은 변수(variable), 행동은 함수(method)로 표현됨
    • 파이썬 역시 객체 지향 프로그램 언어
    • OOP는 설계도에 해당하는 클래스(class)와 실제 구현체인 인스턴스(instance)로 나눔
  • class 선언, object는 python3에서 자동 상속
    • ex) class SoccerPlayer(object):
      • class : class 예약어
      • SoccerPlayer : class 이름
      • object : 상속받는 객체명
    • 참고) Python naming rule
      • 변수와 Class명 함수명은 짓는 방식이 존재
      • snake_case : 띄워쓰기 부분에 __를 추가 뱀 처럼 늘여쓰기, 파이썬 함수 / 변수명에 사용
      • CamelCase: 띄워쓰기 부분에 대문자 낙타의 등 모양, 파이썬 Class명에 사용
    • Attribute 추가는 __init__, self와 함께! __init__은 객체 초기화 예약 함수
    • __는 특수한 예약 함수나 변수 그리고 함수명 변경(맨글링)으로 사용
    • method(Action) 추가는 기존 함수와 같으나, 반드시 self를 추가해야만 class 함수로 인정됨
    • Object 이름 선언과 함께 초기값 입력 하기
    • self : 생성된 인스턴스를 의미
  • 객체 지향 언어의 특징 (OOP characteristics)
    • Inheritance (상속) : 부모클래스로 부터 속성과 Method를 물려받은 자식 클래스를 생성 하는 것
    • Polymorphism (다형성)
      • 같은 이름 메소드의 내부 로직을 다르게 작성
      • Dynamic Typing 특성으로 인해 파이썬에서는 같은 부모클래스의 상속에서 주로 발생함
      • 중요한 OOP의 개념 그러나 너무 깊이 알 필요X
    • Visibility (가시성)
      • 객체의 정보를 볼 수 있는 레벨을 조절하는 것
      • 누구나 객체 안에 모든 변수를 볼 필요가 없음
        1) 객체를 사용하는 사용자가 임의로 정보 수정
        2) 필요 없는 정보에는 접근 할 필요가 없음
        3) 만약 제품으로 판매한다면? 소스의 보호
    • 참고) Encapsulation
      • 캡슐화 또는 정보 은닉 (Information Hiding)
      • Class를 설계할 때, 클래스 간 간섭/정보공유의 최소화
      • 캡슐을 던지듯, 인터페이스만 알아서 써야함
  • First-class objects
    • 일등함수 또는 일급 객체
    • 변수나 데이터 구조에 할당이 가능한 객체
    • 파라메터로 전달이 가능 + 리턴 값으로 사용
    • 파이썬의 함수는 일급함수
  • Inner function
    • 함수 내에 또 다른 함수가 존재
    • closures : inner function을 return값으로 반환
  • decorator function
    • 복잡한 클로져 함수를 간단하게!

Module and Project

  • Module
    • 어떤 대상의 부분 혹은 조각
    • 프로그램에서는 작은 프로그램 조각들, 모듈들을 모아서 하나의 큰 프로그램을 개발함
    • 프로그램을 모듈화 시키면 다른 프로그램이 사용하기 쉬움
  • Module 만들기
    • 파이썬의 Module == py 파일을 의미
    • 같은 폴더에 Module에 해당하는 .py 파일과 사용하는 .py을 저장한 후
    • import 문을 사용해서 module을 호출
  • Module namespace
    • 모듈을 호출할 때 범위 정하는 방법
    • 모듈 안에는 함수와 클래스 등이 존재 가능
    • 필요한 내용만 골라서 호출 할 수 있음
    • from과 import 키워드를 사용함
    • Alias 설정하기 – 모듈명을 별칭으로 써서 : import ~ as ~
    • 모듈에서 특정 함수 또는 클래스만 호출하기 : from ~ import ~
    • 모듈에서 모든 함수 또는 클래스를 호출하기 : from ~ import *
  • Built-in Modules
    • 파이썬이 기본 제공하는 라이브러리
    • 문자처리, 웹, 수학 등 다양한 모듈이 제공됨
    • 별다른 조치없이 import 문으로 활용 가능
    • 수 많은 파이썬 모듈은 어떻게 검색할 것인가?
      1) 구글신에게 물어본다
      2) 모듈을 import후 구글 검색 또는 Help 쓰기
      3) 공식 문서를 읽어본다
  • Package
    • 하나의 대형 프로젝트를 만드는 코드의 묶음
    • 다양한 모듈들의 합, 폴더로 연결됨
    • __init__ , __main__ 등 키워드 파일명이 사용됨
    • 다양한 오픈 소스들이 모두 패키지로 관리됨
  • Package 만들기
    1) 기능들을 세부적으로 나눠 폴더로 만듦
    2) 각 폴더별로 필요한 모듈을 구현함
    3) 1차 Test – python shell
    4) 폴더별로 init.py 구성하기
    • 현재 폴더가 패키지임을 알리는 초기화 스크립트
    • 없을 경우 패키지로 간주하지 않음 (3.3+ 부터는 X)
    • 하위 폴더와 py 파일(모듈)을 모두 포함함
    • import와 all keyword 사용
      5) main.py 파일 만들기
      6) 실행하기 – 패키지 이름만으로 호출하기
  • Package namespace
    • Package 내에서 다른 폴더의 모듈을 부를 때, 상대 참조로 호출하는 방법
    • 절대참조 : from game.graphic.render import render_test()
    • .현재 디렉토리 기준 : from .render import render_test()
    • .. 부모 디렉토리 기준 : from ..sound.echo import echo_test()
  • Python Virtual Environment
    • 프로젝트 진행 시 필요한 패키지만 설치하는 환경
    • 기본 인터프리터 + 프로젝트 종류별 패키지 설치
    • 다양한 패키지 관리 도구를 사용함
    • 대표적인 도구 virtualenv와 conda가 있음
virtualenv + pipconda
가장 대표적인 가상환경 관리 도구상용 가상환경도구, miniconda 기본 도구
레퍼런스+패키지 개수설치의 용이성, Windows에서 장점
  • Package 설치
    • Windows에서는 conda
    • linux, mac에서는 conda or pip

피어 세션 정리

강의 리뷰 및 Q&A

  • Python Object Oriented Programming
  • Module and Project

피어 세션의 방향성에 대한 회의

  • 대용량 데이터 처리와 관련된 스터디와 토이 프로젝트를 진행하기로 결정
  • 매주 월요일(피어 세션 직후), 수요일(피어 세션 직후), 토요일(15:00)에 스터디 계획
  • 우선, tf.data : TensorFlow 입력 파이프 라인 빌드에 대해서 공부할 예정
  • 이후, 구체적으로 스터디와 토이 프로젝트를 계획할 예정

과제 진행 상황 정리

morsecode

Homework - morsecode

리뷰 : 테스트 케이스로는 발견하지 못했던 두 가지 오류를 발견했습니다.
1. " "와 같이 공백만 있는 문자열을 정상적인 영어 문장으로 출력한 점
2. 모스부호로 작성된 문장에서 더블스페이스로 인해 "" 문자열이 생성되는 점
치명적인 오류는 아니기 때문에, 어렵지 않게 해결할 수 있었습니다.

과제 결과물에 대한 정리

morsecode

def is_validated_english_sentence(user_input):
    user_input_tmp = user_input
    for i in list(".,!?"):
        # 문장부호(.,!?)를 제외
        user_input_tmp = user_input_tmp.replace(i,"")
    # if user_input_tmp == "": 틀린 부분
    if user_input_tmp == "" or set(user_input_tmp) == set(" "): # 수정
        # 문장부호(.,!?)를 제외하고 입력값이 없거나 빈칸만 입력했을 경우, False
        result = False
        return result
    for i in list("""0123456789_@#$%^&*()-+=[]{}"';:\|`~"""):
        if i in user_input_tmp:
            # 숫자가 포함되어 있거나, _@#$%^&*()-+=[]{}"';:\|`~ 와 같은 특수문자가 포함되어 있는 경우, False
            result = False
            return result
    # 위 경우에 모두 해당하지 않으면, True
    result = True
    return result
  • set(user_input_tmp) == set(" ")을 추가하여 공백만 있는 문자열인 경우에도 False로 retrun 할 수 있도록 했습니다.
def is_validated_morse_code(user_input):
    # user_input_split = user_input.split(" ") 틀린 부분
    user_input_split = user_input.split() # 수정
    # user_input을 공백을 기준으로 분리
    morse_code = get_morse_code_dict().values()
    # 모스 부호를 불러오기
    for i in user_input_split:
        # 모스 부호의 해당 여부만 파악하면, "-","."," "외 다른 글자가 포함되어 있는 경우는 고려하지 않아도 괜찮음
        if i not in morse_code:
            # get_morse_code_dict 함수에 정의된 Morse Code 부호외 다른 코드가 입력된 경우, False
            result = False
            break
        else:
            # 그렇지 않으면 True
            result = True
    return result
  • split(" ")인 경우, 더블스페이스는 ""도 분리되어 오류를 발생합니다. 따라서, split()으로 수정하여 모든 공백을 기준으로 분리될 수 있도록 했습니다.

총평

평소 인공지능의 성능에만 관심 있었지, 대용량 데이터 처리나 모델 경량화에 대해서는 진지하게 생각해본 적이 없습니다.
피어세션을 통해서 대용량 데이터 처리나 모델 경량화에 관한 이야기를 듣게 되었는데, 제가 우물 안 개구리였다는 것을 깨달았습니다.
그리고 이번 부스트캠프를 통해서, 꼭 배워 나가야겠다고 다짐했습니다.
이후 학습하게 될 모델 경량화를 제외하고, 피어세션을 통해 대용량 데이터 처리에 대해서 제대로 배운다면 의미 있는 시간이 되리라고 생각합니다.

오늘보다 더 성장한 내일의 저를 기대하며, 내일 뵙도록 하겠습니다.

읽어주셔서 감사합니다!

profile
PLUS ULTRA

0개의 댓글