파이썬 기초 – 18장. 파이썬 클래스

안녕하세요!
오늘은 파이썬의 핵심 개념 중 하나인 ‘클래스’에 대해 이야기해 보려고 합니다. 클래스에 대해 이해하려면 객체 지향에 대한 이해가 필요하며, 다소 어려운 내용이 포함되어 있어 가장 마지막에 포스팅하게 되었습니다. 어렵지만 반드시 알아고 넘어가야 하는 부분이니, 전부 이해가 되지 않더라도 개념위주로 이해하고 자주 사용해 보시기 바랍니다. 결국 자주 사용하다보면 익숙해 지니까요!

파이썬은 객체 지향 프로그래밍을 지원하는 언어로, 클래스를 통해 코드를 조직화하고 모듈화 할 수 있는 강력한 도구를 제공합니다. 그럼 클래스가 무엇인지, 어떻게 사용하는지 지금부터 알아 보도록 하겠습니다!

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

클래스는 객체 지향 프로그래밍의 기본적인 개념입니다. 클래스는 데이터와 해당 데이터를 조작하는 메서드의 집합입니다. 이러한 클래스를 통해 우리는 현실 세계의 객체와 유사한 구조를 만들 수 있습니다. 클래스는 객체를 생성하기 위한 템플릿이라고 할 수 있으며, 해당 객체는 이러한 클래스의 인스턴스입니다. 무슨 말인지…이해가 안가시죠!? 😢

아래의 예시코드를 보도록 하겠습니다. (글보단 결국 실제 코드를 보는 것이 이해가 빠릅니다!)

# 클래스 정의
class Dog:
    # 초기화 메서드 (생성자)
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed

    # 메서드 정의
    def bark(self):
        return f"{self.name}가 멍멍 짖습니다!"

# 클래스의 인스턴스 생성
my_dog = Dog("루디", "골든 리트리버")

# 인스턴스 속성에 접근
print(f"{my_dog.name}{my_dog.breed} 종이에요.") # 출력: 루디는 골든 리트리버 종이에요.

# 메서드 호출
bark_result = my_dog.bark()
print(bark_result) # 출력: 루디가 멍멍 짖습니다!

우리가 ‘Dog’라는 개를 표현하는 코드를 작성한다고 생각해 봅시다. 개는 이름(name)과 종(breed)이라는 속성이 있고, 짖을 수 있는 행위(bark)를 할 수 있습니다. 이를 클래스로 표현하면 위와 같이 표현됩니다.

우선 클래스를 정의 할때 class라는 키워드를 사용합니다. 클래스의 이름은 대/소문자가 모두 가능하나, 대문자로 시작하는 것이 관례 입니다. 클래스 안에서는 속성과 메서드를 정의할 수 있습니다. 속성은 클래스의 변수고, 메소드는 클래스의 함수라고 이해하면 이해하기 쉽습니다. 이러한 클래스는 객체를 생성하기 위한 설계도이기 때문에, 한 번 정의된 클래스를 통해 여러 개의 객체를 생성할 수 있습니다.

클래스 생성 시 가장 먼저 정의되는 것은 초기화 메서드 입니다. __init__이란 명령어를 사용합니다.(참고로 언더바가 2개 입니다.) 그리고 괄호안에 생성자가 들어가는데 특이한 것은 무조건 self가 첫번째 인수로 들어간다는 것입니다. 이것은 클래스가 인스턴스화 될 때 가장 먼저 자신이 전달되기 때문입니다.

위의 예시를 보면 my_dog라는 변수에 Dog라는 클래스를 인스턴스화 하여 객체로 저장 하였으며, 이때 “루디”, “골든 리트리버”라는 생성자(constructor)가 사용 되었습니다.

2. 클래스가 왜 필요 할까?

위에 코드를 보다 보면 문득 클래스를 활용해서 왜 어럽게 코딩을 해야하지?라는 의문이 생기신 분들도 계실 겁니다. 위에 코드를 클래스를 사용하지 않는 함수형으로도 표현할 수 있으니까요. 아래의 예시를 보도록 하겠습니다.

