클래스(Class)와 속성(Attribute) — 설계도로 데이터 찍어내기
지금까지 학생 한 명의 정보를 저장하려면 딕셔너리를 하나씩 만들었습니다.
학생이 100명이라면 변수도 100개가 필요하겠죠.
이번에는 이런 반복을 해결해주는 파이썬의 핵심 개념, 클래스(Class)를 배우고, 객체마다 서로 다른 데이터를 담는 속성(Attribute)까지 이어서 정리합니다.
요즘은 고등학교에서도 코딩을 정규 과목으로 가르치는 시대입니다. 전공자가 아니어도 바이브 코딩(Vibe Coding)이나 생성형 AI(Generative AI)를 활용하면 누구나 그럴듯한 코드 결과물을 만들어낼 수 있게 되었죠.
개발 언어를 접하는, 전공자가 아닌 일반인 입문자가 많아진 것입니다.
이 시리즈는 글쓴이가 실제로 일반인, 고등학생 등 비전공자·입문자에게 파이썬을 가르치면서 정리한 내용들을 교재 형식으로 엮은 글입니다.최대한 쉽고 친절하게 설명하면서도, 컴퓨터와 프로그래밍 언어에 대한 기초 이론까지 함께 짚고 넘어가려 합니다.
고등학생, 비전공자, 완전 입문자도 따라올 수 있게끔 만든 시리즈이고, 실제 과외 수업 자료를 바탕으로 만들어서 학교 시험처럼 개념 확인 문제도 그대로 들어있어요.
중간중간 빈칸 채우기랑 학교 시험 유형 문제가 나오는데, 정답은 바로 안 보이게 접어뒀습니다. 먼저 스스로 생각해본 다음 "보기"를 눌러서 확인해보세요.

지금까지 학생 정보를 저장하려면 이렇게 했습니다.
"이름": "김철수",
"나이": 17,
"점수": 95
}
student2 = {
"이름": "이영희",
"나이": 18,
"점수": 88
}
학생이 100명이 되면 student1부터 student100까지 변수를 100개나 만들어야 합니다. 너무 관리하기 어려워요.
{"이름": "김철수", "점수": 95},
{"이름": "이영희", "점수": 80}
]
이 방법도 괜찮습니다. 하지만 학생에게 이름, 나이, 점수, 전화번호, 주소, 학교, 학년, 반, 번호처럼 새로운 정보가 계속 추가된다면 딕셔너리가 점점 커지고, 오타(예: "점수"를 "잠수"로 잘못 입력)에도 취약해져요.
자동차 공장을 생각해 봅시다. 자동차를 만들 때마다 설계도를 새로 그릴까요? 아닙니다. 설계도를 한 번 만들어 놓고, 그 설계도로 자동차를 계속 만듭니다.
프로그램도 같습니다. 설계도 하나를 만들고, 필요할 때마다 그 설계도로 학생을 계속 만들어냅니다. 이 설계도를 클래스(Class)라고 합니다.
pass
여기서 pass는 "아직 아무 내용도 없다."라는 의미예요. 클래스 본문이 비어 있으면 오류가 나기 때문에, 나중에 내용을 채울 자리를 pass로 잠시 비워두는 거예요.
pass
Dog는 강아지 자체가 아닙니다. 강아지를 만드는 설계도예요.
pass
dog1 = Dog()
dog2 = Dog()
Dog()처럼 클래스 이름 뒤에 괄호를 붙여서 호출하면, 그 설계도를 바탕으로 실제 강아지(dog1, dog2)가 하나씩 만들어져요.
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는 그 설계도로 만든 실제 학생입니다. 파이썬은 대소문자를 구분하므로 이 둘은 완전히 다른 이름이에요.
- 객체를 만들기 위한 설계도를 (이)라고 합니다.
- 클래스로부터 만들어진 실제 데이터를 (이)라고 합니다.
- 다음 코드에서 클래스는 무엇인가요?
class Dog:
pass
dog = Dog()
정답
2. 객체(Object)
3. Dog
- 클래스(Class)란 무엇인지 서술하시오.
- 객체(Object)란 무엇인지 서술하시오.
- 다음 코드에서 클래스와 객체를 각각 작성하시오.
class Student:
pass
student = Student()
정답
2. 객체는 클래스라는 설계도를 바탕으로 실제로 만들어진 결과물입니다.
3. 클래스는 Student, 객체는 student입니다.
pass
student1 = Student()
학생이라는 객체에게는 이름, 나이, 점수 같은 정보가 있어야 하고, 객체는 이러한 정보를 저장할 수 있습니다. 이 정보, 즉 데이터를 속성(Attribute)이라고 합니다.
학생을 한 명 생각해 봅시다. 학생은 이름, 나이, 학교, 점수를 가지고 있습니다. 자동차는 색상, 제조사, 속도를 가지고 있고요. 강아지는 이름, 품종, 나이를 가지고 있습니다.
이처럼 객체가 가지고 있는 정보를 속성(Attribute)이라고 합니다.
pass
student1 = Student()
student1.name = "김철수"
student1.age = 17
student1.score = 95
객체.속성이름 = 값 형태로 점(.)을 찍고 속성 이름을 붙이면, 그 객체에 새로운 정보를 저장할 수 있어요.
print(student1.age)
print(student1.score)
pass
student1 = Student()
student2 = Student()
student1.name = "김철수"
student2.name = "이영희"
print(student1.name)
print(student2.name)
student1과 student2는 같은 Student 클래스로 만들어졌지만, 서로 독립된 객체이기 때문에 각자 다른 값을 저장할 수 있어요.
pass
students = []
student1 = Student()
student1.name = "김철수"
students.append(student1)
student2 = Student()
student2.name = "이영희"
students.append(student2)
리스트 안에 딕셔너리 대신 객체를 담아둘 수도 있어요.
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) 서로 다른 객체에 속한 것이라 완전히 독립적인 값을 가질 수 있어요.
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
- 객체가 가지고 있는 정보를 (이)라고 합니다.
- 다음 코드의 결과는?
student.name = "철수"
print(student.name) - 속성을 출력하는 문법은
student.입니다.
정답
2. 철수
3. 속성이름 (예: name)
- 다음 코드의 실행 결과를 작성하시오.
class Cat:
pass
cat = Cat()
cat.name = "나비"
cat.age = 2
print(cat.name) - 속성(Attribute)이 무엇인지, 딕셔너리의 키와 어떻게 다른지 서술하시오.
정답
2. 속성은 객체가 점(.) 표기법으로 가지고 있는 데이터입니다. 딕셔너리는 대괄호와 문자열 키(
student["이름"])로 접근하지만, 속성은 점과 이름(student.name)으로 접근한다는 점이 다릅니다.
'Language > Python' 카테고리의 다른 글
| [고등학생부터, 파이썬] 21. 생성자 (__init__) 와 메서드 (Method) (0) | 2026.09.14 |
|---|---|
| [고등학생부터, 파이썬] 19. 예외처리(Exception) (0) | 2026.09.07 |
| [고등학생부터, 파이썬] 18. 파일 입출력 (1) | 2026.09.04 |
| [고등학생부터, 파이썬] 17. 모듈 ( + random , math, datetime ) (0) | 2026.09.04 |
| [고등학생부터, 파이썬] 16. 함수 종합 프로젝트 (0) | 2026.09.01 |
댓글