Python을 배워보자/6. 객체 지향 프로그래밍 (OOP)

파이썬 특별 메소드 생성자와 소멸자

_Blue_Sky_ 2024. 9. 25. 18:34
728x90
728x90

파이썬 특별 메소드: 생성자와 소멸자 심층 분석

서론

파이썬에서 클래스를 정의하고 객체를 생성할 때, 우리는 자주 특별한 메소드들을 사용합니다. 이러한 메소드들은 언더스코어(__) 두 개로 시작하고 끝나는 특징을 가지며, 매직 메소드 또는 더블 언더스코어 메소드라고 불립니다. 오늘은 그중에서도 객체의 생명주기와 밀접한 관련이 있는 생성자소멸자에 대해 자세히 알아보겠습니다.

생성자 (init)

  • 정의: 객체가 생성될 때 자동으로 호출되는 메소드입니다. 객체의 초기화 작업을 수행하는 데 사용됩니다.
  • 역할:
    • 인스턴스 변수 초기화: 객체가 가지고 있어야 할 속성들을 초기값으로 설정합니다.
    • 객체 생성 시 필요한 작업 수행: 파일 열기, 데이터베이스 연결 등 객체 생성과 동시에 수행되어야 할 작업들을 처리합니다.
  • 구문:
    class MyClass:
        def __init__(self, arg1, arg2):
            self.attribute1 = arg1
            self.attribute2 = arg2
            print("객체가 생성되었습니다.")
    
     
  • 예시:위 코드에서 Person 클래스의 __init__ 메소드는 객체가 생성될 때 호출되어 nameage 속성을 초기화하고, 생성 메시지를 출력합니다.
    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
            print(f"{name}님이 생성되었습니다.")
    
    person1 = Person("홍길동", 30)
    
728x90


소멸자 (del)

  • 정의: 객체가 메모리에서 해제될 때 자동으로 호출되는 메소드입니다. 객체가 더 이상 사용되지 않을 때 정리 작업을 수행하는 데 사용됩니다.
  • 역할:
    • 파일 닫기, 데이터베이스 연결 해제 등 객체 생성 시 열었던 자원들을 해제합니다.
    • 객체 소멸 시 필요한 작업 수행: 로그 기록 등 소멸과 관련된 추가적인 작업들을 처리합니다.
  • 구문:
     
    class MyClass:
        def __del__(self):
            print("객체가 소멸되었습니다.")
    
  • 예시:위 코드에서 FileHandler 클래스의 __del__ 메소드는 객체가 소멸될 때 호출되어 파일을 닫는 작업을 수행합니다.
    class FileHandler:
        def __init__(self, filename):
            self.file = open(filename, 'w')
    
        def __del__(self):
            self.file.close()
            print("파일이 닫혔습니다.")
    
    file_handler = FileHandler("data.txt")
    # ... (파일 사용)
    del file_handler
    
     

생성자와 소멸자의 특징 및 주의사항

  • 파이썬의 가비지 컬렉션: 파이썬은 참조 카운팅 방식의 가비지 컬렉션을 사용합니다. 객체를 참조하는 변수가 없을 때 자동으로 메모리에서 해제됩니다.
  • 소멸자 호출 시점: 소멸자는 객체가 메모리에서 해제되기 직전에 호출됩니다. 하지만 정확한 호출 시점은 파이썬 인터프리터의 구현에 따라 다를 수 있습니다.
  • 소멸자 호출 보장: 소멸자가 항상 호출된다고 보장할 수는 없습니다. 예를 들어, 프로그램이 비정상적으로 종료될 경우 소멸자가 호출되지 않을 수 있습니다.
  • 소멸자 오버라이딩: 기본 클래스의 __del__ 메소드를 오버라이딩하여 자신만의 소멸 동작을 구현할 수 있습니다.
  • 소멸자의 한계: 소멸자는 예외 처리를 할 수 없으며, 다른 객체의 소멸을 보장할 수 없습니다.

결론

생성자와 소멸자는 객체의 생명주기를 관리하는 데 필수적인 메소드입니다. 객체 생성 시 초기화 작업을 수행하고, 소멸 시 자원을 해제하여 메모리 누수를 방지하는 데 중요한 역할을 합니다. 파이썬에서 클래스를 설계할 때 생성자와 소멸자를 적절히 활용하여 안정적이고 효율적인 프로그램을 개발할 수 있습니다.

 

728x90
728x90