콘텐츠로 이동

01. 클래스는 설계 도구 (문법 아님)

"클래스는 문법 숙제가 아닙니다. '이 세상에 없는 새로운 개념'을 컴퓨터에게 설명하는 도구입니다."

1. 왜 클래스가 필요한가?

우리가 반 학생들의 출석부성적표를 관리하는 프로그램을 만든다고 상상해 봅시다.

🙁 리스트만 사용했을 때

학생이 늘어나거나 관리할 정보(이름, 출석횟수, 성적)가 많아지면 관리가 힘들어집니다.

# 학생 이름 리스트
student_names = ["지민", "태형", "정국"]
# 학생 출석 횟수 리스트 (순서를 항상 맞춰야 함! 실수하기 쉬움)
student_attendances = [0, 0, 0]

# "정국"이가 출석을 했다면?
# 2번 인덱스가 정국이라는 걸 기억해야 함
student_attendances[2] += 1 

🙂 클래스를 사용했을 때

"학생(Student)"이라는 개념을 만들어서 이름과 출석 정보를 한 덩어리로 묶어서 관리합니다.

# 학생 객체 생성 (이름표와 출석부가 세트로 묶임)
s1 = Student("지민")
s2 = Student("태형")

# 훨씬 직관적입니다.
s1.attend() 
s2.attend()

2. 클래스(Class) vs 인스턴스(Instance)

가장 유명한 "붕어빵 틀" 비유가 있지만, 여기서는 "학생기록부 양식(Class)" vs "실제 학생의 기록부(Instance)"로 이해해 봅시다.

  • Class: "학생 기록부 양식" (이름 칸, 사진 칸, 출석 체크 칸이 있는 빈 서식)
  • Instance: "지민이의 생활기록부, 태형이의 생활기록부" (실제 데이터가 적힌 종이)
graph TD
    Class["📄 학생 기록부 양식 (Class)<br>Student"]

    Instance1["👤 학생 1 (Instance)<br>이름: 지민<br>출석: 1회"]
    Instance2["👤 학생 2 (Instance)<br>이름: 태형<br>출석: 0회"]
    Instance3["👤 학생 3 (Instance)<br>이름: 정국<br>출석: 5회"]

    Class -->|"양식에 정보 기입 (생성)"| Instance1
    Class -->|"양식에 정보 기입 (생성)"| Instance2
    Class -->|"양식에 정보 기입 (생성)"| Instance3

    style Class fill:#fff9c4,stroke:#fbc02d
    style Instance1 fill:#e1f5fe,stroke:#01579b
    style Instance2 fill:#e1f5fe,stroke:#01579b
    style Instance3 fill:#e1f5fe,stroke:#01579b
# '학생'이라는 양식 정의 (Class)
class Student:
    pass

# 실제 학생 2명 등록 (Instance)
s1 = Student()
s2 = Student()

3. 클래스의 정체: 변수와 함수의 결합

그래서 클래스 안에는 뭐가 들어갈까요? 딱 2가지입니다. "상태(Data)""행동(Action)"을 한 바구니에 담는 것입니다.

구분 프로그래밍 용어 학생 관리 비유
상태 (변수) 속성 (Attribute) 이름(name), 출석수(attendance), 성적(score)
행동 (함수) 메서드 (Method) 출석하기(attend), 성적받기(get_grade)

즉, 클래스란? "관련된 데이터(변수)기능(함수)을 하나로 묶어서 포장한 세트 메뉴."

AI와 협업 포인트

AI에게 코드를 요청할 때 "클래스로 만들어줘"라고 하면 훨씬 체계적인 코드를 줍니다.

* **나쁜 질문:** "학생들 점수랑 출석 관리하는 코드 짜줘." (변수 여러 개가 굴러다니는 코드 생성)
* **좋은 질문:** "**Student 클래스**를 설계해줘. 속성으로는 `name`, `attendance`가 있고, 메서드로는 `attend()`가 있어야 해." (깔끔하게 정리된 코드 생성)