Welcome! Everything is fine.

[혼공단 6주차] 혼자 공부하는 파이썬 Chapter 07-2 ~ 08 본문

자격증 및 기타 활동/한빛미디어 혼공단

[혼공단 6주차] 혼자 공부하는 파이썬 Chapter 07-2 ~ 08

개발곰발 2021. 8. 14.
728x90

💡 용어 정리

외부 모듈 : 다른사람이 만들어 제공하는 모듈.

제어 역전 : 개발자가 만든 함수를 모듈이 실행하는 것.

라이브러리 : 개발자가 모듈의 기능을 호출하는 형태와 같이 정상적인 제어를 하는 호출하는 형태와 같이 정상적인 제어를 하는 모듈.

프레임 워크 : 모듈이 개발자가 작성한 코드를 실행하는 형태의 모듈.

pip install : 외부 모듈을 설치할 때 사용하는 명령어.

엔트리 포인트 :

__name__=="__main__"

패키지 : 모듈이 모인 것.

객체 : 여러 가지 속성을 가질 수 있는 모든 것.

추상화 : 프로그램에서 필요한 요소만을 사용하여 객체를 표현하는 것. 즉, 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것.

클래스 : 객체를 쉽고 편리하게 생성하기 위해 만들어진 구문.

인스턴스 : 클래스를 기반으로 생성한 객체.

생성자 : 클래스 이름과 같은 인스턴스를 생성할 때 사용하는 함수. 클래스 내부에 __init__(self) 형태로 함수를 선언함.

소멸자 :  생성자와 반대로 인스턴스가 소멸될 때 호출되는 함수. 클래스 내부에 __del__(self) 형태로 함수를 선언함.

메소드 : 클래스가 가지고 있는 함수. 첫 번째 매개 변수로 self를 넣어야 함.

isinstance(인스턴스, 클래스) : 객체(인스턴스)가 어떤 클래스로부터 만들어졌는지 확인할 수 있는 함수.

상속 : 어떤 클래스를 기반으로 그 속성과 가능을 물려받아 새로운 클래스를 만드는 것.

오버라이드 : 부모에 정의되어 있는 함수를 자식에서 다시 정의하는 것. 재정의라고도 부름.

💡 모듈

외부 모듈

외부 모듈은 파이썬에 내장되어 있는 모듈이 아니라 다른 사람들이 만들어 배포한 모듈을 말한다. 명령 프롬프트 창에 아래와 같이 입력하여 설치한다.

pip install 모듈 이름

책에 예시로 나온 BeautifulSoup 모듈을 이용하여 기상청의 날씨 정보를 가져왔다.

from urllib import request
from bs4 import BeautifulSoup

target = request.urlopen("http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=109")

soup = BeautifulSoup(target, "html.parser")

for location in soup.select("location"):
    print("도시 :", location.select_one("city").string)
    print("날씨 :", location.select_one("wf").string)
    print("최저기온 :", location.select_one("tmn").string)
    print("최고기온 :", location.select_one("tmx").string)
    print()

출력 결과는 다음과 같다.

모듈 만들기

외부 모듈을 불러오는 것뿐만 아니라, 직접 모듈을 만들어서 사용할 수도 있다. 또한 복잡하고 구조화된 모듈을 만들 때는 패키지라는 기능을 사용한다. 다음 코드는 원의 반지름과 넓이를 구하는 간단한 모듈을 만들어 main파일에서 불러온 뒤 실행 한 것이다.

# test_module.py
PI = 3.141592

def number_input():
    output = input("숫자 입력 : ")
    return float(output)

def get_citcumference(radius):
    return 2 * PI * radius

def circle_area(radius):
    return PI * radius * radius
# main.py
import test_module as test

radius = test.number_input()
print(test.get_citcumference(radius))
print(test.circle_area(radius))

출력 결과는 다음과 같다.

💡 클래스

클래스를 이용하여 학생 이름, 과목별 성적 등을 기반으로 학생 성적 관리 프로그램을 만든다면 어떻게 해야할까? 책에 나와 있는 예시를 통하여 알아보자. 클래스에 대한 아주 기본적인 내용만 정리했다.

