클래스, class
템플릿 또는 설계도
· 클래스
클래스는 일종의 템플릿 또는 설계도로 생각할 수 있다.
예를 들어, '자동차'라는 클래스를 만들 수 있고, 이 클래스에는 '색상', '브랜드', '모델' 등과 같은 속성과 '달리기', '정지', '가속' 등과 같은 메소드(행동)을 정의할 수 있다.
이 템플릿을 기반으로 실제 '자동차' 객체를 만들 수 있다. 이렇게 만들어진 각 객체를 클래스의 인스턴스라고 한다.
· 기본 형태
class class_name:
def __init__(self, attribute):
self.attribute = attribute
def method(self, parameter):
print(f"안녕하세요, 저의 속성은 {self.attribute}입니다.")
- class : 클래스를 정의한다.
- class_name : 클래스의 이름이다. 클래스 이름의 첫 글자는 대문자로 작성한다.
- __init__메소드 : 파이썬 클래스의 생성자이다. 인스턴스의 초기 상태를 설정한다.
- self : 클래스의 인스턴스를 참조한다. 이를 통해 인스턴스의 속성과 메소드에 접근할 수 있다.
- attribute : 클래스의 속성이다. 속성은 클래스의 인스턴스가 가지는 데이터를 나타낸다.
- method : 클래스의 메소드이다. 메소드는 클래스의 인스턴스가 수행할 수 있는 행동을 나타내며, 클래스 내부에 정의된 함수이다.
· 동작 원리
- 클래스를 정의하여 객체를 생성하기 위한 메소드와 속성을 지정한다.
- __init__ 메소드를 사용하여 인스턴스의 초기 상태를 설정한다.
즉, 인스턴스가 생성될 때 어떤 속성을 가질지, 그 속성들의 초기 값을 어떻게 설정할지 등을 정의한다. - self 키워드를 통해 __init__ 메소드를 자동으로 호출하여, 인스턴스의 속성에 접근하거나 메소드를 호출한다.
class My_self:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"안녕하세요, 저의 이름은 {self.name}이고, 나이는 {self.age}입니다.")
me = My_self('sungmin', '20') # me 변수는 'sungmin'이라는 인스턴스를 참조하는 변수이다.
## 이 변수를 통해 'sungmin' 인스턴스에 접근할 수 있다.
me.introduce() # 안녕하세요, 저의 이름은 sungmin이고, 나이는 20입니다. 출력
위의 코드에서 __init__ 메소드는 'name'과 'age'라는 두 개의 매개변수를 받는다.
이 메소드가 호출되면, 이 매개변수들의 값이 각 각 인스턴스의 'name'과 'age' 속성에 저장된다.
My_self('sungmin', '20)을 통해 'My_self' 클래스의 인스턴스를 생성하면, __init__ 메소드가 자동으로 호출되어 'sungmin' 과 '20'이 각 각 'name'과 'age' 속성에 저장된다.
만약 __init__ 메소드를 사용하지 않는다면, 클래스의 인스턴스를 생성할 때 초기 상태를 설정하지 못한다는 문제가 발생할 수 있다.
class My_self:
def introduce(self):
print(f"안녕하세요, 저의 이름은 {self.name}이고, 나이는 {self.age}입니다.")
me = My_self()
me.introduce() # AttributeError 오류 발생
My_self 객체에는 'name'이라는 속성이 없다는 AttributeError 오류가 발생하게 된다.
이는 My_self 클래스가 __init__ 메소드를 통해 'name'과 'age' 속성의 초기 상태를 설정하지 않았기 때문이다.
따라서, __init__ 메소드는 클래스의 인스턴스가 생성될 때 인스턴스의 초기 상태를 설정하는 데 매우 중요한 역할을 수행한다.
클래스에 대해 알아보았다.
클래스가 가지는 속성과 메소드(행동)을 통해 클래스가 정의하는 여러 객체를 생성할 수 있었다.
여러 개체(클래스의 인스턴스)를 생성하기도 편리하였고, 코드의 가독성이 좋아 흐름을 이해하기 좋았다.