본문 바로가기
프로그래밍/파이썬 Python

[파이썬 문법] 6. 클래스(class) 기초개념[클래스의 일생] - 질문으로 공부하기

by it-수다쟁이증후군 2023. 4. 9.

오늘. ssam)
여기까지 왔네요. 모든 프로그래밍의 꽃이자, 포기의 분기점 바로 클래스 입니다. 시작해 봅시다!!! 화이팅

Q1. 나)
파이썬에서 클래스와 객체지향 프로그래밍에 대해서 설명해 주세요.

"6-클래스 기초 개념정리" 문장을 타이포그라피로 만든 썸네일
포기 금지!!!

A1.ssam)
파이썬객체지향 프로그래밍을 지원하는 언어로서, 클래스와 객체를 기본적인 구성 요소로 사용합니다.

객체지향 프로그래밍은 코드의 1)재사용성과 2)유지보수성을 향상시키는 등의 이점이 있습니다.

1.클래스 정의하기

파이썬에서 클래스를 정의할 때에는 class 키워드를 사용합니다. 클래스는 1)데이터와 2)해당 데이터를 조작하는 메서드(함수)를 묶어서 사용합니다. 다음은 클래스를 정의하는 예시입니다.

class Dog:
    # 속성(인스턴스 변수)
    breed = ""
    color = ""
    age = 0
    
    # 메서드(인스턴스 메서드)
    def bark(self):
        print("멍멍!")
  • 위 코드에서 Dog 클래스는
  • 속성 breed, color, age
  • 메서드 bark()를 가지고 있습니다.
  • 속성은 클래스 변수(클래스에 속한 변수)로,
  • breed, color, age의 초기값을 정의할 수 있습니다.
  • 메서드는 클래스 내에서 동작하는 함수로,
  • bark() 메서드는 "멍멍!"이라는 문자열을 출력합니다.

2.객체 생성하기

  1. 클래스는 객체를 생성해서 사용합니다.
  2. 객체는 클래스의 인스턴스(실체)로,
  3. 클래스를 이용하여 생성할 수 있습니다.
  4. 객체는 독립적으로 메모리에 할당되며,
  5. 각 객체는 서로 다른 상태를 가질 수 있습니다.

다음은 Dog 클래스를 이용하여 객체를 생성하는 예시입니다.

my_dog = Dog()
  • 위 코드에서 my_dog 객체는 / Dog 클래스의 / 인스턴스(실체)입니다.
  • my_dog 객체는
  • 독립적으로 메모리에 할당되며,
  • Dog 클래스의 속성과 메서드를 사용할 수 있습니다.

3-1.객체 사용법 - 속성값

  1. 객체의 속성에 접근할 때에는
  2. .(점) 연산자를 사용합니다.
  3. 객체의 속성은 객체마다 독립적으로 저장되며,
  4. 객체마다 다른 값을 가질 수 있습니다.

다음은 my_dog 객체의 속성에 접근하는 예시입니다.

my_dog.breed = "푸들"
my_dog.color = "검정색"
my_dog.age = 3
  • 위 코드에서
  • my_dog 객체의
  • breed, color, age 속성에 각각
  • "푸들", "검정색", 3을 할당합니다.

3-2.객체 사용법 - 메서드 호출하기

  1. 객체의 메서드를 호출할 때에는
  2. .(점) 연산자를 사용합니다.
  3. 메서드는 객체마다 다른 동작을 하므로,
  4. 객체마다 다른 결과를 반환할 수 있습니다.

다음은 my_dog 객체의 bark 메서드를 호출하는 예시입니다.

my_dog.bark()
  • 위 코드에서 my_dog 객체의
  • bark 메서드를 호출하여
  • "멍멍!"이라는 문자열이 출력됩니다.

4.생성자와 소멸자

파이썬 클래스에서 생성자와 소멸자는 객체의 생성과 삭제를 관리하는 역할을 합니다. 이들은 클래스의 인스턴스가 만들어지거나 사라질 때 자동으로 호출되는 특별한 메소드입니다.

class MyClass:
    def __init__(self, value):
        self.value = value  # 인스턴스 변수 초기화
  1. 생성자 (__init__ 메서드):
  2. 객체가 생성될 때 초기화 작업을 수행합니다.
  3. 생성자는 클래스의 인스턴스를 생성할 때 호출되며,
  4. 인스턴스 변수를 초기화하거나
  5. 객체 생성에 필요한 작업을 수행하는 데 사용됩니다.
  6. 생성자가 없는 경우, 파이썬은 기본 생성자를 제공합니다.
  7. 그러나 대부분의 경우 사용자 정의 생성자를 작성하여 특정 작업을 수행하게 할 필요가 있습니다.
