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

[파이썬 심화] 객체지향 프로그래밍, 클래스와 객체 사용법, 객체지향 활용

by 개발자를 꿈꾸는 사람들과 함꼐 2025. 4. 5.

객체지향 프로그래밍이란?

프로그래밍을 배우다 보면 '객체지향(Object-Oriented Programming, OOP)'이라는 용어를 자주 접하게 됩니다.   객체지향 프로그래밍은 현실 세계를 코드로 모델링하기 위한 개념으로, 사물(객체)의 특징(속성)과 행동(메서드)을 코드로 정의하는 방식입니다. 예를 들어, “자동차”라는 개념을 생각해보겠습니다.

      
  • 속성: 색상, 브랜드, 속도
  •   
  • 행동: 가속하다, 감속하다, 정지하다

이러한 정보를 하나의 클래스(class)로 정의하고, 실제 동작하는 자동차를 객체(object)로 만들어 사용하는 방식이 객체지향입니다. 파이썬은 객체지향 언어로, 클래스와 객체를 쉽게 만들고 활용할 수 있는 기능을 제공합니다. 그럼 이제 클래스와 객체를 파이썬 코드로 어떻게 작성하는지 알아보겠습니다.

클래스와 객체의 사용법

1. 가장 간단한 클래스 만들기

class Person:
    def say_hello(self):
        print("안녕하세요!")

class 키워드를 사용해 클래스를 정의합니다.   say_hello는 클래스 내부의 함수로, 이런 함수를 메서드(method)라고 부릅니다.   모든 메서드는 첫 번째 인자로 self를 받아야 하며, 이는 객체 자신을 의미합니다.

2. 클래스에서 객체 생성하기

p1 = Person()
p1.say_hello()  # 출력: 안녕하세요!

Person()은 클래스에서 객체(인스턴스)를 생성하는 문법입니다.   생성된 객체는 p1 변수에 저장되고, 해당 객체의 say_hello() 메서드를 호출할 수 있습니다.

3. 생성자 __init__ 메서드로 속성 초기화

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

    def introduce(self):
        print(f"제 이름은 {self.name}이고, 나이는 {self.age}세입니다.")
p2 = Person("영희", 28)
p2.introduce()
# 출력: 제 이름은 영희이고, 나이는 28세입니다.

__init__은 객체가 생성될 때 자동으로 호출되는 생성자입니다.   여기서 nameage 속성을 설정해주며, 이후 메서드에서 이 속성들을 자유롭게 사용할 수 있습니다.

4. 클래스 속성 vs 인스턴스 속성

class Dog:
    species = "포유류"  # 클래스 속성

    def __init__(self, name):
        self.name = name  # 인스턴스 속성

dog1 = Dog("초코")
dog2 = Dog("바둑이")

print(dog1.species)  # 포유류
print(dog1.name)     # 초코

클래스 속성은 모든 인스턴스가 공유하는 값이고, 인스턴스 속성은 객체마다 개별적으로 저장되는 값입니다.   species는 강아지라는 종 전체의 특징이고, name은 각 강아지 개별의 이름에 해당하죠.

객체지향 활용(메서드, 상속 활용)

1. 메서드를 활용한 동작 구현

class Calculator:
    def __init__(self):
        self.result = 0

    def add(self, num):
        self.result += num
        return self.result

    def reset(self):
        self.result = 0
calc = Calculator()
print(calc.add(5))   # 5
print(calc.add(3))   # 8
calc.reset()
print(calc.result)   # 0

Calculator 클래스는 상태(result)를 유지하면서 덧셈을 누적하고 초기화하는 기능을 제공합니다.   메서드를 통해 객체가 “동작”을 수행하게 만드는 구조를 체험할 수 있습니다.

2. 클래스 상속과 오버라이딩

class Animal:
    def speak(self):
        print("소리를 낸다")

class Cat(Animal):
    def speak(self):
        print("야옹~")
my_cat = Cat()
my_cat.speak()  # 출력: 야옹~

Cat 클래스는 Animal 클래스를 상속받아 기능을 확장하거나 수정할 수 있습니다.   부모 클래스의 speak() 메서드를 자식 클래스에서 재정의(오버라이딩)하여 고양이만의 동작을 만들었습니다.

3. 객체리스트와 반복문 활용

class Student:
    def __init__(self, name, grade):
        self.name = name
        self.grade = grade

students = [
    Student("민수", 90),
    Student("지연", 85),
    Student("현우", 95)
]

for s in students:
    print(f"{s.name} 학생의 점수는 {s.grade}점입니다.")

여러 개의 객체를 리스트에 담아 반복문으로 처리할 수 있습니다.  실제 프로그램에서는 이런 구조로 데이터 관리, 검색, 출력 등을 구현하게 됩니다. 그 외 객체지향을 활용 할 수 있는 방법은 다음과 같습니다.

      
  • 학생 관리 시스템: 클래스 활용해 이름, 점수, 출결 기록 관리
  •   
  • 도서 대출 앱: 책 클래스와 사용자 클래스를 조합해 대출 기능 구현
  •   
  • 은행 계좌 시뮬레이터: 입금, 출금 메서드와 잔액 속성으로 구조화
  •   
  • 텍스트 기반 RPG 게임: 캐릭터 클래스, 몬스터 클래스 구현 가능

마무리

객체지향 프로그래밍은 파이썬의 핵심 기능 중 하나로, 프로그램을 더 체계적이고 확장성 있게 만들 수 있는 구조를 제공합니다. 초보자에게는 다소 낯설 수 있지만, 클래스를 직접 만들어보고 객체를 생성하면서 점점 익숙해질 수 있습니다.

클래스와 객체를 이해하면, 실생활에서 반복적으로 사용하는 구조를 코드로 잘 표현할 수 있습니다.  앞으로 더 복잡한 프로젝트를 만들기 위한 튼튼한 기초가 되어줄 것입니다.