# Part 4: 객체 지향 프로그래밍 용어집 **[⬆️ 파트 4으로 돌아가기](./part_4_object_oriented_programming.md)** --- ## 용어 목록 (Glossary) - [클래스 (Class)](#클래스-class) - [객체 (Object)](#객체-object) - [상속 (Inheritance)](#상속-inheritance) - [다형성 (Polymorphism)](#다형성-polymorphism) - [캡슐화 (Encapsulation)](#캡슐화-encapsulation) - [추상화 (Abstraction)](#추상화-abstraction) - [@dataclass](#dataclass) - [super()](#super) - [매직 메서드 (Magic Methods)](#매직-메서드-magic-methods) --- ### **클래스 (Class)** - **설명**: 객체를 만들기 위한 '설계도' 또는 '청사진'입니다. 붕어빵을 만들기 위한 '붕어빵 틀'에 비유할 수 있습니다. - **예시**: 자동차의 설계도는 '클래스'이고, 그 설계도로 만들어진 각각의 자동차는 '객체'입니다. - **참고**: `class` 키워드를 사용하여 정의합니다. ### **객체 (Object)** - **설명**: 클래스라는 설계도를 바탕으로 메모리에 실제로 생성된 '실체'입니다. '붕어빵 틀'에서 찍어낸 '붕어빵' 하나하나에 해당합니다. - **예시**: `red_bean_car = Car()` 코드에서 `red_bean_car`는 `Car` 클래스의 인스턴스(객체)입니다. ### **상속 (Inheritance)** - **설명**: 부모 클래스의 속성과 메서드를 자식 클래스가 물려받아 사용할 수 있게 하는 기능입니다. 코드의 재사용성을 높여줍니다. '기본 붕어빵 틀'의 특징을 물려받아 '피자 붕어빵 틀'을 만드는 것에 비유할 수 있습니다. - **예시**: `Vehicle` 클래스를 `Car` 클래스가 상속받으면, `Car`는 `Vehicle`의 `move()` 메서드를 바로 사용할 수 있습니다. ### **다형성 (Polymorphism)** - **설명**: '여러(Poly) 가지 형태(Morph)'를 가진다는 의미로, 동일한 이름의 메서드가 객체에 따라 다른 방식으로 동작하는 것을 말합니다. "주문하신 것 나왔습니다!" 라는 동일한 요청(`sell()`)에 '팥 붕어빵'과 '피자 붕어빵'이 각기 다르게 반응하는 것과 같습니다. - **예시**: `animal.speak()` 라는 동일한 코드가 `animal` 객체가 `Dog`일 때는 '멍멍'을, `Cat`일 때는 '야옹'을 출력하게 만들 수 있습니다. ### **캡슐화 (Encapsulation)** - **설명**: 데이터(속성)와 해당 데이터를 처리하는 메서드를 하나로 묶고, 데이터에 대한 직접적인 접근을 제한하는 기능입니다. 붕어빵의 '비밀 레시피'를 외부에서 함부로 바꾸지 못하게 숨기고, 정해진 방법으로만 레시피를 수정/조회하게 하는 것과 같습니다. - **예시**: `private` 변수(예: `__secret_recipe`)를 선언하고, `getter`와 `setter` 메서드를 통해서만 값에 접근하도록 하여 데이터의 무결성을 지킵니다. ### **추상화 (Abstraction)** - **설명**: 객체의 복잡한 내부 구현은 숨기고, 실제 사용에 필요한 필수적인 부분(인터페이스)만 외부에 드러내는 것입니다. 프랜차이즈 본사에서 모든 가맹점이 반드시 지켜야 할 '운영 매뉴얼'의 필수 기능(예: `bake()`)을 강제하는 것에 비유할 수 있습니다. - **예시**: `ABC (Abstract Base Class)`를 사용하여 추상 클래스를 만들고, `@abstractmethod`로 자식 클래스가 반드시 구현해야 할 메서드를 정의합니다. ### **@dataclass** - **설명**: 클래스 정의 위에 사용하는 데코레이터로, `__init__`, `__repr__`, `__eq__` 등 객체 초기화와 비교에 필요한 메서드들을 자동으로 생성해주는 기능입니다. 반복적인 코드를 크게 줄여줍니다. - **예시**: `@dataclass`를 붙이기만 하면 `Book(title="...", author="...")`와 같이 바로 객체를 생성할 수 있습니다. ### **super()** - **설명**: 자식 클래스에서 부모 클래스의 메서드를 호출할 때 사용하는 내장 함수입니다. 메서드 오버라이딩 시 부모의 원래 기능을 그대로 사용하면서 새로운 기능을 추가하고 싶을 때 유용합니다. - **예시**: `super().attack()`를 호출하면 자식 클래스의 `attack` 메서드 내에서 부모 클래스의 `attack` 메서드를 실행할 수 있습니다. ### **매직 메서드 (Magic Methods)** - **설명**: `__init__`, `__str__`처럼 이름 앞뒤에 더블 언더스코어(`__`)가 붙은 특수 메서드입니다. `+`, `==`, `len()` 같은 파이썬의 내장 연산자나 함수가 객체에 사용될 때의 동작을 우리가 원하는 대로 재정의(customizing)할 수 있게 해줍니다. - **예시**: `__add__` 매직 메서드를 구현하면 두 객체를 `+` 연산자로 더할 수 있습니다.