class MyClass:
    def __del__(self):
        print("MyClass 인스턴스가 소멸되었습니다.")
  1. 소멸자 (__del__ 메서드):
  2. 객체가 소멸될 때 실행되는 메서드입니다.
  3. 소멸자는 객체의 수명이 끝나고 메모리에서 삭제되기 전에 실행되며,
  4. 리소스 해제 또는 정리 작업을 수행하는 데 사용됩니다.
  5. 파이썬의 가비지 컬렉터는 대부분의 경우 리소스를 자동으로 해제하므로
  6. 소멸자를 명시적으로 작성할 필요는 드물지만,
  7. 사용자 정의 소멸자를 작성하여
  8. 특정 작업을 수행하게 할 필요가 있을 수도 있습니다.

생성자와 소멸자는 파이썬 클래스에서 객체의 생성 및 삭제를 관리하기 위한 중요한 메서드입니다. 이를 통해 객체 생성 시 초기화 작업을 수행하고, 객체 소멸 시 필요한 정리 작업을 할 수 있습니다.

다음은 Dog 클래스의 생성자와 소멸자 예시입니다.

class Dog:
    def __init__(self, breed, color, age):
        self.breed = breed
        self.color = color
        self.age = age
    
    def bark(self):
        print("멍멍!")
    
    def __del__(self):
        print("객체가 소멸되었습니다.")
  • 위 코드에서 Dog 클래스의
  • 생성자(__init__)는
  • breed, color, age 매개변수를 받아서 객체를 초기화합니다.
  • 소멸자(__del__)는
  • 객체가 소멸될 때 "객체가 소멸되었습니다."라는 문자열을 출력합니다.

5.상속

  1. 파이썬에서는 클래스간 상속을 지원합니다.
  2. 상속을 이용하면, 기존 클래스에서 정의된 속성과 메서드를
  3. 그대로 사용하면서 새로운 클래스를 정의할 수 있습니다.
  4. 상속을 받은 클래스는 상위 클래스의 속성과 메서드를 그대로 사용할 수 있으며,
  5. 추가적으로 새로운 속성과 메서드를 정의할 수도 있습니다.

다음은 Dog 클래스를 상속받는 Poodle 클래스 예시입니다.

class Poodle(Dog):
    def dance(self):
        print("춤을 춥니다.")
  • 위 코드에서 Poodle 클래스는
  • Dog 클래스를 상속받습니다. 따라서,
  • Dog 클래스에서 정의된 속성과 메서드를 그대로 사용할 수 있습니다.
  • 추가적으로 dance 메서드를 정의하여 "춤을 춥니다."라는 문자열을 출력합니다.

이와 같이 파이썬에서 클래스와 객체를 사용하는 방법을 살펴보았습니다.

Q2. 나)
많이 헷갈리기 시작하네요. 일단 정리 간단하게 정리하고 가면 안 될까요?

A2.ssam)
이해합니다. 클래는 알면 쉬운데 처음 접하면 머리가 많이 아픕니다. 일단 여기서 한번 정리하고 갈게요.

  1. 클래스: 데이터와 해당 데이터를 조작하는 메서드(함수)를 묶어서 사용하는 구조
  2. 클래스 정의하기: class 키워드를 사용하여 정의하며, 데이터는 속성(인스턴스 변수)으로, 메서드는 인스턴스 메서드로 정의
  3. 객체 생성하기: 클래스를 이용하여 객체를 생성하며, 객체는 클래스의 인스턴스(실체)로 독립적으로 메모리에 할당됨
  4. 객체 속성에 접근하기: .(점) 연산자를 사용하여 객체의 속성에 접근하며, 객체마다 독립적으로 저장되어 다른 값을 가질 수 있음
  5. 객체 메서드 호출하기: .(점) 연산자를 사용하여 객체의 메서드를 호출하며, 객체마다 다른 동작을 하므로 다른 결과를 반환할 수 있음
  6. 생성자와 소멸자: 객체가 생성될 때(__init__ 메서드)와 소멸될 때(__del__ 메서드) 실행되는 메서드가 있음
  7. 상속: 클래스간 상속을 지원하며, 기존 클래스에서 정의된 속성과 메서드를 그대로 사용하면서 새로운 클래스를 정의할 수 있음. 상속을 받은 클래스는 상위 클래스의 속성과 메서드를 그대로 사용할 수 있으며, 추가적으로 새로운 속성과 메서드를 정의할 수도 있음.

댓글