객체지향 언어란 무엇인가?! 객체지향 쉽게 배우기. 모듈, 패키지 사용 방법...(day4 ai부캠에선 뭐 배울까?)

이호용·2021년 1월 22일
0

이 페이지는 네이버커넥티드의 최성철 교수님의 교육자료를 참고했습니다.

목차.
1. Python Object Oriented Programming
2. Module and Project

Python Object Oriented Programming

객체 지향 프로그래밍 언어, Object Oriented Programming(OOP)에 대해서 배워보자.

파이썬 자체도 OOP 형태로 구성되어 있기도 하지만, 파이썬 나오기 전에 대세 언어들이였던 자바, C++, C# 같은 언어들이 모두 OOP 기반의 언어들입니다. OOP를 배우는 것은 이전에 우리가 if 문이나 loop문을 배우듯이 프로그래밍 언어를 배우는 데 있어 가장 기본적인 개념이 되었습니다.

  • c에서는 함수를 따로 묶어서 사용하는 기능이 없었는데, 객체 지향언어는, 함수를 클래스(oop) 단위로 묶어서 사용할수 잇다.

  • 데이터 베이스만 관리하는 모듈을 만들고, 사이트가 나오는 화면만나오는 모듈을 만들고, 이런식으로 나누는걸 객체 지향 기법이라고 한다.

객체지향 프로그래밍 개요

  • Object-Oriented Programming, OOP
  • 객체: 실생활에서 일종의 물건 속성(Attribute)와 행동(Action)을 가짐
  • OOP는 이러한 객체 개념을 프로그램으로 표현 속성은 변수(variable), 행동은 함수(method)로 표현됨
  • 파이썬 역시 객체 지향 프로그램 언어
  • 인공지능 축구 프로그램을 작성한다고 가정
  • 객체 종류: 팀, 선수, 심판, 공
  • Action : 선수 – 공을 차다, 패스하다. 심판 – 휘슬을 불다, 경고를 주다.
  • Attribute : 선수 – 선수 이름, 포지션, 소속팀 팀 – 팀 이름, 팀 연고지, 팀소속 선수
  • OOP는 설계도에 해당하는 클래스(class)와 실제 구현체인 인스턴스(instance) 로 나눔
  • OOP는 설계도에 해당하는 클래스(class)와 실제 구현체인 인스턴스(instance) 로 나눔(인스턴스는 객체임.)
  • 다 이해하고 들었는데도 크게 와닿지 않는다. 직접써보자.
  • 아래 사진에서 abc,ddd,eee 같은것들이 객체 또는 인스턴스 라고 하고 class는 calss이다.
    사진 1

1. 선언 방법

사진2

주의 : 함수나 변수명에서 이름을 지을떄 _ 언더바 로 구분을 햇는데, class에서는 단어를 구분할떄 대문자로 구분을 한다

2. Attribute 추가하기.

  • Attribute 추가는 init, self 와 함께! init은 객체 초기화 예약함수
    class SoccerPlayer(object):
        def __init__(self, name, position, back_number):
            self.name = name
            self.position = position
            self.back_number = back_number

파이썬에서 의 의미 (언더바 두개) : 는 특수한 예약 함수나 변수 그리고 함수명 변경(맨글링)으로 사용

사진3

  • str을 써보았다. (이런걸 메직 메소드라고한다. 종류가 많으니 한번씩 찾아보자.)

3. method 구현하기.

  • method(Action) 추가는 기존 함수와 같으나, 반드시 self 를 추가해야만 class 함수로 인정됨.
    여기서 self는 class밖에서는 class로 생성된 인스턴스로 불리고 , class 안에서는 self로 이야기 한다.

짚고 가기 Attribute 는 선언이고, 메소드는 행동이다.

oop implementation Example

4. 구현 가능한 OOP 만들기 - 노트북

  • Note를 정리하는 프로그램
  • 사용자는 Note에 뭔가를 적을 수 있다.
  • Note에는 Content가 있고, 내용을 제거할 수 있다.
  • 두 개의 노트북을 합쳐 하나로 만들 수 있다.
  • Note는 Notebook에 삽입된다.
  • Notebook은 Note가 삽일 될 때 페이지를 생성하며,
    최고 300페이지까지 저장 가능하다
  • 300 페이지가 넘으면 더 이상 노트를 삽입하지 못한다

5. oop 특성

  • 객체지향은 실제세상을 컴퓨터에 리모델링 한것.
  • inheritance (상속), polymorphism(다양성), Visibility(가시성)

1. 상속(inheritance)

  • 부모 클래스로 부터 속성과 method를 물려받은 자식 클래스를 생성하는것
  • 사용법, 클래스의 매개변수에 다른 클래스의 이름을 넣는다.
    사진 4
  • 자식클래스 init에서 super().init(name,age,gender)을 사요하면 부모클래스 ㄱ변수값들을 상속받아서도 쓸수 잇다.

2. 다형성(polymorphism)

  • 같은 이름 메소드의내부 로직을 다르게 작성
  • 함수이름은 같은데, 매게변수로 주는 입력값에 따라 하는 일이 다를경우.
  • Dynamic Typing특성으로 인해 파이썬에서는 같은 부모클ㄹ래스의 상속에서 주로 발생함.
  • 중요한 oop의 개념 그러나 너무 깊이 알필요 X
  • 아래 사진을 보면, 강아지랑 고양이 모두 talk이라는 함수를 사용하는데, 결과값이 다르게 나오는걸 볼수 잇따. (이렇게 같은 이름을 쓰되 목적에 따라서 다른 출력이 나오면, 다형성이라고한다.)
    사진 5,6