클래스 선언하기

클래스 이름은 캐멀케이스 규칙에 따라 단어의 앞글자를 대문자로 적는 것이 좋다. 학생 클래스를 만들 것이기 때문에 클래스의 이름을 Student로 적었다. 클래스의 내용은 아직 구현하지 않았으므로 pass로 적었다.

class Student:
	pass

인스턴스 만들기

위의 클래스를 기반으로 만든 객체를 인스턴스라고 부르며, 클래스 이름과 같은 함수를 사용하여 객체를 만든다. 이 함수를 생성자 함수라고 부른다. 아래 코드는 인스턴스를 이용하여 학생 6명이 있는 학생 리스트를 선언한 것이다.

class Student:
    pass

student = Student() # 생성자 함수

students =[
    Student(),
    Student(),
    Student(),
    Student(),
    Student(),
    Student()
]

생성자

클래스 이름과 같은 함수를 생성자라고 부르며, 아래와 같이 작성한다. 클래스 내부의 함수는 첫 번째 매개변수로 반드시 self를 입력해야한다. 여기에서 self는 '자기 자신'을 나타내는 딕셔너리다. self가 가진 속성과 기능에 접근할 때는 self.식별자 형태로 접근한다.

class Student:
    def __init__(self, 추가적인 매개변수):
        pass

메소드

클래스가 가진 함수를 메소드라고한다. 메소드를 작성할 때는 생성자와 똑같이 작성한다.

class Student:
	def 메소드 이름(self, 추가적인 매개변수):
    	pass

아래 코드는 학생 클래스에 생성자와  모든 과목의 점수를 더하는 get_sum( ) 함수와  평균을 구하는 get_average( ) 함수, 이름과 총점, 평균을 모두 출력하는 to_string( ) 함수를 가지고 있다.

class Student:
    def __init__(self,  name, korean, math, english,science):
        self.name = name
        self.korean = korean
        self.math = math
        self.english = english
        self.science = science

    def get_sum(self):
        return self.korean + self.math + self.english + self.science

    def get_average(self):
        return self.get_sum() / 4

    def to_string(self):
        return "{}\t{}\t{}".format(\
            self.name,\
            self.get_sum(),\
            self.get_average())

 따라서 전체적인 코드는 다음과 같다.

class Student:
    def __init__(self,  name, korean, math, english,science):
        self.name = name
        self.korean = korean
        self.math = math
        self.english = english
        self.science = science

    def get_sum(self):
        return self.korean + self.math + self.english + self.science

    def get_average(self):
        return self.get_sum() / 4

    def to_string(self):
        return "{}\t{}\t\t{}".format(\
            self.name,\
            self.get_sum(),\
            self.get_average())

students =[
    Student("윤인성", 87, 98, 88, 94),
    Student("연하진", 84, 86, 54, 34),
    Student("구지연", 56, 89, 96, 91),
    Student("나선주", 73, 91, 96, 47),
    Student("윤아린", 75, 92, 92, 45),
    Student("윤명월", 65, 94, 99, 98)
]

print("이름\t\t총점\t\t평균")
for student in students:
    print(student.to_string())

출력 결과는 다음과 같다.

✅ 기본미션

왜 실행이 안되는지..😞 구글을 뒤져서 여러 시도를 해봤지만 자꾸 에러가 난다. 좀 더 시도해보고 수정해봐야겠다.

다른 혼공단 분들의 블로그를 보다가 해결법을 알아냈다. flask run을 입력해 실행 할 경우, 기본적으로 app.py라는 이름으로 환경변수가 설정된다. 그렇기 때문에 나도 set FLASK_APP=beautiful_flask.py라고 대입을 해줌으로써 환경변수를 설정하고자 했는데 실패했다. 그래서 아예 파일 이름을 app.py로 바꿔서 실행했더니 성공했다. 아래는 실행 결과 페이지다.

✅ 선택미션