본문 바로가기
Language/Python

[고등학생부터, 파이썬] 20. 클래스 (Class)

by kellis 2026. 9. 14.
반응형
고등학생부터, 파이썬 · 20화

클래스(Class)와 속성(Attribute) — 설계도로 데이터 찍어내기

지금까지 학생 한 명의 정보를 저장하려면 딕셔너리를 하나씩 만들었습니다.

학생이 100명이라면 변수도 100개가 필요하겠죠.

이번에는 이런 반복을 해결해주는 파이썬의 핵심 개념, 클래스(Class)를 배우고, 객체마다 서로 다른 데이터를 담는 속성(Attribute)까지 이어서 정리합니다.

이 시리즈를 시작하며

요즘은 고등학교에서도 코딩을 정규 과목으로 가르치는 시대입니다. 전공자가 아니어도 바이브 코딩(Vibe Coding)이나 생성형 AI(Generative AI)를 활용하면 누구나 그럴듯한 코드 결과물을 만들어낼 수 있게 되었죠. 

개발 언어를 접하는, 전공자가 아닌 일반인 입문자가 많아진 것입니다.

이 시리즈는 글쓴이가 실제로 일반인, 고등학생 등 비전공자·입문자에게 파이썬을 가르치면서 정리한 내용들을 교재 형식으로 엮은 글입니다.최대한 쉽고 친절하게 설명하면서도, 컴퓨터와 프로그래밍 언어에 대한 기초 이론까지 함께 짚고 넘어가려 합니다.

 

고등학생, 비전공자, 완전 입문자도 따라올 수 있게끔 만든 시리즈이고, 실제 과외 수업 자료를 바탕으로 만들어서 학교 시험처럼 개념 확인 문제도 그대로 들어있어요.

중간중간 빈칸 채우기랑 학교 시험 유형 문제가 나오는데, 정답은 바로 안 보이게 접어뒀습니다. 먼저 스스로 생각해본 다음 "보기"를 눌러서 확인해보세요.

Chapter 36
클래스(Class)란? · 객체를 찍어내는 설계도

지금까지 학생 정보를 저장하려면 이렇게 했습니다.

python
student1 = {
    "이름": "김철수",
    "나이": 17,
    "점수": 95
}

student2 = {
    "이름": "이영희",
    "나이": 18,
    "점수": 88
}

학생이 100명이 되면 student1부터 student100까지 변수를 100개나 만들어야 합니다. 너무 관리하기 어려워요.

리스트 안에 딕셔너리를 넣는 방법
python
students = [
    {"이름": "김철수", "점수": 95},
    {"이름": "이영희", "점수": 80}
]

이 방법도 괜찮습니다. 하지만 학생에게 이름, 나이, 점수, 전화번호, 주소, 학교, 학년, 반, 번호처럼 새로운 정보가 계속 추가된다면 딕셔너리가 점점 커지고, 오타(예: "점수"를 "잠수"로 잘못 입력)에도 취약해져요.

선생님 설명 · 자동차 공장 이야기

자동차 공장을 생각해 봅시다. 자동차를 만들 때마다 설계도를 새로 그릴까요? 아닙니다. 설계도를 한 번 만들어 놓고, 그 설계도로 자동차를 계속 만듭니다.

프로그램도 같습니다. 설계도 하나를 만들고, 필요할 때마다 그 설계도로 학생을 계속 만들어냅니다. 이 설계도를 클래스(Class)라고 합니다.

클래스 만들기 · 기본 문법
python
class Student:
    pass

여기서 pass는 "아직 아무 내용도 없다."라는 의미예요. 클래스 본문이 비어 있으면 오류가 나기 때문에, 나중에 내용을 채울 자리를 pass로 잠시 비워두는 거예요.

클래스는 설계도
python
class Dog:
    pass

Dog는 강아지 자체가 아닙니다. 강아지를 만드는 설계도예요.

객체 만들기
python
class Dog:
    pass

dog1 = Dog()
dog2 = Dog()

