ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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) # 25
    

    2-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.바퀴) # 2
    

    3-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__() # 부모 생성자 명시적 호출
    
    # 나 = 자식() # 자식생성, 부모생성 순으로 출력
    

     


    마치며:

     

    효율적이고 유지보수 가능한 코드의 완성 모듈, 클래스, 그리고 상속은 파이썬 프로그래밍을 한 단계 끌어올리는 강력한 도구입니다. 이 개념들을 숙지하고 활용하면 코드가 훨씬 구조적이고 확장 가능해지며, 복잡한 프로젝트를 관리하는 능력이 향상됩니다. 실습을 통해 이 개념들을 완전히 자신의 것으로 만들어 보세요!

     

     

     

    코드 출처:

    https://wikidocs.net/78555

     

    10. 파이썬 모듈

    조금 더 자세한 설명을 원한다면 클래스101의 "Level2 중급 파이썬"을 추천합니다. 고급 문법을 아는 것이 고급 실력을 의미하지 않습니다. "Level1 기초 파이썬"부터 …

    wikidocs.net

    https://wikidocs.net/7007

     

    11. 파이썬 클래스

    조금 더 자세한 설명을 원한다면 클래스101의 "Level2 중급 파이썬"을 추천합니다. 고급 문법을 아는 것이 고급 실력을 의미하지 않습니다. "Level1 기초 파이썬"부터 …

    wikidocs.net

     

     

Designed by Tistory.