{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "vscode": {
          "languageId": "plaintext"
        }
      },
      "outputs": [],
      "source": [
        "# Part 4: 객체지향 프로그래밍 실습\n",
        "\n",
        "## 학습 목표\n",
        "- 클래스와 객체의 개념 이해\n",
        "- 상속과 다형성 활용\n",
        "- 캡슐화와 정보 은닉\n",
        "- 특수 메서드 활용\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {},
      "outputs": [],
      "source": [
        "# 객체지향 프로그래밍 실습\n",
        "\n",
        "# 클래스 정의와 객체 생성\n",
        "class Student:\n",
        "    def __init__(self, name, student_id):\n",
        "        self.name = name\n",
        "        self.student_id = student_id\n",
        "        self.grades = []\n",
        "    \n",
        "    def add_grade(self, grade):\n",
        "        self.grades.append(grade)\n",
        "    \n",
        "    def get_average(self):\n",
        "        if self.grades:\n",
        "            return sum(self.grades) / len(self.grades)\n",
        "        return 0\n",
        "    \n",
        "    def __str__(self):\n",
        "        return f\"학생: {self.name} (ID: {self.student_id})\"\n",
        "\n",
        "# 상속 예제\n",
        "class GraduateStudent(Student):\n",
        "    def __init__(self, name, student_id, thesis_topic):\n",
        "        super().__init__(name, student_id)\n",
        "        self.thesis_topic = thesis_topic\n",
        "    \n",
        "    def __str__(self):\n",
        "        return f\"대학원생: {self.name}, 논문주제: {self.thesis_topic}\"\n",
        "\n",
        "# 객체 생성 및 사용\n",
        "student1 = Student(\"김철수\", \"2021001\")\n",
        "student1.add_grade(90)\n",
        "student1.add_grade(85)\n",
        "print(student1)\n",
        "print(f\"평균 점수: {student1.get_average()}\")\n",
        "\n",
        "grad_student = GraduateStudent(\"이영희\", \"G2021001\", \"AI 연구\")\n",
        "print(grad_student)\n"
      ]
    }
  ],
  "metadata": {
    "language_info": {
      "name": "python"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 2
}
