Programming Languages/Python

클래스와 객체지향 프로그래밍

newclass 2025. 3. 26. 04:03

1. 클래스와 객체지향 프로그래밍

객체지향 프로그래밍 소개

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

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 객체(Object)들의 모음으로 구성하는 프로그래밍 패러다임입니다. 각 객체는 데이터(속성)와 해당 데이터를 처리하는 메서드(기능)를 가지고 있습니다.

1.2 객체지향 프로그래밍의 장점

  • 코드 재사용성: 한번 작성한 클래스는 여러 곳에서 재사용할 수 있습니다.
  • 유지보수 용이성: 객체 단위로 코드가 모듈화되어 있어 디버깅과 수정이 쉽습니다.
  • 확장성: 기존 코드 수정 없이 새로운 기능을 추가할 수 있습니다.
  • 현실 세계 모델링: 현실 세계의 개체를 프로그램 내에서 표현하기 용이합니다.

1.3 객체지향 프로그래밍의 핵심 개념

  • 클래스(Class): 객체를 생성하기 위한 템플릿 또는 청사진
  • 객체(Object): 클래스의 인스턴스(실체)
  • 속성(Attribute): 객체의 상태나 특성을 나타내는 변수
  • 메서드(Method): 객체가 수행할 수 있는 행동(함수)

2. 파이썬에서의 클래스와 객체

2.1 클래스 정의하기

파이썬에서 클래스는 class 키워드를 사용하여 정의합니다.

class 클래스이름:
    # 클래스 내용(속성과 메서드)

간단한 예시:

class Dog:
    # 클래스 변수 (모든 인스턴스가 공유)
    species = "Canis familiaris"
    
    # 초기화 메서드 (__init__): 객체가 생성될 때 자동으로 호출
    def __init__(self, name, age):
        # 인스턴스 변수 (각 객체마다 고유)
        self.name = name
        self.age = age
    
    # 인스턴스 메서드
    def bark(self):
        return f"{self.name}가 짖습니다: 멍멍!"
    
    # 인스턴스 메서드
    def get_info(self):
        return f"{self.name}는 {self.age}살입니다."

2.2 객체(인스턴스) 생성하기

클래스를 정의한 후에는 해당 클래스의 인스턴스(객체)를 생성할 수 있습니다.

# Dog 클래스의 인스턴스 생성
my_dog = Dog("멍멍이", 3)
your_dog = Dog("바둑이", 5)

# 인스턴스 메서드 호출
print(my_dog.bark())       # 출력: 멍멍이가 짖습니다: 멍멍!
print(your_dog.get_info()) # 출력: 바둑이는 5살입니다.

# 인스턴스 변수 접근
print(my_dog.name)         # 출력: 멍멍이
print(your_dog.age)        # 출력: 5

# 클래스 변수 접근
print(my_dog.species)      # 출력: Canis familiaris
print(Dog.species)         # 출력: Canis familiaris (클래스를 통해 직접 접근)

2.3 self 매개변수

파이썬 클래스의 메서드에서 첫 번째 매개변수는 관례적으로 self라고 명명하며, 이는 메서드를 호출한 인스턴스 자신을 가리킵니다. 이를 통해 인스턴스의 속성과 메서드에 접근할 수 있습니다.

class Person:
    def __init__(self, name):
        self.name = name    # self를 통해 인스턴스 변수 설정
    
    def say_hello(self):
        # self를 통해 인스턴스 변수 접근
        return f"안녕하세요, 제 이름은 {self.name}입니다."