bootcamp

250101 점프 투 파이썬 (5)

밤하늘바라기s 2025. 1. 1. 23:39

이하 내용은 강의와 위키독스의 e북을 참고하여 정리하였다.

강의 : 파이썬 기초 2024점프투파이썬 - YouTube

e북 : 점프 투 파이썬 - WikiDocs

 

1. 파이썬 날개달기

1)클래스

  • 반복되는 변수와 메서드(함수)를 정해놓은 틀.
  • 즉, 클래스는 설계도, 그로 인해 만들어내는 것을 객체라고  할 수 있음.
  • "class 클래스_이름: 클래스 내용" 형식으로 작성 가능. 클래스 이름은 보통 대문자로 시작.
  • 클래스 내에서 메서드를 정의할 때, 첫 번째 매개변수에는 객체가 들어가게 됨.
  • 특정 개체가 갖고 있는 변수를 개체변수 혹은 속성 이라고 한다.
class FourCal: # 클래스 : 객체를 생성하기 위한 설계도
    def __init__(self, first, second): # 생성자 : 객체가 생성될 때 자동으로 호출되는 메서드
        self.first = first
        self.second = second
    def setdata(self, first, second): # 메서드 : 클래스 안에 구현된 함수
        self.first = first # self : 객체 자신을 가리킴
        self.second = second # self.first, self.second : 객체의 속성
    def add(self):
        return self.first + self.second
        
a = FourCal()
a.setdata(2, 3)
print(a.add()) # 결과값 5
  • 상속 기능을 통해서 부모가 가진 함수를 그대로 사용 가능.
  • 같은 함수를 정의할 경우 덮어씌워지며, 새로운 함수를 정의하여 사용할 수도 있음
class MoreFourCal(FourCal): # 상속 : 부모 클래스의 모든 속성과 메서드를 자식 클래스가 물려받는 것
    def __init__(self, *args): # 생성자를 덮어씌움, 여러 개의 인자를 받을 수 있도록 수정
        self.args = args
        result = 0
        if self.args is None:
            return result
    def setdata(self, *args): # 상속받은 메서드는 덮어씌워짐
        self.args = args
        for idx, value in enumerate(args): # enumerate : 인덱스와 값을 함께 반환
            setattr(self, f'var{idx+1}', value)
            # self.var1 = args[0] , self.var2 = args[1]
            # f-string : 문자열 앞에 f를 붙이면 문자열 안에 변수를 사용할 수 있음
    def add(self, *args):
        result = 0
        if args:
            self.setdata(*args)
        if self.args is None:
            return result
        for i in range(1, len(self.args)+1):
            result += getattr(self, f'var{i}') # self.var1 + self.var2
        return result
    def pow(self, *args): # 상속받아서 새로운 메서드 추가
        if args:
            self.setdata(*args)
        if self.args is None:
            return 0
        result = getattr(self, 'var1') # result에 첫번째 값을 넣어줌
        for i in range(2, len(self.args)+1):
            result **= getattr(self, f'var{i}')
            # 두번째 값부터 차례대로 result에 제곱하여 넣어줌
        return result
        
b = MoreFourCal()
b.setdata(2, 3, 4)
print(b.add()) # 결과값 9
print(b.pow()) # 결과값 4096
  • 클래스 공통으로 사용되는 변수는 클래스 변수라고 한다.
class family:
    lastname = '김' # 클래스 변수 : 클래스 안에 선언된 변수

a = family()
b = family()
print(a.lastname) # 결과값 김
print(b.lastname) # 결과값 김
a.lastname = '전'
print(a.lastname) # 결과값 전
print(b.lastname) # 결과값 김

 

2) 모듈

  • 모듈은 함수, 변수, 클래스 등을 모아둔 파이썬 파일.
  • import 모듈_이름 을 통해 해당 모듈에 있는 함수 등을 사용 가능.
  • 모듈을 직접 실행했을 때만 실행되는 코드를 넣고 싶을 때에는 [ if __name__ == "__main__" ] 을 이용.
  • 다른 디렉터리에 있는 모듈을 가져올 경우, import sys 이후 sys.path.append("모듈_경로") 입력을 통해 사용 가능. 단, 경로는 절대경로만 가능.
  • import 모듈_이름 as 약어 라는 식으로, 모듈 이름을 전부 적지 않고 약어 만으로도 호출이 가능하게 만들 수 있음.
class Math(): # 클래스 생성
    def __init__(self, first, second):
        self.first = first
        self.second = second
    def add(self):
        return self.first + self.second
    
if __name__ == "__main__":
    # __name__ : 모듈의 이름을 저장하는 변수
    # 모듈이 메인으로 실행될 때만 실행되는 코드
    print("모드가 메인으로 실행됨")
import mod1
# mod1 모듈을 불러옴

var1 = mod1.Math(2,3)
# mod1.Math 클래스의 객체 var1 생성
print(var1.add())
# 결과값 5

 

