실버를 위한 코딩/파이썬

객체 지향 프로그램의 핵심, 클래스(class)

forSilver 2024. 12. 4. 04:06
반응형

객체 지향 프로그램의 핵심, 클래스(class)

파이썬에서 클래스(class)는 객체 지향 프로그래밍(OOP, Object-Oriented Programming)의 핵심 개념입니다. 클래스는 데이터와 해당 데이터를 처리하는 메서드를 한 곳에 묶어 객체(object)를 정의하는 데 사용됩니다.


1. 클래스 기본 구조

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

    def 메서드(self):
        # 동작 정의
        pass

주요 키워드

  1. class: 클래스를 정의하는 키워드.
  2. __init__: 클래스의 생성자(Constructor)로, 객체를 생성할 때 초기화하는 메서드.
  3. self: 인스턴스 자기 자신을 가리키는 매개변수로, 클래스 내 메서드의 첫 번째 매개변수로 사용.

2. 클래스와 객체

예제

class Person:
    def __init__(self, name, age):
        self.name = name  # 이름 속성
        self.age = age    # 나이 속성

    def greet(self):
        print(f"안녕하세요, 저는 {self.name}이고, {self.age}살입니다.")

# 객체 생성
person1 = Person("홍길동", 30)
person2 = Person("김영희", 25)

# 메서드 호출
person1.greet()  # 안녕하세요, 저는 홍길동이고, 30살입니다.
person2.greet()  # 안녕하세요, 저는 김영희이고, 25살입니다.


3. 클래스의 주요 특징

(1) 속성

  • 객체에 저장되는 데이터.
  • 클래스 내부의 __init__ 메서드를 통해 정의.
  • 속성은 self.속성이름 형식으로 접근.

(2) 메서드

  • 객체가 실행할 수 있는 함수.
  • self를 첫 번째 매개변수로 가져야 함.

(3) 상속

  • 클래스의 재사용성을 높이기 위해 다른 클래스를 기반으로 새로운 클래스를 정의.
class Animal:
    def __init__(self, species):
        self.species = species

    def sound(self):
        print("소리를 냅니다.")

class Dog(Animal):  # Animal 클래스를 상속받음
    def __init__(self, name):
        super().__init__("강아지")  # 부모 클래스의 생성자 호출
        self.name = name

    def sound(self):
        print("멍멍!")

dog = Dog("바둑이")
dog.sound()  # 멍멍!

(4) 캡슐화

  • 객체의 속성을 외부에서 직접 접근하지 못하게 보호하는 개념.
  • 변수명을 _변수명 또는 __변수명으로 작성.
class BankAccount:
    def __init__(self, balance):
        self.__balance = balance  # 비공개 속성

    def deposit(self, amount):
        self.__balance += amount

    def get_balance(self):
        return self.__balance

account = BankAccount(1000)
account.deposit(500)
print(account.get_balance())  # 1500
# print(account.__balance)  # 에러: AttributeError 발생

4. 실습 과제

다음의 요구사항에 맞는 클래스를 작성해 보세요.

  1. 요구사항
    • Car 클래스를 작성하세요.
    • 이 클래스는 차량의 브랜드, 모델명, 연식을 속성으로 가집니다.
    • drive() 메서드를 호출하면 "브랜드의 모델명이 주행 중입니다."라는 메시지를 출력합니다.
  2. 예상 결과


5. 형성 평가

  1. 클래스와 객체의 차이를 간략히 설명하세요.
  2. 클래스의 __init__ 메서드의 역할은 무엇인가요?
  3. 상속이란 무엇이며, 파이썬에서 어떻게 구현하나요?

형성 평가 답변

1. 클래스와 객체의 차이

  • 클래스: 객체를 만들기 위한 설계도입니다. 속성과 메서드를 정의하며, 이를 기반으로 객체를 생성합니다.
  • 객체: 클래스를 이용해 만들어진 실체로, 실제 데이터와 메서드를 포함하여 동작합니다. 클래스는 추상적이고, 객체는 구체적입니다.
    • 예: Dog라는 클래스는 개를 설명하는 설계도이고, my_dog = Dog()는 실제 개를 나타내는 객체입니다.

2. 클래스의 __init__ 메서드의 역할

  • 역할: 클래스의 생성자(Constructor)로, 객체가 생성될 때 자동으로 호출되어 초기화를 담당합니다.
  • 기능: 객체의 속성(필드)을 정의하고 초기 값을 설정합니다.
  • 예제:
    class Person:
        def __init__(self, name, age):
            self.name = name  # 이름 속성 초기화
            self.age = age    # 나이 속성 초기화

3. 상속이란 무엇이며, 파이썬에서 어떻게 구현하나요?

  • 상속(Inheritance):
    • 기존 클래스(부모 클래스, Superclass)의 속성과 메서드를 물려받아 새로운 클래스(자식 클래스, Subclass)를 정의하는 방법입니다.
    • 코드 재사용유지보수를 용이하게 합니다.
  • 파이썬에서 구현:
    • 자식 클래스는 부모 클래스를 괄호 안에 명시하여 정의합니다.
    • 예:
    • class Animal: def sound(self): print("소리를 냅니다.") class Dog(Animal): # Animal 클래스를 상속받음 def sound(self): # 메서드 오버라이딩 print("멍멍!") dog = Dog() dog.sound() # 출력: 멍멍!
  • 키워드: super()를 사용하면 부모 클래스의 메서드를 호출할 수 있습니다.