TIL — 객체 지향 프로그래밍 (1)

이성보·2020년 11월 1일
0

python

목록 보기
4/7
post-thumbnail

참고 자료
https://www.py4e.com/lessons/servces
찰스 세브란스. 『데이터를 다루며 배우는 파이썬』. 인사이트, 2019.

더 규모 있는 프로그램 관리하기

프로그램 코드가 길어질수록 이해하기 쉽게 코드를 쓰는 것이 더욱 중요합니다.

객체 지향 프로그래밍이란 백 만 줄짜리 코드에서 500줄의 코드만 집중해서 볼 수 있도록 하며, 그 순간에는 나머지 999,500줄의 코드는 무시해도 이해할 수 있도록 코드를 조정하는 방법입니다.

프로그램 시작하기

객체 지향 프로그래밍의 한 가지 방법은 프로그램을 여러 개의 '구역(zone)'으로 나누는 것입니다.

뷰티풀수프 라이브러리를 사용해 웹 페이지의 링크를 추출했습니다. 코드를 보면 다른 객체를 연결해 작업을 처리하는 것을 알 수 있습니다.

# 먼저, BeautifulSoup 설치가 필요합니다.
# https://pypi.python.org/pypi/beautifulsoup4

# 또는, 아래 파일을 내려받고,
# http://www.py4e.com/code3/bs4.zip
# 예제 코드와 같은 디렉터리에 압축을 풉니다.

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl

# SSL 인증서 오류는 무시합니다.
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

url = input('Enter - ')
html = urllib.request.urlopen(url, context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')

# 모든 a 태그를 가져옵니다.
tags = soup('a')
for tag in tags:
    print(tag.get('href', None))
    
# Code: https://www.py4e.com/code3/urllinks.py

코드에서는 url을 읽고 문자열에 넣은 다음, urllib에 전달해서 웹에서 데이터를 가져옵니다. urllib는 데이터를 가져오기 위한, 네트워크 연결을 맺기 위해 socket 라이브러리를 사용합니다. urllib로 가져온 문자열을 BeautifulSoup를 이용해 파싱합니다. BeautifulSoup는 또 다른 객체인 html.parser를 써서 객체를 반환합니다. 반환된 객체의 tag() 메서드를 호출해서 태그 객체의 딕셔너리를 얻은 다음, 루프를 돌면서 각 태그의 get() 메서드를 호출해 'href'속성을 출력합니다.

여기서 중요한 점은 프로그램이 어떻게 작동하는지 완전히 이해하는 것이 아니라, 객체들 간의 상호작용과 정보의 흐름을 어떻게 구성하고 조정해서 프로그램을 만들었는지 보는 것입니다.

문제 세분화: 캡슐화

객체 지향 접근법의 장점 중 하나는 복잡성을 숨길 수 있다는 것입니다.
예를 들어 urllib나 뷰티풀수프의 사용법은 알아야 하지만, 이 라이브러리들이 내부적으로 어떻게 동작하는지는 알 필요가 없습니다. 즉, 프로그램의 다른 부분은 무시한 채로, 오로지 해결해야 할 문제에만 집중할 수 있게 해줍니다.

'캡슐화(encapsulation)'는 이와 같이 객체 내부의 상세 구현에 관해서는 몰라도 좋다는 것을 나타낼 때 사용하는 용어입니다. 즉, 객체 내부가 어떻게 작동해서 작업을 처리하는지 자세히 알지 못하더라도, 그 객체를 사용할 수 있다는 것을 의미합니다.

0개의 댓글