클래스에 대해 자신이 없어서인지, 익숙하지 않아서인지 문제를 풀면서 은연 중에 클래스 사용을 피해온 것 같아 다시 한번 정리해보려 한다.
클래스는 금형과 같이 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 것이고, 이것으로 만들어 낸 것을 객체라 한다.
철수 = Student()
영희 = Student()
Student
는 클래스, 철수
와 영희
는 객체인 셈이다.
객체와 인스턴스
클래스로 만들어 진 것을 단독으로 설명할 때 주로 객체라 한다. "철수
와영희
는 각각 객체이다."
단, 클래스와 객체의 관계를 위주로 설명해야 할 때는 주로 인스턴스라 부른다. "철수
와영희
는Student
의 인스턴스이다."
학생의 국어, 영어, 수학 성적을 포함하는 Student
클래스는 이처럼 정의할 수 있다.
class Student:
def __init__(self, kor, eng, math):
self.kor = kor
self.eng = eng
self.math = math
클래스 내의 __init__
라는 함수는 클래스의 형태를 정의하며, 생성자(constructor)라 불린다. Student
를 지칭하는 self
를 항상 첫 번째 인자로 포함한다.
학생은 국어, 영어, 수학에 해당하는 kor
, eng
, math
속성을 지니는데, 이를 멤버 변수라 부른다. 멤버 변수 이름으로 해당 값에 접근할 수 있다.
철수 = Student(90, 80, 70)
print(철수.kor)
# 90
아직까지는 학생의 국어, 영어, 수학 성적을 모두 알아야 객체를 생성할 수 있다.
# 철수의 수학 성적이 아직 안나왔다면?
철수 = Student(90, 80)
>>> __init__() missing 1 required positional arguments: 'math'
그러나 아래처럼 정의할 때 초기값을 설정해준다면, 추후에 값을 변경할 수도 있다.
class Student:
def __init__(self, kor=0, eng=0, math=0):
self.kor = kor
self.eng = eng
self.math = math
철수 = Student()
철수.kor = 90
철수.eng = 80