[파이썬] 내부 클래스(inner class) 란

내부 클래스(Inner Class)

  • 내부 클래스는 클래스 내부에 정의된 클래스를 의미
  • 특정 클래스에만 사용되는 보조 클래스를 만들 때 사용된다
  • 해당 클래스의 구성 요소로 취급되며, 주로 네임스페이스 관리를 위해 사용된다

네임스페이스(namespace) - 변수나 함수 등이 유효한 범위(scope)를 가지는 공간을 의미 - 변수나 함수의 이름 충돌을 방지하고, 코드를 구성하고 유지보수하는 데 도움이 된다 - 종류 - 전역 네임스페이스(Global Namespace) - 전역적으로 선언된 변수나 함수들이 존재하는 공간 - 스크립트 전체에서 접근 가능 - 지역 네임스페이스(Local Namespace) - 함수 내부에서 선언된 변수나 함수들이 존재하는 공간 - 해당 함수 내에서만 접근 가능 - 내장 네임스페이스(Built-in Namespace) - 파이썬에서 기본적으로 제공하는 내장 함수나 예약어들이 존재하는 공간 - e.g. print(), len(), sum()

예시

  • User 클래스는 사용자를 나타내는 데이터베이스 모델 클래스
  • 이 클래스 내부에는 UserManager 라는 내부 클래스가 정의되어 있다
  • UserManager 클래스는 사용자 관리에 필요한 유틸리티 함수들을 정의한다
  • 이렇게 함으로써, 데이터베이스 모델 클래스 내에서 관련된 유틸리티 함수나 데이터 구조를 쉽게 정의하고 사용할 수 있다
class User:
    def __init__(self, username, email):
        self.username = username
        self.email = email

    # 내부 클래스로 유틸리티 클래스 정의
    class UserManager:
        def __init__(self):
            self.users = []

        def add_user(self, user):
            self.users.append(user)
            print(f"User '{user.username}' added successfully.")

        def get_all_users(self):
            return self.users

# 데이터베이스 모델 클래스의 인스턴스 생성
user_model = User("JohnDoe", "john@example.com")

# 유틸리티 클래스의 인스턴스 생성
user_manager = user_model.UserManager()

# 유틸리티 클래스를 사용하여 사용자 추가
user_manager.add_user(user_model)

# 유틸리티 클래스를 사용하여 모든 사용자 가져오기
all_users = user_manager.get_all_users()
print("All users:", all_users)

links

social