1. 객체
🚀 개발을 하다 보면 정수나 실수 또는 문자열 등 기본적인 자료형으로 표현하기 힘든 것들이 존재
➡️ 예를 들어 어떤 게시글을 파이썬으로 표현을 한다면 [게시글 번호, 제목, 작성자, 비밀번호, 내용, 최초작성일자, 최종수정일자, 조회수]가 필요한데 이를 손쉽게 관리 하려면 8개의 항목을 하나의 이름을 가진 객체 object로 만들어서 사용
2. 클래스
🚀 클래스 class를 한 마디로 정의하면 객체를 만드는 도구
🚀 하나의 클래스를 만들어 두면 그 클래스를 통해서 (동일한 구조를 가진) 여러 개의 객체를 만들수 있다
➡️ 같은 클래스로 만든 객체라 하더라도 객체들은 서로 다른 값을 가질수 있음
➡️ 인스턴스 instance 역시 클래스를 이용해서 생성한 객체를 가르키는 용어
💡 객체와 인스턴스의 미묘한 차이
a. 와플머신 클래스로 만든 와플은 객체 object
b. 와플은 와플머신 클래스의 인스턴스 instance
1) 클래스의 구성
👾 클래스의 기본 구성
- 객체를 만들어내는 클래스는 객체가 가져야 할 값과 기능을 가지고 있어야 함
▶️ 값은 변수, 기능은 함수
- 클래스를 구성하는 변수는 a. 클래스를 기반으로 생성된 모든 인스턴스들이 공유하는 변수인 '클래스 변수'와
b. 모든 인스턴스들이 개별적으로 가지는 변수인 '인스턴스 변수'로 분리됨
- 클래스를 구성하는 함수는 메소드 method라고 하고
a) 클래스 메소드 b) 정적 메소드 c) 인스턴스 메소드로 분리
2) 클래스 정의방법
👾 class 키워드로 클래스를 정의
👾 클래스 이름은 Upper Camel Case 규칙을 따름
👾 파이썬은 변수나 함수의 이름을 네이밍할 때 언더바(_)를 이용해 단어를 연결하는 Snake Case 방식을 사용하지만
클래스는 Upper Camel Case 규칙을 따름
ex. print + member : printmember 1) print_member 2) printMember 3) PrintMember
# 클래스는 다음과 같은 형식으로 정의
class 클래스 :
본문
3. 객체 생성
# 클래스가 정의되었다면 다음과 같은 형식으로 객체를 생성
객체 = 클래스()
# 2개의 객체를 만들고 싶으면
객체1 = 클래스()
객체2 = 클래스()
# 클래스 정의와 객체 생성
class WaffleMachine : # WaffleMachine이라는 클래스 정의
pass # 내부코드를 작성하지 않을 때 쓰임
waffle1 = WaffleMachine() # WaffleMachine 이라는 클래스를 이용해 waffle이라는 객체 생성
waffle2 = WaffleMachine()
print(waffle1) # <__main__.WaffleMachine object at 0x102beee60>
# 메모리의 0x102beee60번지에 저장된 WaffleMachine의 객체라는 의미
print(waffle2)
4. 인스턴스 변수와 인스턴스 메소드
🚀 인스턴스 변수란 클래스를 기반으로 만들어지는 모든 인스턴스들이 각각 따로 저장하는 변수
⚡️ 모든 인스턴스 변수는 self라는 키워드를 앞에 붙여줌
🚀 인스턴스 메소드란 인스턴스 변수를 사용하는 메소드
⚡️ 인스턴스 메소드는 반드시 첫 번째 매개변수로 self를 추가해야 함
class Person : # Person 클래스를 정의
# 첫 번째 매개변수가 self이므로 인스턴스 메소드
# 모든 인스턴스는 who_am_i() 메소드를 호출할 수 있음
# 매개변수 self에는 메서드를 호출하는 인스턴스가 전달
# self를 제외한 나머지 매개변수에 실제로 사용될 데이터가 전달
def who_am_i(self, name, age, tel, address):
# 인스턴스 변수 = 매개변수. 모든 인스턴스 변수는 최초에 값이 대입되는 시점에 알아서 생성.
self.name = name
self.age = age
self.tel = tel
self.address = address
boy = Person() # 인스턴스 boy가 생성. 클래스의 생성자가 호출
#print(boy.name) # 'Person' object has no attribute 'name'
boy.who_am_i('john', 15, '123-1234', 'toronto') #인스턴스 메소드 호출
print(boy.name) # john
print(boy.age) # 15
print(boy.tel) # 123-1234
print(boy.address) # toronto
# 클래스에 없는 속성도 추가가 가능함. 다른 언어의 객체와는 다른 방식.
boy.email = 'test@test.com'
print(boy.email) # test@test.com
5. 생성자 constructor
🚀 클래스 이름과 같은 함수를 생성자라고 한다.
🚀 값을 가진 인스턴스를 생성하기 위해 생성자를 이용
🚀 생성자는 인스턴스를 생성할 때 자동으로 호출되는 특별한 메소드
⚡️ 모든 클래스는 __init__() 이라는 이름을 가진 함수를 가지고 있음
➡️ 인스턴스가 생성될 때 자동으로 호출되기 때문에 인스턴스 변수의 초기화 용도로 사용
class Candy:
def __init__(self, shape, color):
print('실행이 될까?')
self.shape = shape
self.color = color
satang = Candy('circle', 'brown')
print(satang.color)
# 실행이 될까?
# brown
6. 소멸자 destructor
🚀 인스턴스가 생성될 때 자동으로 호출되는 생성자와 마찬가지로 인스턴스가 소멸될 때 자동으로 호출되는 메소드
🚀 소멸자는 __del__()
class Sample:
def __del__(self):
print('인스턴스가 소멸됩니다')
sample = Sample()
del sample # 인스턴스가 소멸됩니다
# 매직 메서드 샘플
class Sample:
def __int__(self):
pass
def __len__(self):
return 6
def __str__(self):
return 'what?'
li = [1, 2, 3]
print(len(li)) # 3
sample = Sample()
print(len(sample)) # 6
print(sample) # what?
7. 메소드 method
🚀 클래스가 가지고 있는 함수를 말한다.
🚀 파이썬 프로그래밍에서는 멤버 함수(member funcion) 혹은 인스턴스 함수(instance function) 등의 용어를 더 많이 사용함
class 클래스 이름:
def 메소드 이름(self, 추가적인 매개변수):
pass
[ 내용 참고 : IT 학원 강의 및 책 '혼자 공부하는 파이썬' ]
'Programming Language > Python' 카테고리의 다른 글
[Python] 파일과 경로, 파일 열기, 파일 닫기, 파일 생성, 파일 입출력, pickle (0) | 2024.03.03 |
---|---|
[Python] 클래스 변수, 클래스 메소드, 정적 메소드, 상속 (0) | 2024.03.03 |
[Python] 모듈 만들기, __name__, __init__.py (0) | 2024.03.03 |
[Python] 외부 모듈(external module), 라이브러리와 프레임워크, 데코레이터 (0) | 2024.03.03 |
[Python] 모듈(module), math, random, datetime, time (0) | 2024.03.03 |