본문 바로가기

Python으로 웹 스크래퍼 만들기

Python으로 웹 스크래퍼 만들기 복습 14일차[객체지향(OOP), Class, Instance, Properties, Method] (Feat. 노마드코더)

본 포스팅은 노마드코더님의 온라인 강의에 대한 복습을 기록하기 위한 포스팅입니다.

※ 본 포스팅의 내용은 강의를 들은 후 필자의 개인적인 의견을 기재한 것이니, 정답이 아닐 수 있음을 참고하십시오.

강의 소개 : 파이썬으로 웹 스크래퍼 만들기 (2주 완성반)
  -. 내용 : 파이썬 기초 (타입, 변수, 함수, 클래스 등 및 웹 스크래퍼 코드 작성법)
  -. 비용 : 100% 무료 강의
  -. 비고 : 한글 자막 제공 / 강의 100% 완료 시 10% 할인 쿠폰 제공
온라인 강의 : https://nomadcoders.co/
    /    풀스택 개발자 로드맵 : https://nomadcoders.co/roadmap
유튜브 채널 : https://www.youtube.com/channel/UCUpJs89fSBXNolQGOYKn0YQ
 

노마드 코더 Nomad Coders

한국인 린과 콜롬비아인 니꼴라스의 프로젝트 "노마드 코더" 입니다. 2015년 떠나, 현재까지 원하는 곳에서 일하며, 살고 있습니다. + + Nomad Academy: https://nomadcoders.co

www.youtube.com


 

#3.0 Django is AWESOME & #3.1 *args **kwargs

  1) Django 란?

    -. 파이썬만을 이용하여 Front End ~ Back End API를 만들 수 있게 해주는 웹 프레임워크입니다.

    -. 엄청 큰 커뮤니티를 가지고 있어 문제 해결을 위한 정보가 많고, 미리 완성된 코드를 많이 찾을 수 있습니다.

    -. Documents가 잘 작성되어 있고, 한글화도 되어있어 접근이 용이하다.

    -. Django를 이용하여 만들어진 사이트들은 아래와 같습니다.

        * Instagram, Pinterest, Mozilla, Bitbucket 등 (Wikipedia 참조)

 

    -. 여기까지만 알아두고, 본 강의에서는 Django를 사용하지 않는다는 점 알아두시기 바랍니다.

 

  2) Arguments & Keyword Arguments

    -. 파이썬에서는 기본적으로 Argument(이하 인자)의 수를 정해놓고 사용해야 한다.

def plus(a, b):
  return a + b

print(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)

plus(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)

Python으로 웹 스크래퍼 만들기 복습 14일차 1

    -. 위 코드를 보면 print()의 경우 인자의 수가 제한이 없는 것을 볼 수 있다.

    -. 하지만 plus()의 경우 인자를 2개만 받아야하고, 2개보다 적거나 많으면 문제가 발생하는 것을 볼 수있다.

def plus(a, b, *args):
  print(args)
  return a + b

print(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)

plus(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)

Python으로 웹 스크래퍼 만들기 복습 14일차 2

    -. 하지만 위 코드와 같이 *args를 인자로 가질 경우 개수에 상관없이 Tuple 형태로 인자를 받는 것을 볼 수 있다.

def plus(a, b, *args):
  print(args)
  return a + b

plus(1, 1, 1, 1, 1, aa=True, bb=True, cc=True, dd=True, ee=True, ff=True, gg=True)

Python으로 웹 스크래퍼 만들기 복습 14일차 3

    -. 위 코드의 경우 plus() 함수가 Keyword Argument를 가지고 있어야 한다는 에러가 발생한다.

def plus(a, b, *args, **kwargs):
  print(args)
  print(kwargs)
  return a + b

plus(1, 1, 1, 1, 1, aa=True, bb=True, cc=True, dd=True, ee=True, ff=True, gg=True)

Python으로 웹 스크래퍼 만들기 복습 14일차 4

    -. **kwargs를 인자로 가질 경우 Keyword 인자의 개수에 상관없이 Dictionary 형태로 인자를 받는 것을 볼 수 있다.

 

    -. 여기서 Positional ArgumentKeyword Argument의 차이를 알아 두어야 한다.

        * Positional Argument : 위치에 의한 인자로 어떤 값이 전달되어도 무조건 순서대로 인자 값이 대입된다.

        * Keyword Argument : 위치에 상관없이 Keyword에 의하여 값이 대입된다.

 

def plus(*args):
  result = 0
  
  for number in args:
    result += number
  return result

def minus(*args):
  result = 0
  
  for number in args:
    result -= number
  return result

p_result = plus(1, 2, 3, 4, 1 ,1, 6, 3, 1, 3, 6, 7, 8, 3, 5, 6 ,7)
m_result = minus(1, 2, 3, 4, 1 ,1, 6, 3, 1, 3, 6, 7, 8, 3, 5, 6 ,7)

print(f"plus : {p_result}, minus : {m_result}")

Python으로 웹 스크래퍼 만들기 복습 14일차 5

    -. *args를 이용하면 위와 같이 간단한 계산기를 만들 수 있다.

 

#3.2 Intro to OOP & #3.3 Methods part One

  1) 객체지향 프로그래밍(OOP)이란?

    -. 객체지향 프로그래밍(Object-Oriented Programming)

        * 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위(객체)들의 모임으로 파악하고자 하는 것

        * 유연하고 변경이 용이하여 대규모 프로젝트에 많이 사용된다.

        * 직관적인 코드 분석이 가능하여 개발/보수가 쉽게 이루어진다.

 

    -. 객체지향 프로그래밍 언어의 종류

        * C++, Java, C#, Dart, Swift, Ruby 등등

 

  2) Class란?

    -. 객체의 변수, 메서드들의 집합 = 동일한 속성과 행위를 수행하는 객체의 집합

