본문 바로가기
프로그래밍/Python

[Python]객체 지향 프로그래밍 (OOP) (1): 클래스와 객체💡

by 다다면체 2025. 3. 28.
728x90
반응형

안녕하세요! 오늘은 프로그래밍의 중요한 패러다임 중 하나인 객체 지향 프로그래밍 (Object-Oriented Programming, OOP) 의 첫 번째 시간으로, OOP의 핵심 개념인 클래스 (Class)객체 (Object) 에 대해 쉽고 재미있게 알아보겠습니다. 마치 현실 세계의 사물을 코드로 옮겨놓는 것과 같은 멋진 경험을 하게 될 거예요! ✨

반응형

🎯 OOP란 무엇일까요? 그리고 왜 OOP를 사용해야 할까요?

OOP는 프로그램을 객체 (Object) 라는 단위로 구성하는 프로그래밍 방식입니다. 객체는 데이터 (속성)기능 (메소드) 을 묶어서 표현하며, 현실 세계의 사물이나 개념을 모델링하는 데 효과적입니다.

OOP를 사용하면 다음과 같은 강력한 장점들을 얻을 수 있습니다:

  • 모듈화 (Modularity): 코드를 독립적인 객체 단위로 나누어 개발하므로, 코드의 유지보수와 재사용성이 높아집니다. 마치 레고 블록처럼, 필요한 부품만 교체하거나 재활용하기 쉬워지는 거죠! 🧱
  • 재사용성 (Reusability): 한번 만들어진 클래스는 여러 번 재사용할 수 있으며, 상속 (Inheritance) 이라는 기능을 통해 기존 코드를 확장하여 새로운 기능을 쉽게 추가할 수 있습니다. 마치 잘 만들어진 설계도를 여러 번 활용하는 것과 같아요! 📐
  • 유지보수 용이성 (Maintainability): 객체 단위로 코드가 분리되어 있어, 특정 부분의 수정이 전체 시스템에 미치는 영향을 최소화할 수 있습니다. 마치 자동차의 특정 부품만 수리하는 것과 같습니다. 🚗
  • 현실 세계 모델링 용이: 현실 세계의 사물이나 개념을 객체라는 형태로 자연스럽게 표현할 수 있어, 복잡한 시스템을 이해하고 설계하는 데 도움을 줍니다. 마치 건물을 설계할 때 실제 건축 자재와 설계를 기반으로 하는 것과 같아요! 🏗️

⚙️ 클래스 정의 및 객체 생성: 나만의 설계도를 만들고 실체화하기!

클래스 (Class) 는 객체를 만들기 위한 설계도 또는 템플릿 과 같습니다. 클래스 안에는 객체가 가질 속성 (데이터) 과 메소드 (기능) 가 정의됩니다.

클래스는 class 키워드를 사용하여 정의합니다.

class Dog:
    # 속성 (attribute)
    name = "멍멍이"
    breed = "강아지"

    # 메소드 (method)
    def bark(self):
        print("왈왈!")

# 객체 생성 (클래스를 이용하여 실제 메모리에 할당된 인스턴스 생성)
my_dog = Dog()

위 코드에서 Dog 라는 클래스를 정의했습니다. 이 클래스는 name 과 breed 라는 속성을 가지고, bark() 라는 메소드를 가집니다.

객체 (Object) 는 클래스를 기반으로 실제로 생성된 실체 (인스턴스) 입니다. 위 코드에서 my_dog = Dog() 는 Dog 클래스의 객체를 생성하여 my_dog 라는 변수에 할당하는 것입니다. 마치 설계도를 보고 실제 강아지를 만드는 것과 같아요! 🐕

🏷️ 속성 (Attribute)과 메소드 (Method): 객체의 특징과 행동

속성 (Attribute) 은 객체가 가지는 데이터 또는 상태 를 나타냅니다. 위의 Dog 클래스 예시에서 name 과 breed 가 속성에 해당합니다. 객체의 속성에 접근하려면 점(.) 연산자를 사용합니다.

print(my_dog.name)   # 출력 결과: 멍멍이
print(my_dog.breed)  # 출력 결과: 강아지

메소드 (Method) 는 객체가 수행할 수 있는 행동 또는 기능 을 나타냅니다. 위의 Dog 클래스 예시에서 bark() 가 메소드에 해당합니다. 객체의 메소드를 호출하려면 점(.) 연산자와 괄호를 사용합니다.

my_dog.bark()  # 출력 결과: 왈왈!

🔑 self 키워드: 객체 자신을 가리키는 특별한 존재

클래스 내에서 정의되는 메소드의 첫 번째 매개변수는 항상 self 입니다. 이 self 는 메소드를 호출한 객체 자신 을 가리킵니다. 메소드 내에서 self 를 사용하여 객체의 속성에 접근하거나 다른 메소드를 호출할 수 있습니다.

class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def meow(self):
        print(f"{self.name}가 야옹!")

my_cat = Cat("나비", 3)
print(my_cat.name)  # 출력 결과: 나비
my_cat.meow()      # 출력 결과: 나비가 야옹!

위 예시에서 __init__ 메소드는 특별한 메소드로, 객체가 생성될 때 자동으로 호출됩니다. self.name = name 은 생성된 객체의 name 속성에 전달된 name 값을 할당하는 것입니다. meow 메소드에서도 self.name 을 사용하여 객체의 이름을 출력합니다.

마무리하며

오늘은 객체 지향 프로그래밍의 가장 기본적인 개념인 클래스와 객체, 그리고 속성, 메소드, self 키워드에 대해 알아보았습니다. OOP는 코드를 더욱 체계적이고 효율적으로 관리할 수 있도록 도와주는 강력한 도구입니다. 다음 시간에는 OOP의 또 다른 중요한 개념인 상속 (Inheritance) 에 대해 함께 알아보도록 하겠습니다. 기대해주세요! 😊

728x90
반응형