[우리FISA 5기] AI엔지니어링 2주차 - 007일차

이정환·2025년 7월 13일

우리FISA

목록 보기
5/12

007일차 - OOP(객체 지향 프로그래밍)

OOP의 특징

🔗객체 지향 프로그래밍의 4가지 특징ㅣ추상화, 상속, 다형성, 캡슐화 - 코드스테이츠

인스턴스 / 클래스 / 정적 메서드

🔗인스턴스 메서드 / 정적 메서드 / 클래스 메서드 - 딸기맛도나쓰

💡인스턴스를 통해 클래스 변수 및 메서드에 접근하는 것을 지양해라

매직 메서드(던더 메서드)

🔗04) 매직 메소드 소개 - 레벨업 파이썬

  • Python 객체에 특별한 기능을 제공해주는 메서드로 __로 시작하여 __로 끝나는 메서드를 지칭한다.
  • __init__: 인스턴스 생성 시 자동 호출 (생성자)
  • __del__: 인스턴스 삭제 시 자동 호출 (소멸자)
  • __call__: 인스턴스 명에 괄호를 붙여 호출

💡함수도 클래스다.

class MyFunc:
    def __call__ (self):
        print("클래스 선언을 통한 함수 정의")

def my_func():
    print("def 키워드와 함께 함수 정의")

if __name__ == '__main__':
    my_func() # 일반적인 함수 호출
    my_func.__call__() # __call__ 메서드를 직접 호출

    my_func_instance = MyFunc() # 인스턴스 생성
    my_func_instance() # 인스턴스를 호출하여 __call__ 메서드 실행

실행하면 두 번의 def 키워드와 함께 함수 정의클래스 선언을 통한 함수 정의가 출력되는 것을 확인할 수 있다.

연산자 매직 메서드

🔗파이썬 연산자 오버로딩과 우선순위 - 한재민
🔗operator — Standard operators as functions

  • int, float도 결국 클래스이며 +, - 등 연산자에 대응되는 메서드가 정의되어 있다.
  • __add__, __sub__, __mul__, __truediv__가 사칙연산에 대응된다.
  • __eq__, __ne__는 ==, !=에 대응되며, 하나만 정의해도 다른 것은 negation한 결과를 반환한다.

@property

  • 클래스 내부 데이터 보호를 위한 getter&setter를 간결하게 작성할 수 있는 데코레이터이다.
class MyClass:
    def __init__(self):
        self._value = 0 # 접근 지양 -> 메서드를 통해 접근
    
    @property
    def value(self):
        return self._value
    
    @value.setter
    def value(self, value):
        if not isinstance(value, int):
            raise ValueError("Value must be an integer")
        self._value = value

    @value.deleter
    def value(self):
        del self._value

if __name__ == "__main__":
    my_instance = MyClass()
    my_instance.value = 10   # setter 호출
    print(my_instance.value) # getter 호출
    del my_instance.value    # deleter 호출
    # getter 호출, 에러 발생
    try:
        print(my_instance.value)
    except Exception as e:
        print(e)
    # setter 호출, 에러 발생
    try:
        my_instance.value = "Hello"
    except Exception as e:
        print(e)

맹글링

  • Class 상속 시에 동일 필드나 메서드의 충돌을 피하기 위해 접미사에 _Class명_를 자동으로 붙여주는 기능이다.
  • private 처리 하기 위해 __를 메서드나 필드에 붙여주게 되는데, 이 때도 맹글링이 적용되어 접근 가능하다.

0개의 댓글