이하 내용은 강의와 위키독스의 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 |