3) 패키지

  • 패키지는 모듈과 비슷한데, 여러 파일이 합쳐진 느낌.
  • [import 경로.경로.파일명] 혹은 [from 경로.경로 import 파일명] 혹은 [from 경로.경로.파일명 import 함수] 같은 식으로도 가능.
  • __init__.py 라는 파일을 폴더마다 생성해둠으로써, 해당 폴더 내의 파일이 패키지에 포함된 것이라고 인식 가능. 3.3이후 버전에선 없어도 인식한다고 하지만, 만들어 두는게 안전.
  • __init__.py 파일 안에는 해당 패키지의 정보를 적어두는 게 일반적. 해당 파일에서 패키지에 포함된 모듈을 불러내는 문구(from ~ import ~)를 추가함으로써, 다른 파일에서 패키지만 불러와도 해당 모듈을 사용할 수 있게 됨.

4) 예외 처리

  • 오류가 발생했을 시 어떻게 처리할지를 정의해두는 것.
  • 없는 파일을 오픈하거나, 리스트에 존재하지 않는 요소를 호출하거나, 0으로 나누는 사칙연산을 실행하는 등.
  • try - except - else - finally 의 네가지 구문으로 작성.

에러가 나타날 시, 에러 구문이 보인다.

try: # 예외가 발생할 수 있는 코드를 작성
    4/0 
except ZeroDivisionError as e: # 에러 메시지를 e에 저장
    print (e) # e에는 에러 메시지가 저장됨
    print ("0으로 나눌 수 없습니다.")
  • 파일을 여는 동작에는 finally 구문을 통해 파일을 닫아줄 필요가 있음.
  • 예시에서는 파일을 읽는(r) 동작이기에 필요없는 상황이긴 하다.
try:
    f = open("없는 파일", 'r')
except FileNotFoundError as e:
    print(e)
    print("파일이 없습니다.")
finally: # 예외 발생 여부와 상관없이 항상 실행
    print("종료합니다.")
    # 만약 파일이 열린 상태로 종료되지 않으면 메모리 누수가 발생할 수 있음
    # 예를 들어 'w' 모드로 파일을 열었을 때, 파일을 닫지 않고 종료하면 파일에 쓰지 못한 데이터가 남아있음
    # finally 블록은 예외 발생 여부와 상관없이 항상 실행되므로 여기에 파일을 닫는 코드를 작성함
    # f.close()
  • 여러 에러가 날 것이 예상된다면, 해당 에러들을 같이 예외처리 할 수 있음.
try:
    a = [1,2]
    print(a[3])
    4/0
except ZeroDivisionError as e:
    print(e)
    print("0으로 나눌 수 없습니다.")
except IndexError as e:
    print(e)
    print("인덱스를 벗어났습니다.")

try:
    a = [1,2]
    print(a[3])
    4/0
except (IndexError, ZeroDivisionError) as e:
    print(e)
  • 어떤 에러가 나든 일단 전부 예외처리 하고 싶다면 다음과 같이 작성 가능.
try:
    ageInput = int(input("나이를 입력하세요 : "))
except: # 모든 예외를 처리
    print ("입력이 정확하지 않습니다.")
else: # 예외가 발생하지 않았을 때 실행
    if ageInput < 20:
        print("미성년자입니다.")
    else:
        print("성인입니다.")
  • 클래스 상속 시, 함수를 덮어씌우지 않으면 에러를 나게 함으로써, 상속받은 클래스에서 함수 작성을 강제할 수 있음.
class People:
    def skill(self):
        raise NotImplementedError
        # NotImplementedError : 자식 클래스에서 이 메서드를 구현하지 않았을 때 발생하는 에러
        # 추상 클래스 : 메서드의 목록만 가진 클래스, 자식 클래스에서 메서드 구현을 강제하기 위해 사용

class Knight(People):
    pass

personA = Knight()
personA.skill()
# NotImplementedError:

class Wizard(People):
    def skill(self):
        print("파이어볼")

personB = Wizard()
personB.skill()
# 파이어볼
  • 스스로 에러 클래스를 작성할 수도 있음.
class MultiThreeError(Exception):
    def __str__(self):
        return "3의 배수는 출력할 수 없습니다."

def notMultiThree(n):
    if n % 3 == 0:
        raise MultiThreeError
    return n

try:
    ten = notMultiThree(10)
    print(ten)
    nine = notMultiThree(9)
    print(nine)
except MultiThreeError as e:
    print(e)

 

2. 오늘의 정리

 

이제 일단 파이썬 기초 공부는 끝났다! 이후로는 이전 내용들 복습과, 실제로 문제들을 보면서 코드를 짜보고 익숙해지는 과정을 거쳐야 할 것 같다.

일단은, 다음 과제가 있으니 계속해서 과제를 해나갈 예정이다!

'bootcamp' 카테고리의 다른 글

[SSAFY] 어느덧 1학기가 끝나고  (0) 2025.07.20
[SSAFY] 1주차 회고  (1) 2025.01.12
241231 점프 투 파이썬 (4)  (1) 2024.12.31
241230 점프 투 파이썬 (3)  (1) 2024.12.30
241230 점프 투 파이썬 (2)  (1) 2024.12.30