안녕하세요!
오늘은 파이썬의 파일 입출력을 하는 방법과, 타입 어노테이션의 사용용도, 클로저와 데코레이터의 개념과 사용예시
그리고 모듈의 개념과 간단한 사용 예시를 메모해 두고 공부해 보도록 하겠습니다.👻
◻️1. 파일 입출력
파이썬에서 파일 입출력은 텍스트 파일, 바이너리 파일, CSV 파일, JSON파일 등을 읽고 사용할 수 있다.
1-1. 파일 열기
f = open("파일명", "모드") # 파일명은 경로와 같다.
파일명: 열고자 하는 파일의 이름이나 경로
모드: 파일을 어떻게 열 것인지를 지정
r: 읽기 모드 (기본값)
w: 쓰기 모드 (파일이 있으면 덮어쓰기)
a: 추가 모드 (파일의 끝에 내용을 추가)
b: 바이너리 모드 (텍스트가 아닌 바이너리 데이터를 읽고/쓸 때 사용)
+: 읽기와 쓰기 모드
1-2. 파일 쓰기
write(): 문자열을 파일에 쓴다.
writelines(): 문자열 리스트를 파일에 쓴다.
f = open("example.txt", "w")
f.write("Hello, Python!\n")
f.writelines(["Line 1\n", "Line 2\n"])
f.close()
close 메서드를 사용해 파일을 닫습니다. 파일을 닫지 않으면 데이터 손실이 발생할 수 있습니다.
파일 경로
파일 경로는 파일의 위치를 나타내는 문자열입니다.
이 경로를 통해 파이썬은 파일을 찾아서 해당 파일을 읽거나 쓸 수 있습니다.
파일 경로는 크게 상대 경로와 절대 경로 두 가지로 구분됩니다.
1. 상대 경로 (Relative Path)
현재 작업 디렉토리에 대한 파일의 위치를 나타냅니다.
"data.txt": 현재 디렉토리의 data.txt 파일 # 윈도우식
"./data.txt": 현재 디렉토리의 data.txt 파일 # 리눅스식
"subfolder/data.txt": 현재 디렉토리의 하위 폴더 subfolder 안의 data.txt 파일
"../siblingfolder/data.txt": 상위 디렉토리와 동일한 위치의 다른 폴더 siblingfolder 안의 data.txt 파일
2. 절대 경로 (Absolute Path)
파일 시스템의 루트부터의 전체 경로를 나타냅니다.
예 (Windows):
"C:\Users\UserName\Documents\data.txt"
예 (Linux/Mac):
"/home/username/Documents/data.txt"
1-3. with 문 사용하기
with문은 자원을 열고 자동으로 정리까지 해주는 문법이다.
파일 입출력, 데이터베이스, 락(lock) 사용 등 열고 닫아야 하는 작업에 주로 사용된다.
with 열기_함수 as 변수:
# 이 안에서 자원을 사용
컨텍스트 매니저(context manager): with 문은 __enter__()와 __exit__() 메서드를 가진 객체와 함께 사용됩니다.
class MyContext:
def __enter__(self):
print("시작합니다!")
return "리소스"
def __exit__(self, exc_type, exc_value, traceback):
print("끝났습니다!")
with MyContext() as resource:
print(f"{resource}를 사용 중입니다")
1-4. 파일 읽기
read(): 파일의 모든 내용을 문자열로 반환
readline(): 파일의 한 줄을 문자열로 반환
readlines(): 파일의 모든 줄을 리스트로 반환
1-5. 예외 처리와 함께 사용하기
파일 입출력 중에는 여러 가지 오류가 발생할 수 있습니다 (예: 파일이 존재하지 않음). 이를 위해 try-except 블록을 사용해 오류를 처리할 수 있습니다.
◻️2. 타입 어노테이션
파이썬의 타입 어노테이션(Type Annotation) 은 변수나 함수의 데이터 타입을 명시적으로 표시해주는 기능입니다. 파이썬은 기본적으로 동적 타이핑(dynamic typing) 언어이기 때문에 변수의 타입을 명시하지 않아도 됩니다. 하지만 코드의 가독성과 정적 분석 도구(myPy 등) 사용, IDE의 자동완성에 도움이 되기 때문에 타입 어노테이션을 사용하는 것이 좋습니다.
사용 예시:
옵셔널
변수가 특정 타입이거나None일 수 있는 경우 Optional을 사용한다.
◻️ 3. 모듈
3-1. 파일 종류

