학습 기록
Python 공부 기록 #5 - 코드를 레고처럼 조립하기 (클래스, 모듈, 스코프)
title: “Python 공부 기록 #5 - 코드를 레고처럼 조립하기 (클래스, 모듈, 스코프)” published: 2026-02-02 20:00:00 category: 코딩 공부 tags:
- Python
- 파이썬
- 코딩공부 source_url: https://blog.naver.com/shimnote/224168925826
- 발행일: 2026-02-02 20:00:00
- 원문: https://blog.naver.com/shimnote/224168925826
0. 목차
- 인트로: 함수 다음 단계는?
- 클래스(Class): 붕어빵 틀과 설계도
- 모듈(Module): 남이 만든 훌륭한 도구상자
- 스코프(Scope): 내 책상 vs 공용 테이블
- 아웃트로: 이제 문법 공부는 끝났습니다 인트로: 함수 다음 단계는? 지난 시간(#4)에 함수(def)를 배우면서 ‘라면 자판기’를 만들어봤습니다. 덕분에 반복되는 ‘복붙’ 지옥에서 탈출할 수 있 었죠. 그런데 코딩을 계속하다 보니 욕심이 생기더군요. 라면 자판기 하나 만드는 걸 넘어서, ‘라면 가게 프랜차이즈’를 내고 싶 다면요? 혹은 다른 사람이 잘 만들어 둔 ‘최신형 키오스크’를 가져와서 내 가게에 설치하고 싶다면 어떻게 해야 할까요? 오늘은 파이썬 문법의 꽃이라 불리는 ‘클래스(Class)‘와, 이미 만들어진 기능을 레고처럼 가져다 쓰는 ‘모듈(Module)‘에 대해 정리해 봅니다. 이 단계만 넘으면 이제 “나 파이썬 문법 웬만큼 알아”라고 말할 수 있다고 합니다!
1. 클래스(Class): 붕어빵 틀과 설계도
클래스가 뭔가요? 이 개념이 비전공자에게 가장 어렵다고 하던데, ‘설계도’라고 생각하니 이해가 쉬웠습니다.
- ◦ 클래스(Class): 설계도 (또는 붕어빵 틀)
- 객체(Object): 설계도로 만든 실제 건물 (또는 팥붕어빵, 슈크림붕어빵) 은행 계좌로 이해하는 클래스 가장 이해하기 쉬운 ‘은행 계좌’ 예시를 들어볼게요.
class BankAccount: # __init__ : 계좌를 처음 개설할 때 실행되는 것 (생성자) def __init__(self, owner, money):
self.owner = owner # 예금주 self.balance = money # 잔액 # 입금 기능 def deposit(self, amount): self.balance += amount print(f”{amount}원 입금 완료! 잔액: {self.balance}원”) # 설계도로 실제 계좌(객체) 만들기 my_account = BankAccount(“제이엠”, 10000) my_account.deposit(5000) # 출력: 5000원 입금 완료! 잔액: 15000원 self가 뭔지 한참 헤맸습니다 처음에 이 self가 제일 헷갈렸어요. 왜 매번 써야 하는지 이해가 안 갔거든요. 결론: self = “이 계좌 자체”를 가리키는 대명사입니다. 실제 상황으로 비유하면:
은행 창구에서 직원: “어느 계좌에 입금하실 건가요?” 나: “제 계좌요.” (← 이게 self) 직원: “네, 제이엠님 계좌에 입금
하겠습니다.”
- my_account로 만들면 → self는 my_account
- wife_account로 만들면 → self는 wife_account 함수 정의할 때는 self를 꼭 써야 하는데, 함수를 호출할 때는 안 써도 됩니다. (자동으로 전달되거든요)
함수 정의할 때: self 필수 def deposit(self, amount): self.balance += amount # 함수 호출할 때: self 안 씀
my_account.deposit(5000) # 파이썬이 알아서 self에 my_account를 넣어줌 처음엔 이상했는데, 몇 번 써보니 이제 익숙해졌습니다. 클래스의 장점 이렇게 class로 묶어두면, my_account, wife_account처럼 변수만 다르게 해서 계좌를 무한대로 찍어낼 수 있습니다.
account1 = BankAccount("제이엠", 10000) account2 = BankAccount("망곰이", 50000) # 각 계좌가 독립적으로
작동 account1.deposit(5000) # 제이엠 계좌만 증가 account2.deposit(2000) # 망곰이 계좌만 증가 참고: 상속(Inheritance)이란 기능도 있는데, 기존 설계도를 복사해서 ‘테라스’만 추가하는 것처럼 기능을 확장할 때 쓴다 고 합니다. 이건 나중에 필요할 때 배워도 된다고 해요!
2. 모듈(Module): 남이 만든 훌륭한 도구상자
모듈이 뭔가요? 파이썬이 강력한 이유는 전 세계 개발자들이 미리 만들어둔 도구(모듈)가 엄청나게 많기 때문입니다. 우리는 import라는 주문만 외우면 됩니다.
① random 모듈: 점심 메뉴 고를 때 딱입니다
import random menus = ["김치찌개", "돈까스", "제육볶음"] print(random.choice(menus)) # 결정장애 해결!
실행할 때마다 다른 메뉴가 나옵니다. 회사에서 점심 메뉴 정할 때 진짜 유용하더라고요.
② datetime 모듈: 날짜 계산할 때 필수!
import datetime today = datetime.date.today() print(today) # 오늘 날짜 출력 # D-Day 계산 (프로젝트 마감일까
지) deadline = datetime.date(2026, 3, 31) days_left = (deadline - today).days print(f”마감까지 {days_left}일 남 았습니다.”) 엑셀로 날짜 계산하던 게 코드 한 줄로 끝나니 신기했습니다.
③ pathlib 모듈: 파일 경로 다룰 때 씁니다
윈도우/맥 경로 차이(\ vs /) 때문에 스트레스받을 때 유용합니다.
from pathlib import Path # 현재 폴더의 모든 엑셀 파일 찾기 current_folder = Path.cwd() excel_files =
list(current_folder.glob(“*.xlsx”)) print(f”엑셀 파일 {len(excel_files)}개 발견”) ?? import 방법 3가지 처음엔 어떤 방법을 써야 할지 고민했는데, 지금은 상황에 맞게 쓰고 있습니다.
방법 1: 모듈 전체 가져오기 import random random.choice([1, 2, 3]) # 방법 2: 특정 함수만 가져오기 (제가 주로
쓰는 방법) from random import choice choice([1, 2, 3]) # 방법 3: 별명 붙이기 (이름이 길 때 편함) import datetime as dt today = dt.date.today()
3. 스코프(Scope): 내 책상 vs 공용 테이블
코딩하다 보면 “어? 변수가 왜 없다고 하지?”라는 에러를 자주 만납니다. 저도 처음에 이거 때문에 한참 헤맸어요. 이게 변수의 유효 범위(Scope) 때문이라네요.
- 지역 변수(Local): 함수 안에서 만든 변수. 함수가 끝나면 사라집니다.
- 전역 변수(Global): 함수 밖에서 만든 변수. 어디서든 볼 수 있습니다.
global_var = "전역" def my_func(): local_var = "지역" print(global_var) # 가능 (전역이니까) my_func() #
print(local_var) # 에러 발생! (함수 밖에서는 안 보임) ?? 전역 변수를 수정하고 싶을 때 처음에 이것 때문에 에러가 계속 났었는데, global 키워드를 써야 한다는 걸 알았습니다.
counter = 0 def increase(): global counter # "전역 변수를 수정하겠다"는 선언 counter += 1 print(f"카운터:
{counter}”) increase() # 카운터: 1 increase() # 카운터: 2 global을 안 쓰면 UnboundLocalError가 뜹니다. 처음에 이 에러 메시지 보고 멘붕왔는데, 이제는 “아, global 안 썼구나” 하고 바로 알아챕니다. ??실무에서는 어떻게 쓰나요? 찾아보니 전역 변수는 최소한으로 쓰는 게 좋다고 하더라고요. 코드가 커지면 누가 어디서 변수를 바꿨는지 추적하기 어렵 다고 합니다. 그래서 요즘은 함수 매개변수로 전달하거나 클래스 속성으로 관리하는 쪽으로 코딩하고 있습니다.
4. 정리하며
축하해 주세요! ? 오늘로 파이썬의 핵심 문법(변수, 제어문, 함수, 클래스, 모듈) 정리가 끝났습니다. 이제 레고 블록은 다 모았으니, 무엇을 만들지 아이디어만 가지고 있으면 되겠죠? 사실, 바이브 코딩 시대에 이 부분이 제일 어려운 것 같지만요? 다음 포스팅부터는 진짜 실전입니다. 내 컴퓨터 안에서만 노는 게 아니라, 인터넷 세상을 돌아다니며 데이터를 긁어오는 ‘웹 통신(HTTP)‘과 ‘크롤링 기초’에 대 해 정리해 보겠습니다. 혹시 설명 중에 틀린 부분이 있거나 더 좋은 팁이 있다면 댓글로 알려주세요! 같이 공부해요. ? 14 ·