# 클래스

### 코드

{% code title="클래스 선언하기" %}

```
약속, (클래스명)
    약속, __준비__ (매개변수)
        자신.(속성) = (매개변수)  # 속성 설정 (초기 데이터 저장)
    
    약속, (매개변수) (기능명)  # 기능(메서드) 정의
        (실행할 코드)
        (반환할 데이터) 반환하기
```

{% endcode %}

{% code title="클래스 활용하기" %}

```
변수 = 새 (클래스명)(인자)  # 인스턴스 생성 (설계도로 실제 물건 만들기)
변수.(기능명)  # 기능(메서드) 호출 (만들어진 물건의 기능 사용하기)
```

{% endcode %}

***

### 설명

* **클래스(Class)**: 객체를 만들기 위한 설계도나 틀입니다. (예: 붕어빵 틀)
* **인스턴스(Instance)**: 클래스라는 설계도를 바탕으로 실제로 만들어진 실체입니다. (예: 실제로 구워진 팥 붕어빵, 슈크림 붕어빵)
* **속성(Attribute)**: 객체가 가지고 있는 상태나 특징입니다. 클래스 내부에서 `자신.속성` 형태로 저장합니다. (예: 붕어빵의 속재료, 모양)
* **메서드(Method/기능)**: 객체가 할 수 있는 행동입니다. 클래스 안에서 '`약속`'으로 정의됩니다. (예: 굽기, 인사하기)
* **준비(생성자)**: 객체가 태어날 때 실행되어 초기 속성을 설정합니다.
* **자신(self)**: 만들어진 객체 자기 자신을 가리킵니다. 여러 개의 붕어빵 중 '지금 이 붕어빵'의 재료가 무엇인지 구분할 때 사용합니다.
* **멤버 변수 접근**: `인스턴스.이름` 형태로 객체 내부의 값에 접근하거나 수정합니다.
* **멤버 메서드 호출**: `인스턴스.약속명` 형태로 호출합니다. 만약 인자가 없는 무인자 메서드라면 괄호 없이 이름만 써도 자동으로 실행됩니다.

***

### 주의사항

* `__준비__` 앞뒤의 밑줄은 두 개씩 작성합니다.
* 클래스 내부의 약속(함수)들은 첫 번째 매개변수로 반드시 `자신`을 포함해야 합니다.
* **이름 짓기**: 클래스 이름은 보통 명사(붕어빵틀)로, 기능 이름은 동사(굽기)로 지으면 이해하기 쉽습니다.

***

### 파이썬 대응 코드

```
class BungeoBreadMold:
    def __init__(self, ingredient, shape):
        self.ingredient = ingredient  # 속성 설정
        self.shape = shape

    def bake(self, count):  # 기능(메서드) 정의
        return f"{self.ingredient}가 들어간 {self.shape} 붕어빵 {count}개가 나왔습니다!"

# 인스턴스 생성 및 기능(메서드) 호출
my_bread = BungeoBreadMold("팥", "물고기")
print(my_bread.bake(3))
```

***

### 예시

{% code title="예시 코드" %}

```
클래스, 붕어빵틀
    약속, __준비__ (재료, 모양)
        자신.속재료 = 재료   # 속성 설정
        자신.겉모양 = 모양   # 속성 설정
    
    약속, (개수)개만큼 굽기   # 기능(메서드) 정의
        자신.속재료 + "이(가) 들어간 " + 자신.겉모양 + " 모양 붕어빵 " + 개수 + "개가 나왔습니다!" 반환하기

내붕어빵 = 새 붕어빵틀("팥", "물고기")  # 인스턴스 생성
내붕어빵.(3)개만큼 굽기 보여주기  # 기능(메서드) 호출
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
팥이(가) 들어간 물고기 모양 붕어빵 3개가 나왔습니다!
```

{% endcode %}

### 검색 키워드

클래스, 객체, 인스턴스, 속성, 메서드, 객체지향 프로그래밍


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://codebook.horang.it/readme/undefined-4.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
