본문 바로가기
프로그래밍, 알고리즘 (Algorithm)

파이썬 객체지향 프로그래밍, 클래스? 객체? 인스턴스?

by 뉴디라 2023. 4. 24.

1. 파이썬 객체 지향 프로그래밍

  • 파이썬은 객체 지향 프로그래밍(object-oriented programming : OOP) 언어입니다. 이는 객체를 생성하고 조작하는 것이 가능하다는 것을 의미합니다.
  • 객체 지향 프로그래밍은 클래스라는 템플릿을 사용하여 객체의 속성과 메소드를 정의합니다. 이렇게 정의된 클래스를 기반으로, 여러 개의 객체를 생성할 수 있습니다. 이렇게 생성된 객체는 클래스의 인스턴스라고 부릅니다.
  • 그럼, 클래스, 객체, 인스턴스에 대해서 더 상세히 알아보겠습니다.

 

 

 

2. 파이썬 클래스, 객체 및 인스턴스란?

  • 클래스
    • 클래스는 객체의 속성(attribute)과 행동(behavior)을 정의하기 위한 일종의 설계도입니다.
    • 클래스는 하나의 묶음으로 각각의 멤버(member)인 변수와 메소드(method)를 가집니다.
    • 클래스를 정의할 때, 클래스명, 변수, 메소드 등을 정의하고 그 안에서 사용될 코드 블록을 정의합니다.
    • 예시: Car 클래스는 모델, 제조사, 가격 등의 속성을 가지며, 이동, 정지, 엔진시작 등의 행동을 수행하는 메소드를 가질 수 있습니다.
  • 객체
    • 객체는 클래스를 이용하여 생성된 실체입니다.
    • 객체는 클래스에서 정의된 속성과 메소드를 가지며, 이를 통해 기능을 수행할 수 있습니다.
    • 객체는 메모리에서 할당되며, 여러 개의 객체를 생성할 수 있습니다.
    • 예시: Car 클래스에서는 객체는 특정 모델, 제조사, 가격 등의 속성 값을 가질 수 있으며, 주행, 정지, 엔진시작 등의 메소드를 수행할 수 있습니다.
  • 인스턴스
    • 인스턴스는 객체와 같은 의미로 사용되는 경우가 많지만, 클래스를 기반으로 생성된 하나의 객체를 의미합니다.
    • 예시: Car 클래스에서 인스턴스는 "Sonata", "BMW"와 같은 특정 모델, 제조사, 가격 등의 속성 값을 가진 객체입니다.
  • 따라서, 클래스는 설계도, 객체는 클래스를 이용하여 생성된 실체, 인스턴스는 클래스를 기반으로 생성된 특정한 하나의 객체를 의미합니다. 이해를 돕기 위해서는, 클래스가 자동차 공장을 뜻하고, 객체는 공장에서 생산된 자동차, 인스턴스는 그 중에서도 특정한 차량의 개념으로 이해할 수 있습니다.

 

 

 

3. 파이썬 객체 지향 프로그래밍을 사용하는 이유

  • 파이썬 객체 지향 프로그래밍(OOP)을 사용하는 이유는 다음과 같습니다.

  • 코드의 재사용성
    • OOP를 사용하면 클래스를 정의하여 코드를 재사용할 수 있습니다.
    • 예를 들어, Car 클래스를 정의하여 다양한 모델의 자동차 객체를 생성할 수 있으며, 이를 재사용할 수 있습니다.
    • 코드의 재사용성은 개발 시간을 단축시키고 유지보수를 쉽게 할 수 있도록 도와줍니다.
  • 코드의 가독성
    • OOP를 사용하면 클래스의 이름, 속성, 메소드 등을 통해 코드의 의도를 명확하게 나타낼 수 있습니다.
    • 예를 들어, Car 클래스에서는 객체의 모델, 제조사, 가격 등의 속성과 주행, 정지, 엔진시작 등의 메소드를 사용하여 자동차의 기능을 명확하게 표현할 수 있습니다.
    • 이는 코드의 가독성을 높이고 코드를 이해하기 쉽게 만듭니다.
  • 코드의 유지보수성
    • OOP를 사용하면 클래스와 객체를 이용하여 모듈화된 코드를 작성할 수 있습니다.
    • 이는 코드를 수정하거나 버그를 수정할 때 일부분만 수정하면 되므로 코드의 유지보수성을 높여줍니다.
    • 또한, 코드를 수정할 때 다른 부분에 영향을 미치지 않으므로 안정성도 높여줍니다.
  • 따라서, Car 클래스 예시에서 OOP를 사용하는 이유는 자동차 객체를 생성하여 코드를 재사용하고, 클래스와 객체를 이용하여 코드를 모듈화하여 가독성과 유지보수성을 높이기 위함입니다.

 

 

 

4. 클래스, 객체 및 인스턴스의 예시 코드

  • 아래는 Car 클래스에서 객체의 속성과 메소드를 사용하여 자동차의 기능을 표현한 예시 코드입니다.
class Car:
    def __init__(self, model, make, price):
        self.model = model
        self.make = make
        self.price = price
        self.speed = 0
        
    def start(self):
        self.speed = 10
        print(f"{self.make} {self.model} starts and moves at {self.speed} mph.")
        
    def stop(self):
        self.speed = 0
        print(f"{self.make} {self.model} stops and speed becomes {self.speed} mph.")
        
    def accelerate(self, acceleration):
        self.speed += acceleration
        print(f"{self.make} {self.model} accelerates to {self.speed} mph.")
        
    def brake(self, deceleration):
        if self.speed - deceleration < 0:
            self.speed = 0
        else:
            self.speed -= deceleration
        print(f"{self.make} {self.model} slows down to {self.speed} mph.")
  • 위 코드에서는 Car 클래스를 정의하고, __init__ 메소드를 사용하여 자동차 객체의 모델, 제조사, 가격 등의 속성을 설정합니다.
  • 또한, start, stop, accelerate, brake 메소드를 사용하여 자동차의 주행, 정지, 가속, 감속 등의 기능을 표현합니다.
  • 예를 들어, my_car 객체를 생성하고 start 메소드를 호출하면 my_car 객체가 주행을 시작하며, stop 메소드를 호출하면 정지합니다.
my_car = Car("Model S", "Tesla", 80000)
my_car.start()  # Tesla Model S starts and moves at 10 mph.
my_car.accelerate(30)  # Tesla Model S accelerates to 40 mph.
my_car.brake(20)  # Tesla Model S slows down to 20 mph.
my_car.stop()  # Tesla Model S stops and speed becomes 0 mph.
  • 따라서, Car 클래스를 정의하고 객체의 속성과 메소드를 사용하여 자동차의 기능을 명확하게 표현할 수 있습니다.

댓글