Dog()처럼 클래스 이름 뒤에 괄호를 붙여서 호출하면, 그 설계도를 바탕으로 실제 강아지(dog1, dog2)가 하나씩 만들어져요.

학생 만들기
python
class Student:
    pass

student1 = Student()
student2 = Student()

학생 두 명이 만들어졌습니다. 여기서 student1을 객체(Object)라고 해요. 즉, "클래스 → 객체 생성 → 사용"의 순서로 프로그램이 흘러갑니다.

왜 클래스를 사용할까?

학생이 100명이라고 해봅시다. 클래스를 사용하지 않으면 student1 = {}, student2 = {}, student3 = {}... 처럼 매번 딕셔너리를 새로 만들어야 해요.

클래스를 사용하면 student1 = Student(), student2 = Student(), student3 = Student()처럼 같은 형태로 통일해서 만들 수 있어요. 겉보기엔 비슷해 보이지만, 클래스를 쓰면 나중에 배울 속성과 메서드를 통해 학생과 관련된 데이터와 기능을 한 곳에 모아둘 수 있어 코드가 훨씬 이해하기 쉽고 관리하기 편해집니다.

실생활 예시
비유 클래스(설계도) 객체(실제로 만들어진 것)
붕어빵 붕어빵 틀 붕어빵, 붕어빵, 붕어빵...
쿠키 쿠키 틀 쿠키, 쿠키, 쿠키...
자동차 자동차 설계도 자동차, 자동차, 자동차...
학생들이 가장 헷갈리는 부분

클래스 = 설계도 — class Student:는 학생 자체가 아닙니다. "학생을 만드는 방법"이 적힌 설계도일 뿐이에요.

객체 = 실제로 만들어진 것 — student1 = Student()가 되어야 비로소 실제 학생 하나가 존재합니다.

특히 Student(대문자로 시작, 클래스)와 student(소문자로 시작, 변수/객체)를 같은 것으로 착각하는 경우가 많아요. Student는 설계도이고, student는 그 설계도로 만든 실제 학생입니다. 파이썬은 대소문자를 구분하므로 이 둘은 완전히 다른 이름이에요.

빈칸 채우기
  1. 객체를 만들기 위한 설계도를 (이)라고 합니다.
  2. 클래스로부터 만들어진 실제 데이터를 (이)라고 합니다.
  3. 다음 코드에서 클래스는 무엇인가요?
    python
    class Dog:
        pass

    dog = Dog()
정답
1. 클래스(Class)
2. 객체(Object)
3. Dog
학교 시험 유형
  1. 클래스(Class)란 무엇인지 서술하시오.
  2. 객체(Object)란 무엇인지 서술하시오.
  3. 다음 코드에서 클래스와 객체를 각각 작성하시오.
    python
    class Student:
        pass

    student = Student()
정답
1. 클래스는 객체를 만들기 위한 설계도로, 데이터와 기능을 한 곳에 묶어 정의해 둔 틀입니다.

2. 객체는 클래스라는 설계도를 바탕으로 실제로 만들어진 결과물입니다.

3. 클래스는 Student, 객체는 student입니다.

 

Chapter 37
객체와 속성(Attribute) · 객체마다 다른 데이터 담기
python
class Student:
    pass

student1 = Student()

학생이라는 객체에게는 이름, 나이, 점수 같은 정보가 있어야 하고, 객체는 이러한 정보를 저장할 수 있습니다. 이 정보, 즉 데이터를 속성(Attribute)이라고 합니다.

선생님 설명 · 속성이란

학생을 한 명 생각해 봅시다. 학생은 이름, 나이, 학교, 점수를 가지고 있습니다. 자동차는 색상, 제조사, 속도를 가지고 있고요. 강아지는 이름, 품종, 나이를 가지고 있습니다.

이처럼 객체가 가지고 있는 정보를 속성(Attribute)이라고 합니다.

속성 추가하기
python
class Student:
    pass

student1 = Student()

student1.name = "김철수"
student1.age = 17
student1.score = 95

객체.속성이름 = 값 형태로 점(.)을 찍고 속성 이름을 붙이면, 그 객체에 새로운 정보를 저장할 수 있어요.

