본문 바로가기
판다스/기초 파이썬

[python] 7.1. 클래스 - 클래스와 객체

by 김판다t 2024. 11. 15.

데이터 분석 입문을 위한 기초적인 파이썬 내용을 다룹니다. 데이터 분석은 주로 파이썬의 라이브러리인 판다스를 활용해 이루어지며, 이를 위해 기본적인 파이썬 개념에 대한 이해가 필요합니다. 하지만 이것은 파이썬을 완벽하게 숙달해야 한다는 의미는 아닙니다. 그렇기에 판다스와 데이터 분석에 입문할 수 있도록 핵심 파이썬 개념을 간략하게 제공할 것입니다.

 

 

7. 클래스

클래스는 객체 지향 언어인 파이썬에서 중요한 역할을 합니다. 그러나 데이터 분석 입문자들은 클래스를 직접 생성하는 경우가 드물며, 대신 이미 정의된 클래스를 사용하여 데이터를 다루는 일이 많습니다. 따라서 클래스와 관련된 용어들이 어떤 의미로 사용되는지 개념적으로 이해하는 것이 더욱 중요합니다.

 

7.1. 클래스와 객체

클래스와 객체

클래스는 객체를 생성하는 설계도와 같은 역할을 합니다. 클래스를 기반으로 만들어진 개별적인 존재를 객체라 하며, 예를 들어 와플 기계가 클래스라면, 그 기계로 만들어진 와플은 객체라고 할 수 있습니다. 이처럼 클래스는 객체를 만들어내는 틀이고, 객체는 그 틀을 통해 만들어진 실제 존재입니다.

 

클래스의 정의와 객체의 생성 예시

 

이 예시는 MyWaffle 클래스를 정의하여 와플의 크기와 내용물을 설정할 수 있게 하며, 이를 통해 와플 객체를 생성하는 방법을 설명하고 있습니다.

 

# MyWaffle 클래스의 정의
class MyWaffle:
    # 생성자: 와플의 크기와 내용물을 초기화합니다.
    def __init__(self, size, fill):
        self.size = size  # 와플의 크기 (예: 'small', 'medium', 'large')
        self.fill = fill  # 내용물 (예: '초코', '딸기')

# MyWaffle 객체 생성
waffle1 = MyWaffle('small', '초코')  # 'small' 크기의 '초코' 와플 생성

 

1. 클래스 정의

클래스는 class 키워드를 사용해 정의하며, 보통 낙타 표기법(CamelCase)을 사용하여 대문자로 시작합니다.

 

class MyWaffle:
 

2. 생성자 메서드 __init__

MyWaffle 클래스는 와플의 크기와 내용물을 속성으로 가지며, 이를 초기화할 수 있도록 생성자를 포함하고 있습니다.

 

    def __init__(self, size, fill):
        self.size = size  # 와플의 크기 (예: 'small', 'medium', 'large')
        self.fill = fill  # 내용물 (예: '초코', '딸기')

 

__init__ 메서드는 클래스의 생성자로, 새로운 MyWaffle 객체가 생성될 때 자동으로 호출됩니다. size와 fill 매개변수를 받아 self.size와 self.fill 속성에 값을 할당합니다.

 

3. 객체 생성

MyWaffle 클래스를 사용하여, 크기와 내용물을 지정한 객체를 생성할 수 있습니다.

 

waffle1 = MyWaffle('small', '초코')  # 'small' 크기의 '초코' 와플 생성
 

이 예시에서는 waffle1이라는 객체를 생성했으며, 이 객체는 크기가 'small'이고 내용물이 '초코'입니다. 이를 통해 각 와플 객체가 고유의 속성을 가지도록 할 수 있습니다.

 

클래스라는 용어의 의미

 

데이터 분석 입문자가 직접 클래스를 만들어 객체를 생성하는 경우는 드뭅니다. 그러나 데이터 분석 라이브러리에는 다양한 클래스가 포함되어 있어, 이를 효과적으로 사용하기 위해 용어 학습이 필요합니다. 따라서 입문자들은 클래스와 객체를 실제로 생성하기보다는 용어를 통해 사용된 개념을 정확히 이해하는 것이 중요합니다. 

