> For the complete documentation index, see [llms.txt](https://codebook.horang.it/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://codebook.horang.it/readme/undefined-4.md).

# 클래스

### 코드

{% 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 %}

### 검색 키워드

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