-
Python 튜토리얼 07 모듈과 클래스Study/Python 튜토리얼 2025. 9. 27. 11:32

목차 들어가며: 파이썬 코드의 구조화와 재사용성 극대화
1. 파이썬 모듈(Module) 활용: 라이브러리와 시스템 제어
1-1. datetime 모듈: 현재 시간과 시간 간격
1-2. time 모듈: 코드 실행 일시정지 (sleep)
1-3. 모듈 임포트(Import)의 네 가지 방식 /
1-4. os 모듈: 시스템 경로 및 파일 조작
1-5. numpy 모듈: 수치 연산 라이브러리)
2. 파이썬 클래스(Class)와 객체지향 프로그래밍 (OOP) 기본
2-1. 클래스, 객체, 인스턴스의 정의
2-2. 클래스 정의, 생성자 (__init__), 인스턴스 속성
2-3. 인스턴스 메서드와 속성 수정
2-4. 소멸자 (__del__)와 클래스 변수)
3. 클래스 상속(Inheritance)과 메서드 오버라이딩(Overriding)
3-1. 기본 상속 구조와 부모 생성자 호출 (super())
3-2. 메서드 오버라이딩과 실행 순서
마치며: 효율적이고 유지보수 가능한 코드의 완성
들어가며:
파이썬 코드의 구조화와 재사용성 극대화 안녕하세요!
이번 시간에는 파이썬 프로그래밍의 깊이와 효율성을 더해주는 모듈(Module)과 클래스(Class), 그리고 상속 개념에 대해 집중적으로 알아보겠습니다. 함수를 넘어, 모듈은 이미 만들어진 유용한 기능들을 손쉽게 가져다 쓸 수 있게 하며, 클래스는 현실 세계의 개념을 코드로 모델링하여 프로그램을 더욱 구조적이고 객체 지향적으로 만듭니다. 이 기본기를 통해 더 복잡하고, 확장성이 뛰어나며, 유지보수가 쉬운 프로그램을 설계하는 능력을 키울 수 있습니다.
1. 파이썬 모듈(Module) 활용: 라이브러리와 시스템 제어
모듈은 미리 정의된 함수, 클래스, 변수 등이 모여있는 파일로, 코드를 재사용하고 프로그램을 확장하는 핵심 도구입니다.
1-1. datetime 모듈: 현재 시간과 시간 간격
datetime 모듈은 날짜와 시간을 다루는 강력한 기능을 제공합니다.
import datetime # 241: 현재 시각 가져오기 now = datetime.datetime.now() # print(now) # 2025-09-27 11:10:10.123456 (실행 시점에 따라 다름) # 242: 현재 시각과 타입 출력 # print(now, type(now)) # 2025-09-27 11:10:10.123456 <class 'datetime.datetime'> # 243: timedelta를 이용한 시간 계산 (5일 전부터 1일 전까지) for day in range(5, 0, -1): delta = datetime.timedelta(days=day) date = now - delta # print(date) # 5일 전, 4일 전, ..., 1일 전 날짜 출력 (실행 시점에 따라 다름) # 244: strftime으로 문자열 변환 # print(now.strftime("%H:%M:%S")) # 11:10:10 (실행 시점에 따라 다름) # 245: strptime으로 datetime 객체 변환 day = "2020-05-04" ret = datetime.datetime.strptime(day, "%Y-%m-%d") # print(ret, type(ret)) # 2020-05-04 00:00:00 <class 'datetime.datetime'>1-2. time 모듈: 코드 실행 일시정지 (sleep)
import time import datetime # 246: 1초 간격으로 현재 시간 출력 # while True: # now = datetime.datetime.now() # print(now) # 현재 시각 출력 # time.sleep(1) # 1초 일시 정지1-3. 모듈 임포트(Import)의 네 가지 방식
모듈을 가져오는(Import) 방법은 네 가지가 있습니다
1. import 모듈은 가장 안전하고 명확하며, 모듈.함수 형태로 사용합니다.
2. import 모듈 as 별명은 모듈 이름이 길 때 별명을 붙여 편리하게 사용합니다
. 3. from 모듈 import 함수는 모듈 이름 없이 특정 함수만 가져와 바로 씁니다.
4. from 모듈 import *는 모듈의 모든 것을 가져오나, 이름 충돌 위험이 커서 사용을 피해야 합니다.
1-4. os 모듈: 시스템 경로 및 파일 조작
import os # 248: 현재 작업 디렉터리 경로 출력 ret = os.getcwd() # print(ret, type(ret)) # C:\Users\...\project <class 'str'> (환경에 따라 다름) # 249: 파일 이름 변경 (실제 실행 시 경로를 수정해야 합니다) # os.rename("C:/Users/hyunh/Desktop/before.txt", "C:/Users/hyunh/Desktop/after.txt") # 파일 이름이 before.txt에서 after.txt로 변경됨1-5. numpy 모듈: 수치 연산 라이브러리
import numpy # 250: 0부터 5 미만까지 0.1 간격의 수열 출력 # for i in numpy.arange(0, 5, 0.1): # print(i) # 0.0 0.1 0.2 ... 4.9 (줄 바꿈하여 출력)
2. 파이썬 클래스(Class)와 객체지향 프로그래밍 (OOP) 기본
클래스는 현실의 개념을 코드로 모델링하는 객체 지향 프로그래밍(OOP)의 핵심입니다.
2-1. 클래스, 객체, 인스턴스의 정의
클래스는 속성과 기능을 묶는 설계도이며,
객체는 클래스에 의해 메모리에 생성된 실체입니다.
인스턴스는 특정 객체가 특정 클래스에 속한다는 관계를 부여할 때 쓰는 용어입니다.
2-2. 클래스 정의, 생성자 (__init__), 인스턴스 속성
# 252: 클래스 정의 class Human: pass # 253: 인스턴스 생성 areum = Human() # 254: 생성자 __init__ class Human: def __init__(self): print("응애응애") # areum = Human() # 응애응애 # 255: 속성을 가진 생성자 class Human: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex areum = Human("아름", 25, "여자") # print(areum.name) # 아름 # 256: 인스턴스 속성 접근 # print(areum.age) # 252-3. 인스턴스 메서드와 속성 수정
메서드는 클래스 내부에 정의된 함수로, 인스턴스의 동작(기능)을 정의합니다. self를 첫 번째 인수로 받습니다.
# 257: 인스턴스 메서드 (who) class Human: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def who(self): print("이름: {} 나이: {} 성별: {}".format(self.name, self.age, self.sex)) areum = Human("아름", 25, "여자") # areum.who() # 이름: 아름 나이: 25 성별: 여자 # 258: 속성 수정 메서드 (setInfo) class Human: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def who(self): print("이름: {} 나이: {} 성별: {}".format(self.name,2-4. 소멸자 (__del__)와 클래스 변수
# 259: 소멸자 __del__ class Human: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex # ... (who, setInfo 메서드 생략) def __del__(self): print("나의 죽음을 알리지마라") # areum = Human("아름", 25, "여자") # del areum # 나의 죽음을 알리지마라 # 260: self가 없는 메서드는 인스턴스 메서드로 호출 불가 class OMG: def print(): print("Oh my god") # o = OMG() # o.print() # TypeError: OMG.print() takes 0 positional arguments but 1 was given # 272: 클래스 변수 (account_count) import random class Account: account_count = 0 # 클래스 변수 def __init__(self, name, balance): self.name = name self.balance = balance self.bank = "SC은행" # 3-2-6 형식의 계좌번호 생성 로직 (생략) # num1 = random.randint(0, 999); num2 = random.randint(0, 99); num3 = random.randint(0, 999999) # self.account_number = str(num1).zfill(3) + "-" + str(num2).zfill(2) + "-" + str(num3).zfill(6) Account.account_count += 1 kim = Account("김민수", 100) # print(Account.account_count) # 1 # 273: 클래스 메서드 class Account: account_count = 0 # ... (init 메서드 생략) @classmethod def get_account_num(cls): print(cls.account_count) # cls로 클래스 변수 접근 lee = Account("이민수", 100) # kim.get_account_num() # 2
3. 클래스 상속(Inheritance)과 메서드 오버라이딩(Overriding)
상속은 기존 클래스(부모)의 속성과 메서드를 물려받아 새로운 클래스(자식)를 만드는 OOP의 핵심 원리입니다.
3-1. 기본 상속 구조와 부모 생성자 호출 (super())
# 281: 부모 클래스 class 차: def __init__(self, 바퀴, 가격): self.바퀴 = 바퀴 self.가격 = 가격 car = 차(2, 1000) # print(car.바퀴) # 2 # print(car.가격) # 1000 # 282: 상속 정의 class 자전차(차): pass # 284: super()를 이용한 부모 생성자 호출 class 자전차(차): def __init__(self, 바퀴, 가격, 구동계): super().__init__(바퀴, 가격) # 부모 클래스의 __init__ 호출 self.구동계 = 구동계 bicycle = 자전차(2, 100, "시마노") # print(bicycle.구동계) # 시마노 # print(bicycle.바퀴) # 23-2. 메서드 오버라이딩과 실행 순서
메서드 오버라이딩은 부모로부터 물려받은 메서드와 같은 이름으로 자식 클래스에서 메서드를 재정의하는 것입니다.
# 287: 메서드 오버라이딩 및 super()를 이용한 부모 메서드 호출 class 차: # ... (init 메서드 생략) def 정보(self): print("바퀴수 ", self.바퀴) print("가격 ", self.가격) class 자전차(차): # ... (init 메서드 생략) def 정보(self): # 부모의 정보 메서드를 재정의 (오버라이딩) super().정보() # 부모의 정보 메서드 호출 print("구동계 ", self.구동계) bicycle = 자전차(2, 100, "시마노") # bicycle.정보() # 바퀴수 2, 가격 100, 구동계 시마노 # 288: 메서드 오버라이딩 예시 class 부모: def 호출(self): print("부모호출") class 자식(부모): def 호출(self): print("자식호출") # 오버라이딩 나 = 자식() # 나.호출() # 자식호출 # 290: 상속 구조에서의 생성자 호출 순서 class 부모: def __init__(self): print("부모생성") class 자식(부모): def __init__(self): print("자식생성") super().__init__() # 부모 생성자 명시적 호출 # 나 = 자식() # 자식생성, 부모생성 순으로 출력
마치며:
효율적이고 유지보수 가능한 코드의 완성 모듈, 클래스, 그리고 상속은 파이썬 프로그래밍을 한 단계 끌어올리는 강력한 도구입니다. 이 개념들을 숙지하고 활용하면 코드가 훨씬 구조적이고 확장 가능해지며, 복잡한 프로젝트를 관리하는 능력이 향상됩니다. 실습을 통해 이 개념들을 완전히 자신의 것으로 만들어 보세요!
코드 출처:
10. 파이썬 모듈
조금 더 자세한 설명을 원한다면 클래스101의 "Level2 중급 파이썬"을 추천합니다. 고급 문법을 아는 것이 고급 실력을 의미하지 않습니다. "Level1 기초 파이썬"부터 …
wikidocs.net
11. 파이썬 클래스
조금 더 자세한 설명을 원한다면 클래스101의 "Level2 중급 파이썬"을 추천합니다. 고급 문법을 아는 것이 고급 실력을 의미하지 않습니다. "Level1 기초 파이썬"부터 …
wikidocs.net
'Study > Python 튜토리얼' 카테고리의 다른 글
Python 튜토리얼 06 함수 (0) 2025.09.26 Python 튜토리얼 05 반복문 (0) 2025.09.25 Python 튜토리얼 04 분기문 (0) 2025.09.24 Python 튜토리얼 03 튜플과 딕셔너리 (0) 2025.09.23 Python 튜토리얼 02 문자열과 리스트 (0) 2025.09.22