1. 클래스
1-1) 클래스
클래스: 객체를 만들기 위한 설계도
클래스는 속성과 메서드를 정의하며 속성은 클래스의 상태나 특성을 나타내고, 메서드는 클래스가 수행할 수 있는 동작을 정의한다.
class Car: ## 자동차라는 클래스 생성
def __init__(self, brand, model): ## 클래스 초기화 함수
self.brand = brand # 속성(멤버변수)
self.model = model # 속성(멤버변수)
def drive(self): # 메서드
print(f"{self.brand} {self.model} is driving.")
쉽게 말하면 self가 붙어있는 클래스 내의 변수를 속성, 클래스 내의 함수를 메서드라고 생각하면 된다.
1-2) self에 대한 이해
1. 클래스 내부에서 사용할 변수는 self로 구분 짓는다.
2. self를 변수에 붙이지 않아도 되지만, 붙이지 않은 변수는 클래스 내에서 공유되지 않을 뿐 아니라 클래스 밖에서 호출할 수 없다.
3. self는 자기 자신을 뜻한다.(자기자신 = 현재 클래스)
4. 클래스 함수의 첫번째 파라미터
파이썬은 이를 통해서 해당 메소드가 속한 인스턴스의 속성이나 다른 메서드에 접근할 수 있다.
→ 해당 객체에 접근하기 위한 형식으로 실제 클래스 밖에서 함수를 호출할때는 self는 무시해도 된다.
멤버변수: self로 지정한 변수
멤버함수: 클래스 내에서 정의된 함수이며 클래스 내에서 호출할 때는 보통 'self.함수이름' 의 형식으로 호출한다.
클래스 초기화 함수: __init__
해당 클래스의 객체를 만들때 가장 먼저 자동으로 실행되는 함수
초기화 함수를 통해 멤버변수를 생성한다.
2. 인스턴스
인스턴스: 클래스를 기반으로 생성된 실제 객체. 클래스의 정의에 따라 다양한 인스턴스를 만들수 있고 각 인스턴스는 고유한 속성 값을 가질 수 있다.
class Car: ## 자동차라는 클래스 생성
def __init__(self, brand, model): ## 클래스 초기화 함수
self.brand = brand # 속성(멤버변수)
self.model = model # 속성(멤버변수)
def drive(self): # 메서드
print(f"{self.brand} {self.model} is driving.")
my_car = Car("Toyota", "Corolla") ## Car클래스에 대한 객체(인스턴스) 생성
my_car.drive() # 출력: Toyota Corolla is driving.
my_car라는 객체를 만들었다.
Car클래스의 객체가 생성될 때 실행되는 초기화 함수는 2개의 파라미터(속성)를 받는데 brand와 model을 받는 것을 알 수 있다.
그래서 my_car의 정보를 입력하여 브랜드는 Toyota이고 모델은 Corolla인 객체를 만들었다.
인스턴스(객체)는 클래스내의 모든 함수(메서드)를 사용할 수 있으며 '객체이름.함수명'으로 호출한다.
위의 예시를 보면 my_car.drive()를 사용하여 my_car에 저장된 속성을 통해 문장을 출력했다.
예시에서는 my_car객체만 만들었지만, 나 뿐만 아니라 엄마, 아빠, 동생 등 원하는 객체(인스턴스)를 계속 생성할 수 있다.
ex)
my_mom = Car("볼보", "XC60")
my_fa = Car("현대", "제네시스GV80")
my_dau = Car("르노삼성", "SM7")
위의 객체들도 당연히 Car클래스에 존재하는 함수를 모두 사용할 수 있으며 해당 객체의 속성에 맞게 함수가 작동한다.
또 다른 예시
class Car:
def __init__(self, brand, model, fuel):
self.brand = brand # 속성
self.model = model # 속성
self.fuel = fuel # 속성 (현재 연료량)
def drive(self, distance):
fuel_needed = distance * 0.1 # 예를 들어, 1km당 0.1L 연료 소모
if fuel_needed <= self.fuel:
self.fuel -= fuel_needed
print(f"{self.brand} {self.model} drove {distance} km.")
else:
print(f"Not enough fuel to drive {distance} km. Please refuel!")
def refuel(self, amount):
self.fuel += amount
print(f"Refueled {amount}L. Current fuel: {self.fuel}L.")
# 사용 예시
my_car = Car("Toyota", "Corolla", 10) # 초기 연료 10L
my_car.drive(50) # 50km 주행 시도
my_car.refuel(20) # 20L 연료 추가
my_car.drive(50) # 다시 50km 주행
이번에 새롭게 만든 Car클래스는 brand와 model뿐만 아니라 연료도 속성으로 추가되었다.
drive(self, distance) 메소드: 주어진 거리만큼 자동차를 주행을 시도한다.
주행 거리당 연료 소모량을 계산하여, 남은 연료가 충분한지 확인한 후 주행한다.
refuel(self, amount): 주어진 양만큼 연료를 추가한다.
위의 코드를 직접 실행시켜보고 my_car객체 뿐만 아니라 다양한 객체를 만들어서 함수들을 실행해보면서
클래스와 인스턴스에 대해 이해하면 좋을 거 같다.
'💂군대 > KAIST ICT Academy' 카테고리의 다른 글
M12 - 에러 핸들링 (1) | 2024.10.13 |
---|---|
M11 - 상속과 오버라이딩 (0) | 2024.10.12 |
MO9 - 문자열과 입출력 (7) | 2024.09.18 |
MO8 - 사전과 집합 (1) | 2024.09.18 |
MO7 - 리스트와 튜플 (1) | 2024.09.12 |