파이썬에서는 .ipynb 파일과 .py 파일 모두 파이썬 코드를 작성할 수 있지만, 사용 목적과 형식이 다릅니다
.py :
- Python 파일 일반적인 파이썬 코드 파일 (텍스트 기반)
- 프로젝트 개발, 배포용 코드 작성 .py 파일
.ipynb :
- IPython Notebook 파일 Jupyter에서 사용하는 노트북 형식 파일 (JSON 기반)
- 데이터 분석, 실험 기록, 강의용 .ipynb 파일
3-2. 모듈
파이썬에서 모듈을 만들려면 간단히 .py 확장자를 가진 파일에 코드를 작성하면 됩니다. 모듈은 단순한 함수 뿐만 아니라 변수, 클래스 등도 포함할 수 있으며, 다른 스크립트에서 import 구문을 사용하여 가져올 수 있습니다.
사용예시:
import math_tools # 파일 불러오기
print(math_tools.PI) # 파일 속성 불러오기
# 클래스 불러오기
circle = math_tools.Circle(5)
print(circle.area())
from math_tools import PI, Circle # math_tools로부터 무엇을? import 한 것만 가져오는 것이다.
# 줄여쓰기 가능 as
import math_tools as mt
기본 모듈에다 사용자가 만든 파일 업로드하여 import 모듈에 기능을 추가할 수 있다.
__name__ 속성 사용하기
모듈에는 __name__이라는 특별한 내장 변수가 있습니다. 이 변수는 모듈이 어떻게 실행되는지에 따라 다른 값을 가집니다. 모듈이 파이썬 인터프리터에 의해 첫 번째로 실행되면, __name__은 '__main__'으로 설정됩니다. 그러나 외부에서 import되면, __name__은 원래의 모듈 이름으로 설정됩니다.
3-3. 패키지
파이썬에서 패키지는 모듈들을 포함하고 있는 디렉터리입니다. 모듈은 파이썬 코드를 담고 있는 파일이며, 여러 모듈을 논리적으로 그룹화하려는 경우 패키지를 사용합니다. 패키지를 사용하면 관련된 기능들을 함께 묶어서 코드를 더욱 체계적으로 관리할 수 있습니다.
my_package/
│
├── __init__.py
│
├── module_a.py
│
└── sub_package/
│
├── __init__.py
└── module_b.py
패키지는 기본적으로 디렉터리와 그 안의 .py 파일들로 구성됩니다. 패키지를 구성하는 디렉터리 내에는 __init__.py라는 특별한 파일이 있어야 합니다. 이 파일은 해당 디렉터리가 파이썬 패키지임을 나타냅니다. __init__.py는 비워둘 수도 있고, 패키지 초기화 코드를 포함할 수도 있습니다. 또한 패키지 안에 다른 패키지(하위 패키지)를 포함할 수 있습니다. 이를 통해 복잡한 프로젝트의 코드를 여러 레벨의 디렉터리로 계층적으로 구성할 수 있습니다.
from my_package import module_a
from my_package.sub_package import module_b
◻️4. 클로저와 데코레이터
4-1. 클로저(Closure)
클로저는 내부 함수가 자신을 감싸고 있는 외부 함수의 변수에 접근할 수 있는 특성을 가지며, 외부 함수가 호출된 후에도
그 변수의 상태를 기억하고 사용할 수 있는 기능이다.
주고 데이터 은닉과 상태 유지에 활용된다.
일반 클래스 사용:
클로저 사용:
4-2. 데코레이터( Decorator )
데코레이터(Decorator)는 파이썬에서 함수나 클래스에 새로운 기능을 추가할 수 있도록 해주는 문법입니다. 함수 앞에 @ 기호를 붙여 사용하며, 기존 함수를 변경하지 않고도 그 동작을 확장하거나 수정할 수 있습니다. 예를 들어, 실행 시간을 측정하거나, 로그인 여부를 검사하는 기능을 함수에 쉽게 덧붙일 수 있습니다. 데코레이터는 다른 함수를 인자로 받아서 감싸는 방식으로 작동하며, 코드의 재사용성과 가독성을 높이는 데 유용한 도구입니다.
'개념 정리 step1 > Python 기초' 카테고리의 다른 글
| Python(6) | 상속, 스페셜 메서드, 예외처리 (0) | 2025.10.27 |
|---|---|
| Python(5) | def, callback, lambda, class (1) | 2025.10.25 |
| Python(4) | 제어문(조건문, 반복문), 문제 풀이 (0) | 2025.10.24 |
| Python(3) | 컬렉션 타입 (list, tuple, dict, set), input(), 연산자 (0) | 2025.10.22 |
| Python(2) | 변수, 문자열 다루기 (0) | 2025.10.21 |