TIL (Today I Learned) - 클래스와 메서드
값 비교
- == (값 비교): 두 리스트의 값이 동일한지를 확인합니다.
- 리스트 안의 값이 같으면 True.
- 예를 들어, [1, 2, 3]과 [1, 2, 3]은 값이 동일하므로 True.
- is (참조 비교): 두 변수가 같은 메모리 주소를 참조하고 있는지 확인합니다.
- 같은 객체를 참조하고 있으면 True.
- 예를 들어, list_02 = list_01로 복사했을 때 두 변수는 같은 메모리를 가리키므로 is는 True.
list_01 = [1, 2, 3]
list_02 = list_01
# 값 비교
print(list_01 == list_02) # True: 두 리스트의 값이 동일
# 메모리 참조 비교
print(list_01 is list_02) # True: 같은 객체를 참조
클래스와 인스턴스
- 클래스(Class): 특정 객체를 만들기 위한 설계도.
- 인스턴스(Instance): 클래스를 기반으로 생성된 구체적인 객체.
- 예: class Person -> p1 = Person()로 객체 생성.
클래스 변수와 인스턴스 변수
- 클래스 변수
- 클래스 내에서 선언된 변수로, 모든 인스턴스가 공유.
- 클래스명으로 접근하거나 수정 가능.
- 인스턴스 변수
- 인스턴스마다 독립적으로 가지고 있는 변수.
- 생성자 메서드(__init__)에서 self.<name> 형태로 정의.
class Person:
blood_color = 'red' # 클래스 변수
def __init__(self, name):
self.name = name # 인스턴스 변수
p1 = Person('우재') # 인스턴스 생성
print(p1.name) # '우재': 인스턴스 변수를 직접 출력
print(p1.blood_color) # 'red': 클래스 변수가 인스턴스를 통해 참조 가능
- 클래스와 인스턴스 변수 접근 흐름
- 인스턴스에서 접근: 인스턴스 변수 탐색 → 없으면 클래스 변수 탐색.
- 클래스에서 접근: 클래스 변수만 직접 접근 가능.
클래스 변수와 공유 특성
클래스 변수는 모든 인스턴스가 공유합니다. 따라서 클래스 변수의 값을 변경하면, 모든 인스턴스에서 공유된 값이 반영됩니다.
class Circle:
pi = 3.14 # 클래스 변수
def __init__(self, r):
self.r = r # 인스턴스 변수
def area(self):
return self.pi * self.r * self.r # 클래스 변수 사용
c1 = Circle(10)
print(c1.area()) # 314.0: 클래스 변수 pi를 참조
Circle.pi = 5 # 클래스 변수 변경
print(Circle.pi) # 5
print(c1.pi) # 5: 변경된 클래스 변수 값이 반영
클래스 변수와 인스턴스 변수의 혼용
클래스 변수는 여러 인스턴스 간 데이터를 공유할 때 유용합니다. 반면, 인스턴스 변수는 각 객체마다 독립적인 데이터를 저장합니다.
class User:
count = 0 # 클래스 변수
def __init__(self, name):
self.name = name # 인스턴스 변수
User.count += 1 # 클래스 변수 증가
p1 = User('Aiden')
p2 = User('Haley')
print(User.count) # 2: 모든 인스턴스가 클래스 변수를 공유
print(p1.count) # 2
print(p2.count) # 2
메서드 종류
- 인스턴스 메서드
- self를 통해 인스턴스에 접근 가능.
- 인스턴스 속성을 할당하거나 사용할 때 활용.
class Person:
def talk(self): # 인스턴스 메서드
print('안녕')
def eat(self, food): # 인스턴스 메서드
print(f'{food} 냠냠')
p1 = Person()
p1.talk() # '안녕'
p1.eat('피자') # '피자 냠냠'
p1.eat('황올') # '황올 냠냠'
종합 코드 분석
- 클래스와 인스턴스의 기본 원리.
- 클래스 변수와 인스턴스 변수의 차이점.
- 인스턴스 메서드를 통한 객체 조작.
class Circle:
pi = 3.14 # 클래스 변수
def __init__(self, r):
self.r = r # 인스턴스 변수
def area(self): # 인스턴스 메서드
return self.pi * self.r * self.r
# Circle 클래스 인스턴스 생성
c1 = Circle(10)
# 메서드 호출을 통해 결과 확인
print(c1.area()) # 314.0
# 클래스 변수 수정 후, 모든 인스턴스에서 반영됨
Circle.pi = 5
print(Circle.pi) # 5
print(c1.pi) # 5
정리
- 클래스와 인스턴스의 역할과 속성을 명확히 이해.
- 클래스 변수는 데이터 공유, 인스턴스 변수는 독립적 데이터에 활용.
- 메서드의 종류와 역할 (특히 인스턴스 메서드)을 정확히 익힘.
- 객체지향 프로그래밍의 핵심 원리를 구체적으로 학습함.
다음 목표
- 클래스 메서드(@classmethod)와 정적 메서드(@staticmethod)를 학습하고 활용법을 익힐 예정.
- 객체지향 설계 패턴에 대한 이해를 심화.
'내일배움캠프 TIL' 카테고리의 다른 글
| 2025.01.06 TIL - 프로그래머스 입문 문제 풀이 (2) | 2025.01.06 |
|---|---|
| 2025.01.03 TIL- 클래스(2) (1) | 2025.01.03 |
| 2024.12.31 TIL - 빅데이터/인공지능 기초 개념 정리 (1) | 2024.12.31 |
| 2024.12.30TIL (1) | 2024.12.30 |
| 2024.12.27 TIL (0) | 2024.12.27 |