# 개체(강아지)의 속성을 포함하는 함수 정의
def create_dog(name, breed):
    dog = {
        "name": name,
        "breed": breed
    }
    return dog

# 개체(강아지)의 동작(짖기)을 포함하는 함수 정의
def bark(dog):
    return f"{dog['name']}가 멍멍 짖습니다!"

# 개체(강아지) 생성
my_dog = create_dog("루디", "골든 리트리버")

# 속성 접근
print(f"{my_dog['name']}{my_dog['breed']} 종이에요.") # 출력: 루디는 골든 리트리버 종이에요.

# 동작(메서드) 호출
bark_result = bark(my_dog)
print(bark_result) # 출력: 루디가 멍멍 짖습니다!

위에 코드는 함수를 이용하여 동일한 기능으로 동작하도록 작성한 코드 입니다. 이처럼 클래스를 사용하지 않고도 코딩이 가능합니다. 그러나 클래스를 사용할 때 아래와 같은 장점이 있습니다. 내용이 다소 어려울 수 있으니 대략적으로만 이해하셔도 무방합니다. 자세한 내용은 추후 객체지향 프로그래밍(OOP)에 대해 별도로 포스팅 하도록 하겠습니다.

  1. 코드 구조화: 클래스를 사용하면 관련된 데이터와 메서드를 하나로 묶을 수 있습니다. 이로써 코드의 구조가 더 명확하고 직관적이며, 유지보수와 디버깅이 용이해집니다.
  2. 재사용성: 클래스를 정의하고 인스턴스를 생성하면 해당 클래스의 인스턴스를 여러 개 만들 수 있습니다. 이렇게 생성된 인스턴스는 클래스에 정의된 메서드와 속성을 공유하며, 동일한 동작을 여러 개의 객체에서 재사용할 수 있습니다.
  3. 상속과 다형성: 클래스를 사용하면 상속을 통해 새로운 클래스를 만들고 기존 클래스의 속성과 메서드를 확장할 수 있습니다. 이로써 코드 재사용성을 높이고 계층적인 구조를 구현할 수 있습니다. 다형성 또한 클래스를 통해 다양한 객체 유형을 다룰 수 있는 기능을 제공합니다.
  4. 캡슐화: 클래스는 데이터와 데이터를 처리하는 메서드를 함께 캡슐화하므로, 데이터에 대한 접근을 제어할 수 있습니다. 이를 통해 데이터 무결성을 유지하고 외부에서의 부적절한 접근을 방지할 수 있습니다.
  5. 객체 지향 프로그래밍 지원: 클래스는 객체 지향 프로그래밍(OOP)의 핵심 요소이며, OOP의 개념을 파악하고 활용할 때 유용합니다. 객체, 클래스, 상속 등의 개념은 실제 세계의 모델링에 유용하며, 큰 프로젝트에서도 효과적으로 작업할 수 있도록 도와줍니다.

3. 마치며

사실 클래스에 대해 이야기할 부분이 너무 많습니다. 다만 초보자 단계에서 이런것을 다 공부하고 넘어가야 하는지는 사실 잘 모르겠습니다. 클래스를 모르고 함수를 잘 이용해서도 프로그램들을 잘 짤 수 있으며, 프로젝트 규모가 커지고 반복 되는 코드가 많아지면 자연스럽게 클래스에 대해 공부를 하게 될 테니까요.

지금단계에서 너무 많은 시간과 깊숙한 공부로 파이썬에 대해 흥미가 없어지는 것보단, 이정도 수준으로 어떤 것이 있다. 정도만 이해하고 넘어가는 것도 나쁘지 않다고 생각합니다. 물론 더 공부 하고 싶으신 분이 있다면, 개인적으로 더 공부를 해야겠지요!

이번 글을 마지막으로 파이썬 기초에 대한 설명은 끝내도록 하겠습니다. 다음포스팅 부터는 지난번에 잠깐 언급되었던 핵심 모듈들 (Numpy, Pandas 등)에 대해서 포스팅 예정입니다.

여기까지 공부하신 모든 분들 모두 고생해셧습니다!
감사합니다. “끝”

Leave a Comment