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
루오