클래스 (Class)
클래스는 자료형을 직접 만들 수 있는 도구다.
파이썬은 기본적으로 int, str 같은 자료형을 제공하지만, 사용자가 직접 자료형(클래스)을 정의할 수 있다.
클래스 정의하기
class 클래스이름:
def init(self):
# 생성자 (객체가 생성될 때 자동 실행됨)
수행할 문장
예시:
class FourCal:
def init(self, first, second):
self.first = first
self.second = second
객체 생성하기
a = FourCal(4, 2)
클래스 내부 함수 (메서드) 정의
class FourCal:
def init(self, first, second):
self.first = first
self.second = second
def add(self):
return self.first + self.second
def mul(self):
return self.first * self.second
def sub(self):
return self.first - self.second
def div(self):
return self.first / self.second
a = FourCal(4, 2)
a.add() # 6
a.mul() # 8
a.sub() # 2
a.div() # 2.0
생성자 (__init__) 이해하기
객체가 생성될 때 자동 호출되어 초기값을 설정함.
class Sample:
def init(self, value):
self.value = value
self의 의미
- 클래스 내 메서드는 반드시 첫 번째 인자로
self를 가짐 self는 생성된 객체 자기 자신을 의미함- 객체 내 변수 접근:
self.변수
클래스에 함수 추가하기
class MoreFourCal(FourCal):
def pow(self):
return self.first ** self.second
a = MoreFourCal(2, 3)
a.pow() # 8
상속
기존 클래스를 상속받아 새로운 클래스를 만들 수 있다.
class MoreFourCal(FourCal):
pass # 기존 기능을 그대로 상속
메서드 오버라이딩 (재정의)
부모 클래스의 메서드를 자식 클래스에서 다시 정의할 수 있다.
class SafeFourCal(FourCal):
def div(self):
if self.second == 0:
return 0
else:
return self.first / self.second
a = SafeFourCal(4, 0)
a.div() # 0
클래스 변수와 인스턴스 변수
- 클래스 변수: 클래스에 공유되는 변수
- 인스턴스 변수: 객체마다 따로 존재
class Family:
lastname = “김”
print(Family.lastname) # 김
a = Family()
b = Family()
print(a.lastname) # 김
print(b.lastname) # 김
Family.lastname = “박”
print(a.lastname) # 박
print(b.lastname) # 박
※ 클래스 변수는 클래스 자체 또는 모든 인스턴스에서 공유됨
모듈 (Module)
모듈이란 함수, 변수, 클래스 등을 모아 놓은 파이썬 파일(.py) 을 말한다.
필요할 때 import하여 사용할 수 있다.
모듈 만들기
예: mod1.py 파일을 만든다.
def add(a, b):
return a + b
def sub(a, b):
return a - b
모듈 불러오기 (import)
import mod1
print(mod1.add(3, 4)) # 7
print(mod1.sub(4, 2)) # 2
또는 from을 사용해 직접 함수만 가져올 수 있다.
from mod1 import add
add(3, 4) # 7
여러 함수 가져오기:
from mod1 import add, sub
전체 가져오기:
from mod1 import * # 권장되지 않음
모듈 이름 확인하기
모듈 내부에서 자신의 이름을 확인할 수 있다.
print(name)
직접 실행하면 __main__, import되면 파일명이 출력된다.
이를 활용해 테스트 코드를 작성할 수 있다:
def add(a, b):
return a + b
if name == “main”:
print(add(3, 4))
클래스가 포함된 모듈
예: mod2.py
class Calculator:
def init(self):
self.result = 0
def add(self, num):
self.result += num
return self.result
사용 예:
from mod2 import Calculator
cal1 = Calculator()
print(cal1.add(3)) # 3
print(cal1.add(4)) # 7
다른 위치에 있는 모듈 사용하기
sys.path에 디렉토리 추가
import sys
sys.path.append(”/사용할/모듈/디렉토리”)
- 또는 환경 변수
PYTHONPATH에 디렉토리 등록
표준 모듈 (라이브러리)
파이썬은 다양한 표준 모듈을 제공한다.
예:
import math
print(math.pi) # 3.141592…
print(math.sqrt(16)) # 4.0
import random
print(random.randint(1, 10)) # 1~10 사이 임의의 정수
외부 모듈
pip을 사용해 설치
pip install 모듈이름
예:
pip install requests
사용 예:
import requests
res = requests.get(“https://example.com”)
print(res.status_code)
패키지 (Package)
패키지는 모듈을 계층적으로 관리할 수 있게 해주는 디렉터리 구조다.
패키지란, 여러 모듈을 담고 있는 폴더이다.
패키지 만들기
다음과 같은 디렉터리 구조를 만든다.
game/
├── init.py
├── sound/
│ ├── init.py
│ ├── echo.py
├── graphic/
│ ├── init.py
│ ├── render.py
__init__.py파일은 해당 디렉토리가 패키지임을 알리는 역할- 파이썬 3.3 이상에서는 없어도 되지만, 있는 게 좋다
모듈 불러오기
import game.sound.echo
game.sound.echo.echo_test()
또는 하위 모듈을 직접 import 할 수도 있다:
from game.sound import echo
echo.echo_test()
또는 함수만 직접 import:
from game.sound.echo import echo_test
echo_test()
상대 경로로 import 하기
from . import echo ← 현재 디렉터리 기준from ..sound import echo ← 부모 디렉터리 기준
상대 경로 import는 모듈이 패키지 내부에서 실행될 때만 사용 가능
직접 실행하면ImportError발생할 수 있음
init.py 사용
패키지 디렉터리에 __init__.py 파일을 만들어
패키지를 초기화하거나, 외부에 노출할 모듈을 지정할 수 있다.
예:
# game/sound/__init__.py
__all__ = ['echo']
이렇게 하면 from game.sound import * 시 echo만 import 된다.
예외 사항
import * 문법은 init.py에서 all 리스트로 허용된 것만 가져옴 이 외에는 사용을 권장하지 않음
패키지와 모듈 위치 설정
- 현재 파이썬이 모듈을 찾는 경로는 sys.path에 저장되어 있음
- 필요하면 경로를 추가해야 함
import sys
sys.path.append("/my/custom/path")
예외 처리 (Exception Handling)
프로그래밍 중 오류가 발생할 수 있는 부분을 처리하여 프로그램이 중단되지 않도록 만드는 방법.
기본 구조
try:
실행할 코드
except 예외종류:
예외 발생 시 실행할 코드
예시:
try:
4 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
여러 개의 except 문
try:
a = [1, 2]
print(a[3])
4 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
except IndexError:
print("인덱스 오류입니다.")
→ 가장 먼저 발생한 예외만 처리된다.
하나의 except에서 여러 예외 처리
try:
a = [1, 2]
print(a[3])
except (ZeroDivisionError, IndexError):
print("오류 발생!")
예외 메시지 확인하기 (as 사용)
try:
4 / 0
except ZeroDivisionError as e:
print(e)
출력: division by zero
finally 문
예외 발생 여부와 관계없이 항상 실행되는 블록
try:
print("try 실행")
1 / 0
except:
print("except 실행")
finally:
print("finally 실행")
→ 출력:
try 실행
except 실행
finally 실행
예외 발생시키기 (raise)
직접 예외를 발생시킬 수 있다.
def raise_error():
raise NotImplementedError
raise_error()
사용자 정의 예외 만들기
class MyError(Exception):
pass
def say_nick(nick):
if nick == "바보":
raise MyError()
print(nick)
try:
say_nick("바보")
except MyError:
print("사용자 정의 예외 발생!")
예외 메시지 포함하기
class MyError(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
try:
raise MyError("오류가 발생했습니다.")
except MyError as e:
print(e)
출력: 오류가 발생했습니다.
정리
try ~ except: 예외 발생 시 처리except e: 예외 메시지 확인finally: 무조건 실행raise: 예외 강제 발생- 사용자 정의 예외:
Exception상속
내장 함수 (Built-in Functions)
파이썬은 기본적으로 다양한 내장 함수를 제공한다.
외부 모듈 없이 언제든지 사용할 수 있다.
abs(x)
절댓값 반환
abs(-3) # 3
abs(3.14) # 3.14
all(iterable)
모든 요소가 참이면 True, 하나라도 거짓이면 False
all([1, 2, 3]) # True
all([1, 0, 3]) # False
any(iterable)
하나라도 참이면 True, 모두 거짓이면 False
any([0, "", None]) # False
any([0, "", 1]) # True
chr(i)
유니코드 정수 → 문자
chr(97) # 'a'
dir([object])
객체가 가진 변수나 함수(속성) 목록 리턴
dir([1, 2, 3]) # list의 메서드 목록 출력
divmod(a, b)
a를 b로 나눈 몫과 나머지를 튜플로 반환
divmod(7, 3) # (2, 1)
enumerate(iterable)
반복 가능한 자료형을 (index, 요소) 형태로 반환
for i, name in enumerate(['a', 'b', 'c']):
print(i, name)
eval(expression)
문자열로 된 표현식을 실행한 결과 반환
eval("1 + 2") # 3
eval("'hi' + 'world'") # 'hiworld'
filter(function, iterable)
함수 조건을 만족하는 요소만 필터링
def is_positive(x):
return x > 0
list(filter(is_positive, [1, -3, 2, 0, -5])) # [1, 2]
hex(x)
정수를 16진수 문자열로 변환
hex(255) # '0xff'
id(object)
객체의 고유 주소값 반환
a = 3
id(a)
input([prompt])
사용자 입력 받기 (문자열로 반환됨)
name = input("이름을 입력하세요: ")
int(x [, base])
문자열을 정수로 변환 (진수도 지정 가능)
int('3') # 3
int('11', 2) # 3
isinstance(object, class)
객체가 클래스의 인스턴스인지 검사
isinstance(3, int) # True
len(s)
길이 반환
len("python") # 6
list([iterable])
리스트로 변환
list("abc") # ['a', 'b', 'c']
map(function, iterable)
함수를 반복 가능한 객체의 요소에 적용
def square(x):
return x * x
list(map(square, [1, 2, 3])) # [1, 4, 9]
max(iterable)
최댓값 반환
max([1, 2, 3]) # 3
min(iterable)
최솟값 반환
min([1, 2, 3]) # 1
open(filename, mode)
파일을 열어 파일 객체 반환
f = open("file.txt", 'r')
ord(c)
문자 → 유니코드 정수
ord('a') # 97
pow(x, y)
x ** y와 같음
pow(2, 3) # 8
range([start], stop[, step])
정수 시퀀스 생성
list(range(5)) # [0, 1, 2, 3, 4]
list(range(1, 10, 2)) # [1, 3, 5, 7, 9]
round(number[, ndigits])
반올림
round(3.14159, 2) # 3.14
sorted(iterable[, key][, reverse])
정렬된 리스트 반환 (원본 변경 X)
sorted([3, 1, 2]) # [1, 2, 3]
sorted("zero") # ['e', 'o', 'r', 'z']
str(object)
문자열로 변환
str(3) # '3'
str(3.14) # '3.14'
sum(iterable[, start])
합계 반환
sum([1, 2, 3]) # 6
tuple([iterable])
튜플로 변환
tuple([1, 2, 3]) # (1, 2, 3)
type(object)
객체의 자료형 반환
type("abc") # <class 'str'>
zip(*iterables)
여러 iterable을 묶어서 튜플의 리스트로 반환
list(zip([1, 2], ['a', 'b'])) # [(1, 'a'), (2, 'b')]
표준 라이브러리
파이썬은 다양한 표준 라이브러리를 제공하며, import만 하면 바로 사용할 수 있다.
sys
시스템 관련 정보를 다루는 모듈
import sys
sys.argv # 명령행 인수
sys.exit() # 강제 종료
sys.path # 모듈 검색 경로
예:
# hello.py
import sys
print(sys.argv)
명령어:python hello.py arg1 arg2 → ['hello.py', 'arg1', 'arg2']
pickle
파이썬 객체를 파일에 저장하거나 불러올 때 사용
import pickle
f = open("test.txt", "wb")
data = {1: 'python', 2: 'you'}
pickle.dump(data, f)
f.close()
# 불러오기
f = open("test.txt", "rb")
data = pickle.load(f)
print(data) # {1: 'python', 2: 'you'}
os
운영체제와 상호작용할 수 있는 기능 제공
import os
os.environ # 환경 변수
os.getcwd() # 현재 디렉토리
os.chdir("path") # 디렉토리 이동
os.system("dir") # 시스템 명령 실행
shutil
파일 복사 관련 기능 제공
import shutil
shutil.copy("src.txt", "dst.txt")
glob
파일 이름 리스트를 얻을 때 사용 (와일드카드 사용 가능)
import glob
glob.glob("*.py") # 현재 폴더의 모든 .py 파일 리스트
tempfile
임시 파일과 디렉터리를 쉽게 만들 수 있음
import tempfile
f = tempfile.TemporaryFile()
f.write(b"Hello")
f.seek(0)
print(f.read())
f.close()
time
시간 관련 함수 제공
import time
time.time() # 현재 시간 (timestamp)
time.localtime() # struct_time
time.asctime() # 보기 좋은 문자열 시간
time.sleep(1) # 1초 대기
예: 1초 간격으로 5번 출력
for i in range(5):
print(i)
time.sleep(1)
calendar
달력 관련 기능 제공
import calendar
print(calendar.calendar(2025))
print(calendar.month(2025, 7))
calendar.isleap(2024) # 윤년 여부
random
난수 생성 관련 함수 제공
import random
random.random() # 0~1 사이 임의의 실수
random.randint(1, 10) # 1~10 사이 정수
random.choice(['a', 'b']) # 리스트에서 임의 선택
random.shuffle([1, 2, 3]) # 리스트 섞기
webbrowser
웹 브라우저를 열 수 있음
import webbrowser
webbrowser.open("https://www.google.com")
외부 라이브러리
파이썬 설치 시 기본으로 제공되지 않는 라이브러리를 외부 라이브러리라고 하며, 사용 전 pip 도구로 설치해야 한다.pip는 ‘핍’이라고 읽으며, 의존성 있는 패키지도 함께 설치해준다.
pip 사용법
설치:
pip install SomePackage제거:
pip uninstall SomePackage특정 버전 설치:
pip install SomePackage==1.0.4최신 버전 설치:
pip install --upgrade SomePackage설치된 패키지 목록 보기:
pip list
예시 출력:
Package Version
--------------- -------
amqp 2.1.4
celery 3.1.0
requests 2.31.0
...
Faker
설치
pip install Faker
기본 사용
from faker import Faker
fake = Faker()
fake.name() # 'Matthew Estrada' 등
fake.address() # '충청북도 수원시 잠실6길 ...'
한국어 데이터 사용:
fake = Faker('ko-KR') fake.name() # '김하은'테스트용 데이터 30건 생성:
test_data = [(fake.name(), fake.address()) for i in range(30)]
주요 메서드
| 메서드 | 설명 |
|---|---|
| fake.name() | 이름 |
| fake.address() | 주소 |
| fake.postcode() | 우편번호 |
| fake.country() | 국가명 |
| fake.company() | 회사명 |
| fake.job() | 직업명 |
| fake.phone_number() | 전화번호 |
| fake.email() | 이메일 |
| fake.user_name() | 사용자명 |
| fake.pyint(min, max) | 임의의 정수 |
| fake.ipv4_private() | IP 주소 |
| fake.text() | 문장 |
| fake.color_name() | 색상명 |
sympy
수학식 기호화 및 방정식 풀이용 외부 라이브러리
설치
pip install sympy
예제: 일차방정식 풀이
from fractions import Fraction
import sympy
x = sympy.symbols("x") # 미지수 x
f = sympy.Eq(x * Fraction('2/5'), 1760) # x*(2/5) = 1760
result = sympy.solve(f) # [4400]
remains = result[0] - 1760
print(f"남은 돈은 {remains}원입니다.") # 2640
sympy.symbols("x"): x라는 미지수 기호 생성sympy.Eq(a, b): a = b 형태 방정식 표현sympy.solve(): 방정식의 해 구하기fractions.Fraction: 유리수 정확히 표현
예제: 이차방정식 풀이
import sympy
x = sympy.symbols("x")
f = sympy.Eq(x**2, 1)
sympy.solve(f) # [-1, 1]
예제: 연립방정식 풀이
import sympy
x, y = sympy.symbols("x y")
f1 = sympy.Eq(x + y, 10)
f2 = sympy.Eq(x - y, 4)
sympy.solve([f1, f2]) # {x: 7, y: 3}
- 미지수가 2개 이상인 경우
dict형태로 반환됨