예를 들어 회사 클래스와 회사원 클래스가 있다고 치자,
회사와 회사원은 분명히 다른 일을 수행(메서드)하며, 다른 속성(변수)을 가지고 있다.
그렇기 때문에 회사와 회사원은 다른 클래스라고 볼 수 있다.
그리고 회사와 회사원은 각각 여러 회사와, 여러 회사원이 존재할 것이다.
여기서 각각의 회사들이 동일한 객체라고 할 수 있는가?
동일한 객체이다. 왜냐하면 모든 회사는 "사업자번호, 회사명, 주소"라는 속성"지급"이라는 행위를 수행한다.
그렇기 때문에 A, B, C 회사들은 회사라는 하나의 객체로 볼 수 있고, 각각의 회사들은 인스턴스라고 볼 수 있다.

클래스 = "설계도", 인스턴스 = "설계도를 보고 만든 물건"라고 생각하며 간단하다 (Nico! Awesome!!)

Python으로 웹 스크래퍼 만들기 복습 14일차 6

class Car():
  wheels = 4
  doors = 4
  windows = 6
  seats = 2

porche = Car()

print(porche.windows)

    -. 위와 같이 Car라는 클래스를 만들어두고, porche라는 인스턴스를 만들어서 사용 할 수 있는데, 

    -. 이때 porche라는 인스턴스Car 클래스변수메서드를 가지고 태어난다

 

class Car():
  wheels = 4
  doors = 4
  windows = 6
  seats = 2

porche = Car()
porche.color = "Red"

bugati = Car()

print(f"porche Color : {porche.color}")
print(f"bugati Color : {bugati.color}")

Python으로 웹 스크래퍼 만들기 복습 14일차 7

    -. 또한 인스턴스를 확장할 수도 있는데, 위와 같이 porche 인스턴스에서 color라는 변수를 추가하면,

    -. porche 인스턴스에는 color변수가 있지만, bugati 인스턴스에는 color변수가 없으므로 에러가 발생한다.

 

class Car():
  wheels = 4
  doors = 4
  windows = 6
  seats = 2

porche = Car()
porche.color = "Red"

bugati = Car()
bugati.color = "white"

print(f"porche Color : {porche.color}")
print(f"bugati Color : {bugati.color}")

Python으로 웹 스크래퍼 만들기 복습 14일차 8

    -. 그리고 bugati 인스턴스color변수를 지정하면 서로 다른 color를 가지는 것을 볼 수 있다.

 

  3) 메서드(Method)란?

    -. function = Method 즉, 어떠한 행위를 실행하는 것들을 메서드라고 한다.

    -. 정확하게는 Class안에 있는 FunctionMethod라고 한다.

class Car():
  wheels = 4
  doors = 4
  windows = 6
  seats = 2

  def start():
    print("I Started")

porche = Car()
porche.start()

    -. 위 코드를 보면 Car() 클래스start() 라는 메서드를 가지고 있다.

    -. 그리고 porche라는 인스턴스를 만들고, start() 메서드를 실행하였다. 과연, 이 코드는 정상적으로 작동할 것인가?

Python으로 웹 스크래퍼 만들기 복습 14일차 9

    -. 안타깝게도 에러가 발생한다. 하지만 에러 메시지를 보면 이상한 점이 있다.

    -. Car() 클래스start() 메서드는 0개의 argument(인자)로 구성되어 있고

    -. porche 인스턴스0개의 인자로 start()를 호출했다.

    -. 하지만 메시지에서는 1개의 인자가 주어져 있다고 한다.

    -. 그렇다면 누가 인자를 주었는가? 정답은 파이썬이다.

    -. 파이썬은 모든 메서드를 실행할 때 하나의 인자를 함께 사용하는데 그것은 바로 self이다.

    -. 그리고 모든 메서드의 첫 번째 인자는self(메서드를 호출하는 인스턴스)이다. (self를 다른 이름으로 해도 된다.)

class Car():
  wheels = 4
  doors = 4
  windows = 6
  seats = 2

  def start(potato):
    print(potato)
    print("I Started")

porche = Car()
porche.color = "Red"
porche.start()

    -. 위 코드를 보면 start메서드는 potato라는 인자를 갖고 있고, potato"I Started"을 출력하는 행위를 한다.

Python으로 웹 스크래퍼 만들기 복습 14일차 10

    -. 그리고 코드를 실행하면 potato가 "__main__. Car"라는 것을 알 수 있다.

class Car():
  wheels = 4
  doors = 4
  windows = 6
  seats = 2

  def start(potato):
    print(potato.color)
    print("I Started")

porche = Car()
porche.color = "Red"
porche.start()

Python으로 웹 스크래퍼 만들기 복습 14일차 11

    -. 그리고 potatocolor 변수를 출력하면 "Red"가 나온다.

    -. 이 것은 potatoporche라는 인스턴스 자신이라는 말과 같다. 즉, potato = self 인 것이다.

    -. 물론 다른 언어에서는 이렇게 작동하지 않는다. 파이썬에서만!! 이렇게 작동한다는 것을 알아두어야 한다.

        * 파이썬의 porche.start() 는 다른 언어의 porche.start(porche)와 같은 개념이다.

 

 

※ 본 포스팅의 내용은 강의를 들은 후 필자의 개인적인 의견을 기재한 것으로,

   정답이 아닐 수 있음을 참고하십시오.

 


이상으로 Python으로 웹 스크래퍼 만들기 복습 14일 차를 마치겠습니다.

 

Python으로 웹 스크래퍼 만들기 복습 14일차 12