클래스는 객체를 생성하기 위한 틀을 의미하지만, 실제로는 객체들을 통칭해서 클래스라고 지칭하는 경우도 많습니다. 오히려 이러한 방식으로 사용되는 경우가 더 흔하며, 이는 언어가 때로 엄밀하지 않게 사용되는 특성 때문입니다. 이런 의미로 사용될 때는 클래스를 자료형으로 치환해 생각하면 이해하기 편합니다. 사실 파이썬에서 리스트, 문자열, 딕셔너리, 튜플 등의 자료형은 모두 파이썬 내장 클래스에 해당합니다. 따라서 "리스트 클래스는 복수의 데이터를 보유한다."라는 표현은 "리스트 자료형은 복수의 데이터를 보유한다."로 이해할 수 있습니다. 여기에서 클래스는 객체를 통칭하는 의미로 사용된 것입니다. 

 

생성된 객체를 통칭하는 의미가 아닌, 실제 객체를 만드는 틀로서 클래스를 지칭할 때도 있습니다. 이 경우, 함수로 치환해 생각해도 큰 무리가 없습니다. 엄밀히 말하면 클래스는 함수와 다르지만, 클래스 역시 생성 과정에서 함수처럼 작동하기에, 판다스 입문 단계에서는 둘을 엄격하게 구분하지 않아도 됩니다. 예를 들어 "pd.DataFrame 클래스로 데이터 프레임을 생성한다."라는 표현은 "pd.DataFrame 함수로 데이터 프레임을 생성한다."라고 이해해도 무방합니다. 일반적으로 클래스는 대문자로 시작하는 카멜 표기법(CamelCase)을 사용하므로, 생성 틀로서의 클래스임을 쉽게 구분할 수 있습니다. 

 

"pd.DataFrame 클래스로 데이터 프레임 클래스를 생성한다."라는 표현은 두 가지 의미의 클래스가 모두 사용된 예입니다. 여기서 카멜 표기법이 사용된 pd.DataFrame 부분은 함수로 치환하고, 나머지는 자료형으로 치환하여 "pd.DataFrame 함수로 데이터 프레임 자료형을 생성한다."라고 이해하시면 됩니다. 이렇게 이해하면, 입문자도 용어로 사용된 클래스의 의미를 정확히 파악할 수 있습니다.

 

객체라는 용어의 의미

 

객체는 실제로 생성된 각 클래스의 개별적인 존재를 의미합니다. 예를 들어, 리스트를 생성하면 그 리스트는 하나의 객체로 간주합니다. 객체는 대상으로 이해해도 좋습니다. 예를 들어, "객체에 len 함수를 적용하면 문자열의 길이 혹은 원소의 개수를 반환한다."는 표현은 "대상에 len 함수를 적용하면 문자열의 길이 혹은 원소의 개수를 반환한다."로 이해할 수 있습니다.

특히 클래스 명칭이 포함된 객체는 해당 자료형인 대상으로 치환해 이해할 수 있습니다. 예를 들어, "리스트 객체에 len 함수를 적용하면 원소의 개수를 반환한다."는 표현은 "리스트 자료형인 대상에 len 함수를 적용하면 원소의 개수를 반환한다."로 이해할 수 있습니다. 이렇게 대상을 치환해 생각하면 입문자도 객체의 의미를 더욱 쉽게 파악할 수 있습니다.

 

또한 생성된 객체를 의미하는 인스턴스(instance)라는 표현을 사용하기도 하는데, 인스턴스는 객체와 동일하게 해석해도 큰 무리가 없습니다.

데이터 분석 입문자들에게는 클래스와 객체를 실제로 생성하기보다는, 용어를 통해 사용된 개념을 정확히 이해하는 것이 더 중요합니다. 위의 방법을 통해 보다 정확하게 이해하기를 바랍니다.