3. 가시성(visibility)

  • 객체의 정보를 볼 수 있는 레벨을 조절하는 것
  • 누구나 객체 안에 모든 변수를 볼 필요가 없음
  • 캡슐화또는 정보은닉 이라고도 한다.
  • 사용법 : init에서 변수를 세팅할떄 변수이름앞에 __변수이름 이런식으로 변수를지으면 클래스 밖에서 접근 못함.

1) 객체를 사용하는 사용자가 임의로 정보 수정
2) 필요 없는 정보에는 접근 할 필요가 없음
3) 만약 제품으로 판매한다면? 소스의 보호

데코레이터

사진 7
*property 이렇게 생긴걸 데코레이터 라고함

1. first class objects

  • 일등 함수 또는 일급객체
  • 변수나 데이터 구조에 할당이 가능한 객체
  • 파라메터로 전달이 가능 + 리턴값으로 사용
  • 그냥 함수가, 매게변수로 줄수 잇고, 변수에다가 함수 주소를 저장할수 잇다는 소리.

2. inner function

  • 함수내에 함수가 존재 할수 있다.
  • def 안에 def가 들어갈수 잇단 소리.
  • 함수안의 함수 주소를 반환할수 잇다. (클로져 함수라고 함.)
    사진 8

Module and Project

파이썬 프로젝트의 기본이 되는 모듈과 패키지, 그리고 프로젝트의 개념에 대해서 배워 봅시다.

앞서 파이썬에서 제공하는 여러가지 모듈들을 사용했습니다. 이러한 모듈과 패키지를 구성하고, 실제로 다른 개발자가 만든 모듈을 사용하는 방법을 다루어 봅시다.

모듈과 패키지.

1.모듈(module)

  • 프로그램에서는 작은 프로그램 조각들, 모듈들을 모아서 하나의 큰 프로그램을 개발함
  • 프로그램을 만들 때, 모듈을 사용한다, 또는 api를 가져다 썻다 라고 하기도 한다.
  • 프로그램을 모듈화 시키면 다른 프로그램이 사용하기 쉬움 예) 카카오톡 게임을 위한 카카오톡 접속 모듈 , Built-in Module인 모듈중에는 난수를 만드는 Random을 모듈

1. modoule 만들기.

  • 파이썬의 module == py 파일을 의미
  • 같은 폴더에 module에 해당하는 .py 파일과 사용하는 .py을 저장한후
  • import 문을 사용해서 모듈 호출
  • import를 하게 되면 모든 코드 들이 메모리에서 로딩이 일어나고, 함수나, 클래스들의 주소값을 불러오고 타고타고 하는 식으로 사용이 된다.
  • 파이썬에서도 import 파일들을 컴파일 해두고 pyc파일로 저장하기도 한다.

2. namespace

  • 모듈을 호출할 때 범위 정하는 방법을 namespace라고 함.

if name=='main'을 사용하는 이유 : immport를하게 되면 모든 함수나 클래스 그리고 메인문들이 로딩이 된다. 그런데 import할떄 로딩 시키기 싫은 부분은 제한할려고 범위를 지정할려고한다. if name=='main'을 쓰면 임포트 시킬떄 main문이 바로 실행이 안되게 할수 잇다.

3. namespace 사용법

  • Alias 설정하기 – 모듈명을 별칭으로 써서 : import fah_converter as fah
  • 모듈에서 특정 함수 또는 클래스만 호출하기 : from fah_converter import covert_c_to_f
  • 모듈에서 모든 함수 또는 클래스를 호출하기 : from fah_converter import *

2. 패키지

  • 모듈을 모아놓은 단위, 하나의 프로그램
  • 하나의 대형프로젝트를 만드는 코드의 묶음
  • 다양한 모듈들의 합, 폴더로 연결 됨
  • 다양한 오픈소스들이 모두 패키지로 관리 됨

1. 패키지 만들기.

  • 각 폴더별로 필요한 모듈을 구현함.
  • game이라는 루트 폴더에서 form 폴더이름(sound) import 파일 이름 이런식을로 불러서 사용할수 있음
  • init.py : 이전에는 이게 없으면 패키지라 간주하지 않았지만, 지금은 가능하기도함. 쓰는게 좋음, 헤더파일 같은거
  • init.py 구성 : 사용할 폴더, 또는 파일 이름들을 정리함.

오픈소스 라이브러리 사용하기.

  • 두개의 프로젝트 웹과 데이터 분석 패키지는 둘다 설치?
  • 두가지 다 설치해서 쓰다보면 충돌이 날수도 있다.)
  • 예를들면, 과거에 작성했던 프로젝트는 3.3버전의 파이썬을 사용하는데, 최근에 하고 있는 프로젝트는 3.8을 사용한다. 이런 개발환경을 다르게 설정할떄 가상환경을 사용함.

1. 가상환경 설정하기.

  • 프로젝트 진행시 필요한 패키지만 설치하는 환경
  • 가상환경 가상 머신이랑 비슷하게 생각하면 될거 같다.
  • 아래 코드 처럼 환경을 만들고 들어갈수 있다. (예시, 첫줄이 가상환경 만듬, 두번 쨰가 가상환경 실행 밑에는 파일설치해봄)
conda create -n first_project python=3.8
conda activate first_project
#conda install matplotlib
#conda install tqdm
#conda install jupyter

0개의 댓글

관련 채용 정보