파이썬 예제 (자동차 클래스)

오늘은 파이썬으로 자동차 클래스를 만들어 보고자 합니다.

예를 들면, 자동차의 연비, 최대 연료 탱크량, 현재 연료량, 주행거리 등을 속성 (Attribute or Property)으로 갖고 "기름을 넣다", "주행하다" 등의 행위를 함수 (Method) 로 구현하고자 합니다.

클래스를 설계할 때, 위와 같이 속성은 변수로, 행위는 함수로 구현하는 것이 기본입니다.

아래와 같이 사용합니다.

두개의 파이썬 파일 (main.py, car.py) 로 구성되어 있으므로 두 파일을 같은 경로에 두고 main.py를 실행하면 됩니다. 

먼저 Car Class 객체를 생성하고 사용하는 main.py 파일입니다.

main.py

from car import Car

c = Car('마이카', 15, 60) # 이름, 연비, 연료탱크량
c.print()

c.chargeFuel(47)
c.print()

c.drive(100)
c.print()

코드는 아래와 같이 동작합니다.

  • 3번 라인 : Car 클래스 객체 c 생성, (차량이름, 연비, 최대연료탱크량)
  • 4번 라인 : Car 클래스 print() 메서드 호출, 차량 정보 출력
  • 6번 라인 : Car 클래스 chargeFuel() 메서드 호출, 기름 충전
  • 9번 라인 : Car 클래스 drive() 메서드 호출, 차량 주행

 

위 코드의 수행 결과는 다음과 같습니다.

마이카를 한대 생성하고, 기름을 47 리터 충전 후, 100 Km를 주행한 결과입니다.

[Car 클래스 생성 후 사용결과]

car.py

다음으로 Car Class 코드를 살펴보겠습니다.

class Car:

    def __init__(self, _name='Avante', _efficiency=10, _maxtank=50):
        self.name = _name 
        self.fe = _efficiency
        self.max = _maxtank
        self.fuel = 0 # 남은 연로량
        self.mileage = 0 # 누적 주행거리

    # 연료 충전
    def chargeFuel(self, fuel):   
        before = self.fuel
        if fuel + self.fuel > self.max:
            self.fuel = self.max
        else:
            self.fuel += fuel
        print(f'[Fuel Charged : {self.fuel-before}]\n')
        

    # 차량 주행
    def drive(self, dist):
        before = self.mileage
        if dist>self.drivingDistance():
            self.fuel = 0
            self.mileage += self.drivingDistance()
        else:
            self.fuel -= dist/self.fe
            self.mileage += dist
        print(f'[Driving : {self.mileage-before}]\n')
            

    # 주행가능 거리
    def drivingDistance(self):
        return self.fuel*self.fe

    # 정보 출력
    def print(self):
        print('-'*50)
        print(f'<Car Name, {self.name}>')
        fuel_info = f'Remaining Fuel\t: {self.fuel}/{self.max}L\nFuel Efficiency\t: {self.fe} Km/liter'
        dist_info = f'Max Driving Dis\t: {self.drivingDistance()} Km'
        mileage_info = f'Current Mileage\t: {self.mileage} Km'

        print(fuel_info)
        print(dist_info)
        print(mileage_info)
        print('-'*50)
        print()

Car 클래스를 요약해 보면 다음과 같습니다.

  • 이름, 연비, 최대연료량, 현재연료량, 누적주행거리 속성을 가짐 (멤버 변수)
  • "기름을 넣다", "주행하다", "주행가능거리를 계산하다", "정보를 출력한다" 등의 행위를 가짐 (멤버 함수)

처음에 설명한대로 자동차의 속성과 행위에 대한 부분이 각각 변수함수로 잘 구분되어 있습니다.

 

간단하지만, 아래의 경우에 대한 오류처리도 추가해 두었습니다.

  • 기름탱크의 총 양보다 많은 기름을 주유한 경우
  • 기름이 얼마 없는데 많은 거리를 주행하는 경우

 

클래스 개념을 공부하는데 도움이 되었으면 합니다.

이 글이 쉽게 이해된다면, Car 클래스에서 상속받은 Hybrid Car 클래스를 만들어 보는 것도 공부에 도움이 될 것입니다.

감사합니다.

댓글

이 블로그의 인기 게시물

Qt Designer 설치하기

C++ 예제 (소켓 서버, 이미지, 파일전송)