5. 파이썬 날개 달기- 본격적인 파이썬 프로그래밍 시작!
5-1. 클래스
클래스는 객체를 만드는 설계도이며, 속성(데이터)과 메서드(행동)로 구성된다.
상속, 오버라이딩, 클래스 변수, 매직 메서드를 활용하면 구조적이고 재사용 가능한 코드를 만들 수 있다
| 구분 | 설명 | 예시 | 결과 |
| 클래스 정의 | class 키워드로 정의 | class Dog: pass |
아무 동작 없는 클래스 임시 코드를 작성할 때 주로 사용 |
| __init__() 메서드 | 생성자(객체 초기화), 객체가 생성될 때 자동 실행 |
class Dog: def __init__(self, name): |
객체 생성 시 자동 실행 |
| self | 인스턴스 자신을 의미. 객체의 속성에 접근할 때 필요 |
class Dog: def __init__(self, name): self.name = name # 속성 1 self.age = 3 # 속성 2 |
현재 생성된 객체의 속성 접근 가능 |
| 속성(attribute) | 객체가 가지는 데이터(정보) | class Dog: def __init__(self, name): self.name = name # 속성 1 self.age = 3 # 속성 2 self.name = "콩이" # 속성 3 |
객체별로 독립적인 정보 저장 |
| 메서드(method) | 클래스 내부 함수. 객체의 행동을 정의 | def bark(self): # 메서드 print(f"{self.name}가 멍멍 짖는다!") |
객체의 행동 정의 |
| 객체(인스턴스) 생성 | 클래스를 실제로 사용 가능한 형태로 만듦 | my_dog = Dog("콩이") | Dog 클래스의 인스턴스 생성 |
| 메서드 호출 = 메서드 실행 |
객체명.메서드명() | class Dog: def __init__(self, name): self.name = name # 속성 1 self.age = 3 # 속성 2 self.name = "콩이" # 속성 3 ... def bark(self): # 메서드 print(f"{self.name}가 멍멍 짖는다!") ... my_dog = Dog("콩이") my_dog.bark() |
콩이가 멍멍 짖는다! |
| 속성 접근 | 객체명.속성명 / 속성 값 확인 가능 | my_dog.name | '콩이' |
| 클래스 변수 | 클래스 전체에서 공유되는 변수 | class Dog: species = "개" |
모든 인스턴스가 동일한 값 사용 |
| 인스턴스 변수 | 인스턴스마다 독립적으로 존재 | self.name = name | 각 객체별로 고유 값 유지 |
| 클래스 메서드 | 클래스 전체가 공유하는 함수 | @classmethod def info(cls): print("모든 개는 동물입니다.") |
Dog.info() 실행 시 동작 |
| 정적 메서드 | 클래스, 인스턴스 모두와 무관한 일반 함수 |
@staticmethod def add(a,b): return a+b |
Dog.add(2,3) → 5 |
| 상속(Inheritance) | 기존 클래스의 기능을 물려받음 | class Dog(Animal): | 부모 클래스의 메서드 사용 가능 |
| 오버라이딩 (Overriding) |
부모 메서드를 자식이 재정의 | def bark(self): print("멍멍!") | 기존 기능 변경 |
| super() | 부모 클래스의 기능을 명시적으로 호출 | super().__init__(name) | 부모 생성자 재사용 가능 |
| 내장 함수 | 클래스 관련 내장 함수들 | isinstance(obj, Dog) hasattr(obj, 'name') getattr(obj, 'name') |
클래스 확인 / 속성 접근 등 |
| 매직(특수) 메서드 | __로 감싼 특별한 메서드 | __init__, __str__, __len__, __add__ 등 | 연산자나 내장 함수 동작을 커스터마이징 |
5-2. 모듈(Module)
코드를 체계적으로 관리하는 핵심 개념. 파이썬 코드가 들어 있는 파일 하나.(확장자 .py 파일)
모듈은 코드 재사용을 위한 “부품 파일”이다. import로 불러오고, 필요한 부분만 from ~ import로 가져와 사용한다.
| 구분 | 설명 | 예시 | 결과 |
| 모듈 정의 | 함수나 변수, 클래스를 모아 놓은 파일 |
# mod1.py def add(a, b): return a + b def sub(a, b): return a-b |
mod1.py로 저장 # IDLE 에디터 파일 생성하는 방법 |
| 모듈 불러오기 import 모듈이름 |
다른 파일에서 사용 | 터미널 실행 cd mod1.py 폴더경로 입력 ls python3 Python 3.14.0 (...) >>> import mod1 |
아무 에러가 안일어나면 성공 #책에서 언급하는 C:\doit는 윈도우즈를 말하는 것. Mac에서는 /Users/유저이름/doit 으로 보면 된다. |
| 모듈 사용법 | 모듈명.함수명() | ① mod1.add(3, 4) ② mod1.sub(10, 4) |
① 7 ② 6 |
| 별칭 지정 | 모듈 이름이 길 때 as 사용 | import mod1 as m m.add(3,4) |
7 |
| 특정 함수만 가져오기 | from 모듈이름 import 함수명 # 별칭 불가. 진짜 모듈 이름 입력 |
from mod1 import sub mod1.sub(15,9) |
6 |
| 여러 개 한꺼번에 가져오기 |
쉼표로 구분 가능. 다중 함수 호출 | from mod1 import add, sub m.add(7,8),mod1.sub(3,7) |
(15, -4) |
| 모듈 전체 가져오기 | * 사용 (권장 X) 모듈 내 모든 함수 사용 가능 |
from mod1 import * add(20,10),sub(10,30) |
(30, -20) |
| 표준 모듈 | 파이썬에 기본 내장된 모듈 | import math, random, sys | 바로 사용 가능 |
| 외부 모듈 | pip로 설치 후 사용 | pip install requests | 외부 라이브러리 사용 |
| 파일을 직접 실행할 때 코드가 실행 |
이 파일이 직접 실행될 때만 아래 코드를 실행해라 if __name__ == "__main__" “이 모듈이 다른 파일에서 import될 때는 실행되지 말고, 직접 실행할 때만 작동해라.” |
def add(a, b): return a + b if __name__ == "__main__": print("mod1.py 직접 실행됨") print(add(2, 3)) |
mod1.py 직접 실행됨 5 |
| 파일을 import 실행할 때 | import mod1 print("test.py 실행 중") |
test.py 실행 중 | |
| mv[파일경로] [이동할폴더경로] | 파일이동 | 터미널 mv /Users/유저네임/mod2.py /Users/유저네임/doit/ |
mod2.py이 doit 폴더로 옮겨짐 |
| ls [폴더경로] | 폴더 안 파일 확인 | 터미널 ls |
doit 폴더내 파일 리스트가 나열됨 |
| mkdir [폴더경로] | 폴더 새로 만들기 | 터미널 cd /Users/유저네임/doit mkdir mymod mv mod2.py mymod |
ls mymod 확인하기를 통해 mod2.py 파일이 보이면 성공 |
| sys.path | 라이브러리 모듈 확인/추가 | 터미널 python3 import sys sys.path |
파이썬 라이브러리가 설치되어 있는 디렉터리 목록 나열 ['', '/Library/Frameworks/Python.framework/Versions/3.14/lib/python314.zip', '/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14', '/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages'] |
| sys.path.append | 라이브러리 모듈 추가 | sys.path 라이브러리 목록 나열 sys.path.append("/Users/유저네임/doit/mymod") sys.path |
"/Users/유저네임/doit/mymod"이 추가된 목록 확인 가능. ['', '/Library/Frameworks/Python.framework/Versions/3.14/lib/python314.zip', '/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14', '/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages', '/Users/유저네임/doit/mymod'] |
| 모듈불러오기 PYTHONPATH 환경 변수 사용하기 |
export PYTHONPATH echo $PYTHONPATH |
터미널 export PYTHONPATH=/Users/유저네임/doit/mymod echo $PYTHONPATH |
/Users/유저네임/doit/mymod |
# 터미널 doit에서 실행하기: cd /Users/유저네임/doit
5-3. 패키지(Package)
여러 개의 모듈(.py 파일) 을 폴더로 묶은 것. 즉, “모듈들의 집합” = 패키지
패키지는 모듈을 묶은 구조적 단위로, __init__.py, __all__, import, 상대 경로를 이용해 코드를 체계적으로 관리.
| 구분 | 설명 | 예시 | 결과 |
| (복습) | 폴더 생성 | 터미널 cd /Users/유저네임/doit mkdir game mkdir game/sound # mkdir -p game/sound 중간 경로가 없으면 자동으로 만들어줘”라는 의미 |
![]() |
| (복습) | 빈 모듈 생성 | touch game/__init__.py touch game/sound/__init__.py |
|
| (복습) | 모듈 생성 | # echo.py def echo_test(): print("echo") # render.py def render_test(): print("render") |
파이썬 쎌 검색 ① import game.sound.echo game.sound.echo.echo_test() echo ② import game.graphic.render game.graphic.render.render_test() render |
| 패키지 정의 | 여러 모듈을 묶은 디렉터리(폴더) 구조 | game/sound/echo.py | 모듈을 체계적으로 관리 |
| init.py | 이 폴더는 패키지라는 표식 패키지를 가져올 때마다 실행되는 초기화 코드를 넣는곳 |
# game/sound/__init__.py > game이 패키지고, 그 안에 sound라는 하위 패키지가 있구나” 하고 인식 |
![]() |
| 전체 import | 패키지 안의 모듈을 불러오는 문법 | ![]() 경우, import game.sound.echo = game 폴더 → sound 폴더 → echo.py 모듈을 순서대로 다 불러오겠다. |
import game.sound.echo game.sound.echo.echo_test() echo |
| 부분 import | from을 사용해 하위 모듈만 불러옴 |
from game.sound import echo = echo 모듈만 불러온다. |
from game.sound import echo echo.echo_test() echo |
| 함수만 import |
모듈 내부의 함수만 불러옴 | from game.sound.echo import echo_test = echo_test() 함수만 불러오기 |
from game.sound.echo import echo_test echo_test() echo |
| 모든 모듈 import |
* 사용 시 __init__.py 안의 __all__ 설정 필요 | from game.sound import *# __init__.py__all__ = ['echo'] > __init__.py의 __all__에 지정된 모듈만 가져온다. |
지정된 모듈만 import |
| 상대 경로 import |
같은 패키지 내부에서 다른 모듈 불러오기 |
![]() from . importechofrom ..graphicimportrender . 현재폴더 .. 상위 폴더 |
import game.sound.echo game.sound.echo.echo_test() echo render |
| 함수 예시 | echo.py 내부 함수 | def echo_test(): print("echo 모듈 실행") # 이 아래 부분은 '직접 실행할 때만' 실행됨 if __name__ == "__main__": echo_test() |
echo 모듈 실행 |
| 실행 예시 | 모듈 불러와서 실행 | import game.sound.echo game.sound.echo.echo_test() |
echo 모듈 실행 |
| 모듈 vs 패키지 | 모듈 패키지.py 파일 하나 모듈을 담은 폴더 import mod1 import game.sound.echo |
||
# heredoc> 상태일 땐 아직 명령이 끝나지 않은 상태. 입력을 닫는 PY (종료 표시)를 꼭 넣어야 한다.
※ 캐시(바이너리 컴파일 파일) 직접 지우는 방법(폴더 전체)
터미널 실행 → rm -rf /Users/유저네임/doit/game/__pycache__ → ls -R /Users/유저네임/doit/game(삭제 확인)
# __pycache__ 폴더는 파이썬이 실행할 때 자동으로 생기는 캐시라, 지워도 전혀 문제 없음.
아 빡세다.
모듈, 패키지 헷갈린다. 편도 붓는듯.
2025.11.06.(목)
헷갈려서 다시 왔다.
1. 모듈(module)이란?
- 모듈 = 함수나 변수, 클래스를 담아놓은 ‘파이썬 파일(.py)’ 즉, 일종의 도구 상자(toolbox) 같은 거
- functools는 함수형 프로그래밍용 도구 상자. operator는 연산 관련 함수들 모아둔 도구 상자.
2. import는 도구 상자에서 필요한 도구만 꺼내는 행동
- import는 “이 도구 상자 안에 있는 걸 가져올게요” 라는 뜻
| 예시 | 해석 |
| import operator print(operator.add(3, 5)) |
operator는 상자만 쓰려고 통채로 가져왔는데 add(더하기 함수)를 사용할래여 그러면 operator.add()로 써야 사용할 수 있어요. |
| from operator import add, mul print(add(3, 5)) print(mul(3, 5)) |
operator라는 상자 안에 있는 add, mul(곱하기 함수)를 꺼내 쓸게요. |
※ 파이썬 import 문법 비교표
| 형태 | 문법 예시 | 특징/장점 | 단점 |
| ① import 전체 모듈 | import math print(math.sqrt(16)) #호출방식: 모듈명.함수() |
- 모듈 전체를 가져옴 - 이름 충돌 위험이 적음 |
- 매번 모듈명.을붙여야 해서 코드가 길어짐 |
| ② from 모듈 import 함수명 | from math import sqrt print(sqrt(16)) #호출방식: 함수명() |
- 필요한 함수만 가져와서 코드가 짧아짐 - 명확하고 깔끔함 |
- 같은 이름의 함수가 다른 모듈에 있으면 충돌 위험 |
| ③ import 모듈 as 별칭 | import math as m print(m.sqrt(16)) #호출방식: 별칭.함수() |
- 이름이 긴 모듈을 짧게 쓸 수 있음 (예: import numpy as np) |
- 원래 모듈 이름이 가려져 가독성이 떨어질 수 있음 |
'미래 먹거리를 위하여' 카테고리의 다른 글
| [파이썬 정복하기] 점프 투 파이썬 6장 – 파이썬 프로그래밍, 어떻게 시작해야 할까? (책 없이 시작하기) (1) | 2025.10.29 |
|---|---|
| [파이썬 정복하기] 점프 투 파이썬 5장 – 파이썬 날개 달기 ② (책 없이 시작하기) (0) | 2025.10.23 |
| [파이썬 정복하기] 점프 투 파이썬 4장 – 파이썬의 입출력 (책 없이 시작하기) (0) | 2025.10.21 |
| [파이썬 정복하기] 점프 투 파이썬 3장 – 프로그램의 구조를 쌓는다! 제어문 (책 없이 시작하기) (0) | 2025.10.20 |
| [파이썬 정복하기] 점프 투 파이썬 2장 – 파이썬 프로그래밍의 기초, 자료형 ② (책 없이 시작하기) (0) | 2025.10.19 |