출력하기
python
print(student1.name)
print(student1.age)
print(student1.score)
김철수 17 95
객체마다 다른 값을 가진다
python
class Student:
    pass

student1 = Student()
student2 = Student()

student1.name = "김철수"
student2.name = "이영희"

print(student1.name)
print(student2.name)
김철수 이영희

student1과 student2는 같은 Student 클래스로 만들어졌지만, 서로 독립된 객체이기 때문에 각자 다른 값을 저장할 수 있어요.

리스트와 함께 사용하기
python
class Student:
    pass

students = []

student1 = Student()
student1.name = "김철수"
students.append(student1)

student2 = Student()
student2.name = "이영희"
students.append(student2)

리스트 안에 딕셔너리 대신 객체를 담아둘 수도 있어요.

반복문으로 출력
python
for student in students:
    print(student.name)
김철수 이영희

for문으로 리스트 안의 객체를 하나씩 꺼내면서 .속성이름으로 정보를 꺼낼 수 있어요. 앞에서 배운 "리스트 안에 딕셔너리 넣기"와 매우 비슷한 구조라는 걸 눈치챘나요?

딕셔너리와 비교하기

예전에는 student = {"이름": "김철수", "나이": 17}처럼 썼습니다. 이제는 student = Student() 후 student.name = "김철수", student.age = 17처럼 써요. 둘 다 데이터를 저장한다는 점은 같지만, 접근하는 방식이 다릅니다.

구분 키/속성 사용 방식 예시
딕셔너리 키를 문자열로 사용 student["이름"]
객체 속성으로 사용 (점 표기법) student.name
자주 하는 실수
  • 객체를 만들기 전에 속성 사용 — student.name = "김철수"를 하기 전에 먼저 student = Student()로 객체를 만들어야 해요.
  • 속성 이름 오타 — student.score = 95라고 저장했는데 나중에 student.socre처럼 오타를 내면 서로 다른 속성으로 취급되어 오류가 발생합니다. 속성 이름은 항상 정확히 같게 써야 해요.
  • 객체마다 값이 다르다는 점을 이해 못함 — student1.name과 student2.name은 이름은 같지만(둘 다 .name) 서로 다른 객체에 속한 것이라 완전히 독립적인 값을 가질 수 있어요.
종합 예제 · 학생 관리 프로그램 (속성 활용)
python
class Student:
    pass

students = []

student1 = Student()
student1.name = "김철수"
student1.score = 95
students.append(student1)

student2 = Student()
student2.name = "이영희"
student2.score = 88
students.append(student2)

print("===== 학생 목록 =====")

for student in students:
    print(student.name, "-", student.score)
===== 학생 목록 =====
김철수 - 95 이영희 - 88
빈칸 채우기
  1. 객체가 가지고 있는 정보를 (이)라고 합니다.
  2. 다음 코드의 결과는?
    python
    student.name = "철수"
    print(student.name)
  3. 속성을 출력하는 문법은 student.입니다.
정답
1. 속성(Attribute)
2. 철수
3. 속성이름 (예: name)
학교 시험 유형
  1. 다음 코드의 실행 결과를 작성하시오.
    python
    class Cat:
        pass

    cat = Cat()
    cat.name = "나비"
    cat.age = 2

    print(cat.name)
  2. 속성(Attribute)이 무엇인지, 딕셔너리의 키와 어떻게 다른지 서술하시오.
정답
1. 나비 — cat.name에 저장한 값이 그대로 출력됩니다.

2. 속성은 객체가 점(.) 표기법으로 가지고 있는 데이터입니다. 딕셔너리는 대괄호와 문자열 키(student["이름"])로 접근하지만, 속성은 점과 이름(student.name)으로 접근한다는 점이 다릅니다.
다음 화 예고 — 21화에서는 객체가 만들어지는 순간 자동으로 속성을 채워주는 생성자(Constructor)와 __init__를 배웁니다. 매번 점(.)으로 속성을 하나씩 넣지 않아도 되는 더 깔끔한 방법을 다뤄볼게요.

 

반응형

댓글