# Part 4: 객체 지향 프로그래밍 - 핵심 용어집 - **객체 지향 프로그래밍 (Object-Oriented Programming, OOP)** - **정의**: 현실 세계의 사물이나 개념을 '객체(Object)'로 보고, 객체들의 상호작용으로 프로그램의 로직을 구성하는 프로그래밍 패러다임. 데이터(속성)와 기능(메서드)을 하나의 객체로 묶고, 캡슐화, 상속, 다형성 등의 특징을 통해 코드의 재사용성과 유지보수성을 높입니다. - **관련 파트**: [Part 4: 파이썬 객체 지향 프로그래밍](../part_4_object_oriented_programming.md) - **클래스 (Class)** - **정의**: 객체를 만들어내기 위한 '설계도' 또는 '틀'. 동일한 속성과 메서드를 가지는 객체들을 생성하기 위한 템플릿입니다. `__init__` 메서드는 객체가 생성될 때 속성을 초기화하는 역할을 하며, `self`는 생성되는 객체 자기 자신을 가리키는 특별한 변수입니다. - **비유**: '붕어빵 틀'. 이 틀을 사용해 속재료가 다른 여러 '붕어빵(객체)'을 찍어낼 수 있습니다. - **관련 파트**: [Part 4: 파이썬 객체 지향 프로그래밍](../part_4_object_oriented_programming.md) - **객체 (Object)** - **정의**: 클래스라는 설계도를 바탕으로 실제 메모리에 생성된 인스턴스(실체). 클래스에 정의된 속성과 메서드를 가지며, 고유한 상태를 유지합니다. - **비유**: '붕어빵 틀'로 찍어낸 '팥 붕어빵', '슈크림 붕어빵' 하나하나를 의미합니다. - **관련 파트**: [Part 4: 파이썬 객체 지향 프로그래밍](../part_4_object_oriented_programming.md) - **속성 (Attribute)** - **정의**: 클래스나 객체가 가지는 데이터 값. 객체의 상태를 나타내며, 변수 형태로 저장됩니다. - **비유**: 붕어빵의 '속재료(팥, 슈크림)'처럼, 객체의 구체적인 특징이나 데이터를 의미합니다. - **관련 파트**: [Part 4: 파이썬 객체 지향 프로그래밍](../part_4_object_oriented_programming.md) - **메서드 (Method)** - **정의**: 클래스 내에 정의된 함수. 특정 객체에 속하여 그 객체의 상태(속성)를 조작하거나 특정 행동을 수행하는 역할을 합니다. 객체를 통해서만 호출할 수 있으며, 첫 번째 인자로 항상 객체 자신(`self`)을 받습니다. - **비유**: '붕어빵 틀의 `굽기()` 행동'처럼, 특정 객체가 수행할 수 있는 구체적인 동작을 나타냅니다. - **관련 파트**: [Part 4: 파이썬 객체 지향 프로그래밍](../part_4_object_oriented_programming.md) - **상속 (Inheritance)** - **정의**: 객체 지향 프로그래밍의 핵심 개념 중 하나로, 부모 클래스(Superclass)의 속성과 메서드를 자식 클래스(Subclass)가 물려받아 사용할 수 있도록 하는 기능. 코드의 재사용성을 높이고 클래스 간의 계층 구조를 형성할 수 있습니다. **메서드 오버라이딩(Method Overriding)**을 통해 자식 클래스에서 부모의 메서드를 재정의할 수 있으며, `super()` 함수를 사용해 부모 클래스의 메서드를 호출할 수 있습니다. - **비유**: '기본 붕어빵 틀'을 물려받아 약간의 수정을 가해 '피자 붕어빵 틀'을 만드는 것과 같습니다. - **관련 파트**: [Part 4: 파이썬 객체 지향 프로그래밍](../part_4_object_oriented_programming.md) - **다형성 (Polymorphism)** - **정의**: 객체 지향 프로그래밍의 주요 특징 중 하나로, '여러 가지 형태를 가질 수 있는 능력'을 의미합니다. 서로 다른 클래스의 객체가 동일한 메시지(메서드 호출)에 대해 각자의 방식으로 다르게 반응(동작)할 수 있도록 하는 메커니즘입니다. 코드의 유연성과 확장성을 높입니다. - **비유**: "주문하신 붕어빵 나왔습니다!"라는 동일한 `sell()` 메서드 호출에 대해, 객체가 '팥 붕어빵'이냐 '피자 붕어빵'이냐에 따라 다른 설명이 출력되는 것과 같습니다. - **관련 파트**: [Part 4: 파이썬 객체 지향 프로그래밍](../part_4_object_oriented_programming.md) - **캡슐화 (Encapsulation)** - **정의**: 데이터(속성)와 그 데이터를 처리하는 함수(메서드)를 하나의 객체로 묶고, 데이터의 직접적인 외부 접근을 제한하는 객체 지향 프로그래밍의 원칙. 객체의 내부 구현을 숨겨 데이터를 보호하고, 외부에는 정해진 인터페이스(메서드)만을 통해 접근하도록 허용함으로써 코드의 안정성과 유지보수성을 높입니다. - **비유**: '붕어빵의 비밀 레시피'를 외부에 공개하지 않고, 정해진 주문 방식(`sell()`)으로만 붕어빵을 판매하는 것과 같습니다. - **관련 파트**: [Part 4: 파이썬 객체 지향 프로그래밍](../part_4_object_oriented_programming.md) - **추상화 (Abstraction)** - **정의**: 객체의 복잡한 내부 구현은 숨기고, 외부에는 실제 기능 수행에 필요한 핵심적인 부분만 드러내는 객체 지향 프로그래밍의 원칙. 파이썬에서는 **추상 클래스(Abstract Class)**와 **추상 메서드(Abstract Method)**를 사용하여 구현하며, 이를 통해 여러 파생 클래스가 반드시 구현해야 할 공통 인터페이스를 강제할 수 있습니다. - **비유**: 자동차 운전자가 페달과 핸들만 조작하면 내부의 복잡한 엔진 동작을 몰라도 운전할 수 있는 것과 같습니다. '프랜차이즈 본사의 운영 매뉴얼'에 비유할 수도 있습니다. - **관련 파트**: [Part 4: 파이썬 객체 지향 프로그래밍](../part_4_object_oriented_programming.md) - **데이터클래스 (@dataclass)** - **정의**: 파이썬 3.7부터 도입된 데코레이터로, 주로 데이터를 저장하는 클래스를 만들 때 `__init__()`, `__repr__()` 등과 같은 특수 메서드들을 자동으로 생성해주어 코드를 간결하게 만들어줍니다. - **관련 파트**: [Part 4: 파이썬 객체 지향 프로그래밍](../part_4_object_oriented_programming.md) - **매직 메서드 (Magic Methods / Dunder Methods)** - **정의**: 파이썬 클래스 내에서 이름 앞뒤로 이중 밑줄(double underscore, dunder)이 붙는 특별한 메서드들 (예: `__init__`, `__str__`, `__eq__`). 파이썬의 내장 연산이나 함수(예: `+`, `len()`, `print()`)가 해당 객체에 사용될 때 내부적으로 호출되어 특별한 기능을 수행합니다. - **관련 파트**: [Part 4: 파이썬 객체 지향 프로그래밍](../part_4_object_oriented_programming.md) - **super()** - **정의**: 자식 클래스에서 부모 클래스의 메서드나 속성을 참조하기 위해 사용하는 내장 함수. 주로 메서드 오버라이딩을 할 때, 부모 클래스의 기존 기능을 그대로 사용하면서 새로운 기능을 추가하고 싶을 때 사용됩니다. - **관련 파트**: [Part 4: 파이썬 객체 지향 프로그래밍](../part_4_object_oriented_programming.md)