파이썬 클래스와 객체지향 프로그래밍(OOP) 입문

복잡한 프로그램을 깔끔하게 구조화하려면? 객체지향 프로그래밍!

객체지향 프로그래밍(OOP)은
✔ 코드 재사용
✔ 유지보수 용이성
✔ 대규모 프로젝트 관리
에 강력한 힘을 발휘하는 프로그래밍 패러다임입니다.


파이썬 클래스와 OOP 기초

1. 클래스(Class)란?

  • 객체를 생성하기 위한 **설계도(템플릿)**입니다.
  • 속성(변수)과 동작(메서드)을 정의합니다.

2. 객체(Object)란?

  • 클래스를 기반으로 생성된 **실제 인스턴스(실체)**입니다.
  • 클래스에 정의된 속성과 메서드를 사용할 수 있습니다.

3. 클래스 기본 구조

class 클래스이름:
    def __init__(self, 매개변수1, 매개변수2):
        self.속성1 = 매개변수1
        self.속성2 = 매개변수2

    def 메서드이름(self):
        실행할 코드
  • __init__ 메서드는 생성자로, 객체가 만들어질 때 자동 호출됩니다.
  • self는 현재 인스턴스 자신을 가리킵니다.

4. 클래스와 객체 만들기 예시

클래스 정의

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

    def bark(self):
        print(f"{self.name}가 짖습니다! 멍멍!")

# 객체 생성
my_dog = Dog("초코", 3)

# 속성 접근
print(my_dog.name)  # 초코
print(my_dog.age)   # 3

# 메서드 호출
my_dog.bark()  # 초코가 짖습니다! 멍멍!

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

  • 클래스 변수: 모든 인스턴스가 공유하는 변수
  • 인스턴스 변수: 각각의 인스턴스가 가지는 개별 변수

예시

class Cat:
    species = "고양이"  # 클래스 변수

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

cat1 = Cat("나비")
cat2 = Cat("루비")

print(cat1.species)  # 고양이
print(cat2.name)     # 루비

6. 상속(Inheritance) 기본

  • 부모 클래스의 속성과 메서드를 자식 클래스가 물려받습니다.
  • 코드 재사용성이 높아집니다.

예시

class Animal:
    def __init__(self, name):
        self.name = name

    def sound(self):
        print("소리를 낸다")

class Dog(Animal):
    def sound(self):
        print("멍멍!")

puppy = Dog("코코")
puppy.sound()  # 멍멍!

7. 캡슐화(Encapsulation)와 접근 제한

  • 속성 이름 앞에 _(protected) 또는 __(private)를 붙여 접근을 제한할 수 있습니다.

예시

class Person:
    def __init__(self, name):
        self.__name = name  # private 변수

    def get_name(self):
        return self.__name

p = Person("철수")
print(p.get_name())  # 철수
# print(p.__name)  # 에러 발생

 


결론 – 클래스를 알면 프로그램이 체계적으로 바뀐다!

객체지향 프로그래밍은 복잡한 코드를 **"구조화"**하고,
현실 세계 모델링을 가능하게 만들어줍니다.

처음에는 어렵게 느껴질 수 있지만,
작은 클래스부터 연습하다 보면 금방 익숙해질 수 있습니다.