규모가 커질 수록 코드를 잘게 나누어 재사용하고 정리해야하는 것 이 중요합니다.
그렇기에 오늘은 모듈,클래스,패키지에 대해 배웠습니다.
모듈은 .py파일 하나가 곧 하나의 모듈입니다.
모듈은 imort 문을 사용하여 다른 모듈의 함수, 클래스, 변수를 사용할 수 있습니다.
파이썬에는 많은 표준 라이브러리가 내장되어 별도 설치 없이 바로 사용할 수 있는 모듈들이 있습니다.
예를 들어 datetime, random, os, itertools 등이 있습니다.
이것 뿐 만 아니라 코드를 짜면서 반복적으로 사용하는 것을 모듈로 직접 만들 수도 있습니다.
그 전에 클래스에 대해 알아 보겠습니다.
클래스는 관련된 변수와 함수를 하나로 묶는 설계도와 같습니다.
클래스의 기본 구조는 이와 같습니다.
class 클래스이름:
def __init__(self, 매개변수1, 매개변수2, ...):
self.속성1 = 매개변수1
self.속성2 = 매개변수2
def 메서드이름(self, 추가매개변수):
실행할 코드
패키지는 여러개의 모듈 파일을 폴더로 묶어 놓은 것입니다.
프로젝트의 규모가 커질수록 기능을 포더별로 나누면 유지보수, 협업, 재사용이 쉬워질 수 있습니다.
my_package/ ← 패키지 (폴더)
├── __init__.py ← 패키지를 인식시키는 파일
├── calculator.py ← 모듈 1
├── greeting.py ← 모듈 2
└── subpackage/ ← 하위 패키지
├── __init__.py
└── tool.py
여기서 __init__.py의 역할은 패키지로 인식되게 하며 초기 실행 코드 정의가 가능합니다.
파일 입출력 기초
이번에는 파일을 생성하고 텍스트를 쓰는 기본적인 방법에 대해 알아 보겠습니다.
# 기본 파일 쓰기 (권장하지 않는 방법)
file = open('hello.txt', 'w', encoding='utf-8')
# 내용 쓰기
file.write('안녕하세요, Python!')
file.write('\n파일 입출력을 배워봅시다.')
# 파일 닫기 (중요!)
file.close()
print("파일이 생성되었습니다!")
안전한 파일 처리 방법 - with 구문
파일을 사용할 때 "with"구문을 사용하면 자동으로 close()를 처리해줘서 안전합니다.
with open('hello_with.txt', 'w', encoding='utf-8') as file:
file.write('안녕하세요, Python!')
file.write('\n파일 입출력을 배워봅시다.')
file.write('\nwith 구문으로 안전하게 파일을 처리합니다.')
# 파일이 자동으로 닫힘
print("파일이 안전하게 저장되었습니다!")
💡 파일 모드 설명:
'w' - 쓰기 모드 (기존 파일 덮어쓰기)
'a' - 추가 모드 (기존 파일 끝에 추가)
'r' - 읽기 모드 (기본값)
'x' - 배타적 생성 (파일이 존재하면 오류)
파일 읽기의 다양한 방법에 rea(), readline(), readlines() 가 있습니다.
| read() | 파일 전체 내용을 한 번에 읽음 |
| readline() | 한 줄씩 읽음 |
| readlines() | 모든 줄을 리스트로 읽음 |
csv 파일을 다루기
파이썬의 csv 모듈을 사용하면 엑셀처럼 생긴 .csv 파일을 쉽게 읽고 쓸 수 있습니다.
CSV 쓰기
import csv
with open("data.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["이름", "나이"])
writer.writerow(["성연", 24])
CSV 읽기
with open("data.csv", "r") as f:
reader = csv.reader(f)
for row in reader:
print(row)
NumPy 배열 연산과 인덱싱
numpy는 과학 수학 계산에서 가장 많이 쓰이는 파이썬 라이브러리입니다.
특히 배열 연산, 인덱싱, 브로드캐스팅 등은 실전에서 꼭 필요한 핵심 기능입니다.
import numpy as np
# 라이브러리 설치: pip install numpy
# 배열 생성
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([10, 20, 30, 40, 50])
print("arr1:", arr1)
print("arr2:", arr2)
# Element-wise 연산
print("\n=== 기본 산술 연산 ===")
print("덧셈:", arr1 + arr2)
print("뺄셈:", arr2 - arr1)
print("곱셈:", arr1 * arr2)
print("나눗셈:", arr2 / arr1)
print("거듭제곱:", arr1 ** 2)
# 배열과 스칼라 연산
print("\n=== 스칼라 연산 ===")
print("arr1 * 10:", arr1 * 10)
print("arr1 + 100:", arr1 + 100)
# 비교 연산
print("\n=== 비교 연산 ===")
arr = np.array([1, 5, 3, 8, 2])
print("원본 배열:", arr)
print("3보다 큰 요소:", arr > 3)
print("짝수 요소:", arr % 2 == 0)
# 조건을 만족하는 요소 선택
print("\n3보다 큰 값들:", arr[arr > 3])
print("짝수만 선택:", arr[arr % 2 == 0])
# 논리 연산
cond1 = arr > 2
cond2 = arr < 7
print("\n2 < x < 7인 값:", arr[cond1 & cond2])
# np.where 사용
result = np.where(arr > 3, arr, 0)
print("\n조건부 치환 (>3이면 원본, 아니면 0):", result)
# 통계 함수
print("\n=== 통계 함수 ===")
print("합계:", arr.sum())
print("평균:", arr.mean())
print("최댓값:", arr.max())
print("최솟값:", arr.min())
print("표준편차:", arr.std())
브로드캐스팅(Broadcasting) 이해하기
브로드캐스팅은 서로 다른 크기의 배열 간 연산을 가능하게 하는 NumPy의 강력한 기능입니다. 작은 배열이 큰 배열의 크기에 맞춰 자동으로 확장되어 연산이 수행됩니다.
a = np.array([[1, 2], [3, 4]])
b = np.array([10, 20])
print(a + b)
결과
[[11 22]
[13 24]]
작은 배열이 자동으로 맞춰져 연산이 수행되는 원리가 브로드캐스팅입니다.
고급 인덱싱과 슬라이싱
NumPy는 기본 인덱싱 외에도 팬시 인덱싱, 불린 인덱싱 등 다양한 고급 인덱싱 기법을 제공합니다. 이를 통해 복잡한 조건의 데이터를 효율적으로 선택할 수 있습니다.
1.기본 인덱싱
배열에서 특정 요소에 직접 접근하는 방법입니다.
import numpy as np
arr = np.array([[10, 20, 30],
[40, 50, 60]])
print(arr[0, 0]) # 10
print(arr[1, 2]) # 60
arr[0,0]는 1행 1열 요소이고 값은 10
arr[1,2]는 2행 3열 요소이고 값은 60을 나타낼 수 있습니다.
2. 슬라이싱
특정 구간의 요소들을 잘라내는 방법입니다.
[start:stop:step]
arr = np.array([10, 20, 30, 40, 50])
print(arr[1:4]) # [20 30 40]
print(arr[:3]) # [10 20 30]
print(arr[::2]) # [10 30 50]
2차원 배열 슬라이싱
arr2 = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(arr2[:2, 1:]) # [[2 3]
# [5 6]]
3. 조건 인덱싱
조건을 사용해 해당 조건을 만족하는 요소만 선택하는 방법입니다.
arr = np.array([10, 20, 30, 40, 50])
print(arr[arr > 30]) # [40 50]
4. 팬시 인덱싱
정수 인덱스의 리스트나 배열을 이용해서 원하는 위치의 요소를 선택할 수 있습니다.
arr = np.array([10, 20, 30, 40, 50])
print(arr[[0, 2, 4]]) # [10 30 50]
오늘도 매우 버거운 하루 였던 것 같습니다...
파이썬 교육이 이젠 하루 남게 되었지만 아직 이해하기 어려운 부분들이 많아 공부를 열심히 해야할 것 같습니다ㅠㅠ

'ABC부트캠프' 카테고리의 다른 글
| [10일차] ABC 부트캠프 - ESG포럼&세미나 (4) | 2025.07.13 |
|---|---|
| [9일차] ABC부트캠프 (0) | 2025.07.13 |
| [6일차]ABC부트캠프 (0) | 2025.07.13 |
| [5일차]ABC부트캠프_ ESG-day! (0) | 2025.07.06 |
| [4일차] ABC부트캠프 (1) | 2025.07.06 |