파이썬 클래스 선언 및 상속 구조 정리

파이썬 클래스 및 인스턴스 변수 이해하기

파이썬에서 클래스는 객체를 생성하기 위한 틀로 정의되며, 이를 통해 프로그래밍의 효율성을 높일 수 있습니다. 객체지향 프로그래밍(OOP)의 특성을 살려 여러 객체를 생성하고 관리하는 데 유용한 도구가 됩니다. 이번 글에서는 클래스와 인스턴스 변수를 중심으로 파이썬 클래스의 기본적인 구조를 살펴보겠습니다.

클래스 변수와 인스턴스 변수의 차이

클래스를 정의할 때, 두 가지 종류의 변수가 존재합니다. 바로 인스턴스 변수와 클래스 변수입니다.

  • 클래스 변수: 클래스 내에서 정의되며, 해당 클래스의 모든 인스턴스가 공유하는 변수입니다. 이러한 변수는 클래스에 속하므로, 모든 인스턴스가 동일한 값을 가집니다.
  • 인스턴스 변수: 특정 인스턴스에 종속된 변수로, 각 인스턴스마다 고유한 값을 가집니다. 인스턴스가 생성될 때 초기화되며, 다른 인스턴스와는 독립적인 값을 가집니다.

예를 들어, 직원 정보를 관리하는 클래스를 만든다면, 각 직원의 급여는 인스턴스 변수가 될 것이고, 최저 급여와 같은 기준 값은 클래스 변수가 될 수 있습니다.

클래스 변수 사용 예제

다음 코드를 살펴봅시다:

class Employee:
  raise_amount = 1.04 # 클래스 변수
  def __init__(self, first, last, pay):
    self.first = first # 인스턴스 변수
    self.last = last  # 인스턴스 변수
    self.email = f"{first}.{last}@email.com" # 인스턴스 변수
    self.pay = pay   # 인스턴스 변수
  def apply_raise(self):
    self.pay = int(self.pay * self.raise_amount) # 클래스 변수 사용

이 예제에서 raise_amount는 클래스 변수로서 모든 인스턴스에 대해 공유됩니다. 인스턴스 변수인 first, last, pay는 각 인스턴스마다 다르게 설정됩니다. apply_raise 메서드에서 클래스 변수를 활용하여 급여 인상률을 적용하는 것을 보여줍니다.

클래스 변수 접근 방법

클래스 변수를 접근할 때는 클래스 이름을 이용하는 것이 일반적입니다. 다음과 같이 접근할 수 있습니다:

emp1 = Employee('Brian', 'Ryu', 500000)
print(emp1.raise_amount) # 클래스 변수를 인스턴스를 통해 접근
print(Employee.raise_amount) # 클래스 이름을 통해 접근

이처럼 클래스 변수는 클래스의 모든 인스턴스에서 사용할 수 있으며, 클래스 이름을 통해 쉽게 접근할 수 있습니다.

클래스의 상속 개념

클래스 상속은 객체지향 프로그래밍의 또 다른 중요한 특징으로, 기존의 클래스를 기반으로 새로운 클래스를 만들 수 있는 기능입니다. 상속을 통해 코드의 재사용성을 높이고, 유지보수를 용이하게 할 수 있습니다.

상속 구현 예제

아래는 학생 정보를 관리하는 기본 클래스 Student를 상속하여 가족 정보를 추가하는 StudentFamily 클래스를 정의한 예제입니다:

class Student:
  def __init__(self, name, gender, grade):
    self.name = name
    self.gender = gender
    self.grade = grade
class StudentFamily(Student): # Student 클래스를 상속
  def __init__(self, name, gender, grade, mother_name, father_name):
    super().__init__(name, gender, grade) # 부모 클래스 생성자 호출
    self.mother_name = mother_name
    self.father_name = father_name
  def family_info(self):
    return f"{self.name}의 엄마는 {self.mother_name}, 아빠는 {self.father_name}입니다."

이 코드에서 StudentFamily 클래스는 Student 클래스를 상속받아 추가적인 정보를 저장하고, 가족 정보를 출력하는 메서드를 포함하고 있습니다. 상속을 통해 재사용성이 증가하게 됩니다.

오버라이딩 및 메서드 사용

상속을 통해 부모 클래스의 메서드를 자식 클래스에서 수정할 수 있는 기능인 오버라이딩을 활용할 수 있습니다. 다음과 같은 방식으로 부모 클래스의 메서드를 변경할 수 있습니다:

class Student:
  def info(self):
    return f"{self.name} 학생의 정보입니다."
class StudentFamily(Student):
  def info(self): # 오버라이딩
    return f"{self.name} 학생의 가족 정보입니다: 엄마는 {self.mother_name}, 아빠는 {self.father_name}입니다."

이 예제에서는 info 메서드를 오버라이딩하여 자식 클래스에서 새로운 기능을 추가합니다. 이렇게 함으로써 부모 클래스의 메서드를 보다 특화된 형태로 사용할 수 있습니다.

클래스와 인스턴스의 활용

클래스를 사용하여 객체를 생성하는 과정은 매우 간단합니다. 인스턴스를 만들고 나면 그 객체의 속성과 메서드를 통해 다양한 작업을 수행할 수 있습니다:

student = StudentFamily("코데방", "남", 2, "코엄마", "코아빠")
print(student.info())

위의 코드에서는 StudentFamily 클래스의 인스턴스를 생성한 후, info 메서드를 호출하여 가족 정보를 출력합니다.

결론

파이썬 클래스와 인스턴스 변수, 그리고 상속에 대한 이해는 객체지향 프로그래밍의 기초를 다지는데 매우 중요합니다. 클래스를 효과적으로 활용하여 프로그램의 구조를 깔끔하게 만들고, 코드의 재사용성을 높일 수 있는 방법을 배우는 것이 필요합니다. 이를 통해 복잡한 프로젝트에서도 효율적으로 작업할 수 있습니다.

자주 찾으시는 질문 FAQ

파이썬 클래스란 무엇인가요?

파이썬 클래스는 객체를 생성하기 위한 구조체로, 특정 데이터를 다루거나 기능을 포함하는 데 사용됩니다.

클래스 변수와 인스턴스 변수의 차이는 무엇인가요?

클래스 변수는 클래스의 모든 객체가 공유하는 변수인 반면, 인스턴스 변수는 각 객체마다 독립적인 값을 갖습니다.

상속이란 뭐죠?

상속은 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받는 개념으로, 코드 재사용성을 높이는 데 도움을 줍니다.

클래스 메서드를 어떻게 사용하는 건가요?

메서드는 클래스 내부에 정의되며, 인스턴스를 통해 호출하거나 클래스 이름으로 직접 사용할 수 있습니다.

인스턴스를 생성하는 방법은 무엇인가요?

인스턴스는 클래스를 호출하여 생성하며, 필요한 인자를 전달하여 객체를 초기화하는 방식으로 팬이 가능합니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