파이썬/클래스와 객체 지향 18

_getitem__ 매직 메서드란?

매직 메서드란?파이썬에서는 __init__, __str__, __len__ 같은 양쪽에 밑줄이 붙은 메서드들을 **매직 메서드(혹은 스페셜 메서드)**라고 부릅니다.이 메서드들은 파이썬의 내장 연산자나 구문과 객체를 연결해주는 역할을 합니다. __getitem__이란?__getitem__은 객체가 obj[key] 형태로 인덱싱, 슬라이싱, 딕셔너리 접근 등을 지원하게 만드는 메서드입니다.즉,obj[0]obj["key"]obj[1:5] 이런 문법을 객체에 사용할 수 있도록 도와주는 것이 __getitem__입니다. 예제: 나만의 리스트 클래스 만들기class MyList: def __init__(self, data): self.data = data def __getitem__(se..

래핑(Wrapping)이란?

— 기존 기능을 감싸서 새롭게 사용하는 방식프로그래밍에서 **"래핑(wrapping)"**이란, 이미 존재하는 기능이나 객체를 감싸서 자신만의 인터페이스로 재정의하거나 확장하는 방식을 말합니다.쉽게 말해,“기존 기능을 직접 쓰는 대신, 한 겹 더 감싸서 내가 원하는 방식으로 다루는 것” 예시 1: 함수 래핑 (기초적인 형태)def my_print(msg): print("[LOG]", msg) → print()를 직접 쓰는 대신 my_print()로 감싸서 출력 앞에 [LOG]를 붙이도록 한 것이 함수 래핑입니다. 예시 2: 클래스 래핑 (대표적인 구조)class MyList: def __init__(self, data): self.data = data def append..

Python 생성자 함수: 가변 객체 사용

"가변 객체를 기본값으로 사용하지 말라"는 조언은 Python에서 굉장히 중요한 관례 중 하나예요.초보자들이 실수하기 쉬운 부분이기도 하니, 아래에 이유와 해결 방법을 명확한 예제와 함께 설명드릴게요. 🚫 리스트나 딕셔너리를 기본값으로 사용하면 생기는 문제class User: def __init__(self, name, tags=[]): # 💥 위험! self.name = name self.tags = tags 이렇게 하면 겉보기엔 잘 작동하지만…u1 = User("Alice")u2 = User("Bob")u1.tags.append("newbie")print(u2.tags) # ❗ ['newbie'] — u2도 영향을 받음❗ 문제 원인:함수의 기본 인자는 한 번만..

Python 생성자 함수 __init__의 권장 사용법

Python 클래스에서 객체를 만들 때 가장 먼저 호출되는 것이 바로 생성자 함수, __init__()입니다.아래는 이 생성자를 보다 안정적이고 명확하게 작성하는 방법들을 정리한 글입니다. 명확하고 직관적인 매개변수 사용class User: def __init__(self, name, age): self.name = name self.age = age 변수명을 줄이지 말고, 의미 있는 이름을 사용하세요.name, age처럼 클래스 속성과 동일하게 쓰는 것이 일반적입니다. 기본값 설정으로 유연성 확보class User: def __init__(self, name, age=20): self.name = name self.age = age 자주 ..

파이썬/클래스와 객체 지향Python의 dataclass 완벽 가이드: 주요기능 설명

frozen, order, field는 dataclass를 사용할 때 매우 유용한 고급 옵션입니다. 각각을 실생활에서 자주 접할 수 있는 예시를 들어 좀 더 구체적이고 직관적으로 설명해드릴게요. frozen=True: 객체를 불변(immutable) 하게 만들기✅ 개념frozen=True를 설정하면 객체가 생성된 후 값을 수정할 수 없습니다.마치 tuple처럼 읽기 전용 객체를 만들고 싶을 때 사용합니다. 예시: 주민등록 정보from dataclasses import dataclass@dataclass(frozen=True)class Citizen: name: str ssn: str # 주민등록번호person = Citizen(name="김지효", ssn="900101-1234567")pri..

Python의 dataclass 완벽 가이드: 깔끔하고 간결한 데이터 구조 만들기

Python을 쓰다 보면 데이터를 담기 위한 클래스를 자주 만들게 됩니다. 그런데 그 클래스가 그저 데이터를 담기 위한 용도라면, 매번 __init__, __repr__, __eq__ 등을 작성하는 일이 귀찮고 반복적일 수 있죠.그래서 등장한 것이 바로 dataclass입니다. dataclass란?dataclass는 Python 3.7 이상에서 사용할 수 있는 데코레이터로,데이터를 저장하기 위한 클래스를 간단하게 만들 수 있도록 도와줍니다.기존에는 이런 클래스를 이렇게 작성했죠:class User: def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return..

[객체 지향 프로그래밍 4개의 기둥] 상속화

**상속(Inheritance)**은 기존 클래스(부모 클래스)의 기능을 물려받아 새로운 클래스(자식 클래스)를 만드는 개념입니다.이를 통해 코드를 재사용하고 유지보수를 쉽게 할 수 있습니다. 또한, **super()**를 사용하면 부모 클래스의 메서드를 자식 클래스에서 호출할 수 있습니다. 상속의 기본 개념✔ 부모 클래스(Parent Class) → 공통 기능을 정의하는 클래스✔ 자식 클래스(Child Class) → 부모 클래스를 상속받아 기능을 확장하는 클래스 예제: 기본적인 상속 구현class Animal: def speak(self): return "소리를 낸다"class Dog(Animal): # Animal 클래스를 상속받음 def speak(self): ..

[객체 지향 프로그래밍 4개의 기둥] 추상화와 파이썬 타입 힌팅 예제

파이썬은 타입을 미리 지정하지 않아도 되는 동적 타입 언어입니다. 하지만 타입을 명확하게 알 수 없으면 코드의 가독성이 떨어지고, 실수로 잘못된 타입을 사용할 가능성이 높아집니다. 이런 문제를 해결하기 위해 파이썬 3.5부터 타입 힌팅(Type Hinting) 기능이 추가되었습니다. 이번 글에서는 타입 힌팅의 다양한 활용 방법을 예제와 함께 살펴보겠습니다.   기본적인 타입 힌팅def add(x: int, y: int) -> int: return x + y 설명x: int, y: int → x, y는 정수(int) 타입-> int → 반환값도 정수(int) 타입✔ 가독성이 좋아지고, IDE에서 자동으로 타입 오류를 감지할 수 있습니다.   컬렉션(Collection) 타입 힌팅 리스트(List), ..

[객체 지향 프로그래밍 4개의 기둥] 추상화와 파이썬 타입 힌팅(Type Hinting)

파이썬은 변수를 선언할 때 타입을 미리 지정하지 않아도 되는 동적 타입 언어입니다. 이 덕분에 코드를 간결하게 작성할 수 있지만, 반대로 어떤 타입을 사용해야 하는지 명확하지 않아 혼란을 줄 수도 있습니다. 이러한 문제를 보완하기 위해 파이썬 3.5부터 타입 힌팅(Type Hinting) 기능이 추가되었습니다. 이번 글에서는 타입 힌팅이 무엇인지, 어떻게 사용하는지 간단한 예제를 통해 알아보겠습니다.  타입 힌팅이란? 타입 힌팅(Type Hinting)은 변수나 함수의 타입을 명시적으로 표시하는 기능입니다. 이를 통해 코드를 읽고 사용할 때 타입을 명확하게 파악할 수 있으며, IDE에서 타입 오류를 미리 감지할 수 있습니다.  타입 힌팅 적용 전 코드 아래는 타입 힌팅을 적용하지 않은 BankAccoun..

[객체 지향 프로그래밍 4개의 기둥] 추상화와 문서화 스타일

파이썬에서 코드를 문서화(docstring) 하는 것은 매우 중요합니다. 특히, 협업 시 함수나 클래스의 동작을 쉽게 이해할 수 있도록 일관된 스타일의 문서화가 필요합니다. 여러 포맷이 있지만, 이번 글에서는 Google Docstring 스타일을 사용하여 함수 문서화를 작성하는 방법을 살펴보겠습니다. Google Docstring 스타일이란?함수나 클래스의 동작을 명확하고 간결하게 문서화하는 방식가독성이 높고 협업에 유용한 포맷 📝 기본 구조 def 함수명(파라미터): """설명 Parameters: 파라미터명 (자료형): 설명 Returns: 반환값 자료형: 설명 """  ✨ 예제: 추천 영상 찾기 함수def find_suggestion_vide..