본문 바로가기
카테고리 없음

파이썬 객체지향 프로그래밍(OOP) 이해하기 - 클래스와 객체

by 혜택보관소 2024. 11. 15.

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 객체라는 단위로 구성하여,

코드의 재사용성과 유지보수성을 높이는 프로그래밍 방식입니다.

파이썬은 강력한 객체지향 기능을 제공하며, 클래스객체라는 개념을 통해 코드를 구성할 수 있습니다.

이번 글에서는 파이썬의 클래스와 객체에 대한 기초 개념과 정의 및 활용법을 예제와 함께 알아보겠습니다.

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

1. 클래스와 객체란?

클래스(Class)는 객체를 생성하기 위한 설계도와 같은 역할을 합니다. 클래스는 속성과 메서드를 정의하여, 해당 클래스를 기반으로 여러 개의 객체를 만들 수 있습니다.

객체(Object)는 클래스를 통해 생성된 실체로, 클래스에서 정의한 속성과 메서드를 가진 독립적인 개체입니다.

2. 클래스 정의하기

파이썬에서 클래스는 class 키워드를 사용하여 정의하며, 클래스 이름은 보통 첫 글자를 대문자로 작성합니다.

기본 클래스 구조

class 클래스이름:
    클래스의 속성 및 메서드 정의

예제 1: 간단한 클래스 정의하기

아래 예제는 Person이라는 클래스를 정의하고, 이름과 나이를 속성으로 갖는 예제입니다.

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

이 예제에서 __init__ 메서드는 객체가 생성될 때 호출되는 초기화 메서드로, 객체의 기본 속성을 설정합니다.

3. 객체 생성하기

클래스를 정의한 후에는 클래스를 사용해 객체를 생성할 수 있습니다. 객체는 클래스 이름에 괄호를 붙여 생성하며, 생성 시 __init__ 메서드에 정의된 매개변수를 전달해야 합니다.

예제 2: 객체 생성 및 속성 접근

person1 = Person("Alice", 25)
print(person1.name)  # Alice
print(person1.age)   # 25

위 코드에서 person1이라는 객체를 생성하고, nameage 속성에 접근하여 값을 출력합니다.

4. 메서드 정의하기

메서드는 클래스 내부에 정의된 함수로, 객체의 동작을 정의합니다. 메서드는 객체의 상태(속성)를 변경하거나 특정 기능을 수행합니다.

예제 3: 메서드 추가하기

아래 예제는 Person 클래스에 greet라는 메서드를 추가하여 인사말을 출력합니다.

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

    def greet(self):
        print(f"Hello, my name is {self.name} and I'm {self.age} years old.")

person1 = Person("Alice", 25)
person1.greet()  # Hello, my name is Alice and I'm 25 years old.

위 예제에서 greet 메서드는 객체의 nameage 속성을 사용해 인사말을 출력합니다.

5. 클래스 변수와 인스턴스 변수

클래스에는 클래스 변수인스턴스 변수라는 두 종류의 변수가 있습니다.

  • 클래스 변수: 모든 객체가 공유하는 변수로, 클래스 선언 내부에 정의합니다.
  • 인스턴스 변수: 각 객체가 독립적으로 가지는 변수로, __init__ 메서드 내에서 self를 사용해 정의합니다.

예제 4: 클래스 변수와 인스턴스 변수

class Person:
    species = "Homo sapiens"  # 클래스 변수

    def __init__(self, name, age):
        self.name = name       # 인스턴스 변수
        self.age = age         # 인스턴스 변수

person1 = Person("Alice", 25)
person2 = Person("Bob", 30)

print(person1.species)  # Homo sapiens
print(person2.species)  # Homo sapiens

위 예제에서 species는 모든 객체가 공유하는 클래스 변수이며, nameage는 각 객체가 고유하게 가지는 인스턴스 변수입니다.

6. 상속 (Inheritance)

상속은 기존 클래스의 속성과 메서드를 상속받아 새로운 클래스를 생성하는 기능입니다. 상속을 통해 코드 재사용성을 높이고, 기존 기능을 확장할 수 있습니다.

예제 5: 클래스 상속

아래 예제는 Student 클래스가 Person 클래스를 상속받아 grade 속성을 추가하는 코드입니다.

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

class Student(Person):  # Person 클래스를 상속
    def __init__(self, name, age, grade):
        super().__init__(name, age)  # 부모 클래스 초기화
        self.grade = grade

student1 = Student("Alice", 20, "A")
print(student1.name)    # Alice
print(student1.grade)   # A

위 코드에서 Student 클래스는 Person 클래스를 상속받아 nameage 속성 외에 grade 속성을 추가로 가집니다.

7. 메서드 오버라이딩

메서드 오버라이딩은 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의하는 기능입니다. 이를 통해 자식 클래스에서 부모 클래스와 다른 동작을 구현할 수 있습니다.

예제 6: 메서드 오버라이딩

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

    def greet(self):
        print(f"Hello, my name is {self.name}.")

class Student(Person):
    def greet(self):
        print(f"Hi, I'm {self.name}, and I'm a student.")

person1 = Person("Alice", 25)
student1 = Student("Bob", 20)

person1.greet()   # Hello, my name is Alice.
student1.greet()  # Hi, I'm Bob, and I'm a student.

위 코드에서 Student 클래스의 greet 메서드는 Person 클래스의 greet 메서드를 오버라이딩하여 다른 메시지를 출력합니다.

마무리

이번 글에서는 파이썬 객체지향 프로그래밍의 기본 개념인 클래스와 객체에 대해 알아보았습니다.

객체지향 프로그래밍을 통해 코드의 재사용성과 확장성을 높일 수 있습니다.

파이썬에서 클래스를 정의하고, 객체를 생성하며, 상속과 메서드 오버라이딩을 활용해보세요.

목차