Recent Posts
Recent Comments
Archives
반응형
250x250
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today
Yesterday

Total
05-16 00:00
관리 메뉴

Hey Tech

[Python] 메서드(method)와 스태틱/클래스 메서드(static/class method)에 대해 알아보자! 본문

SW 개발/Python

[Python] 메서드(method)와 스태틱/클래스 메서드(static/class method)에 대해 알아보자!

Tony Park 2021. 4. 30. 15:33
728x90
반응형

지난 포스팅에서는 클래스, 객체, 속성, 생성 함수에 대한 의미와 파이썬에서 이들을 다루는 방법에 대해 알아보았습니다. 이번 포스팅에서는 클래스에서 메서드(method)스태틱/클래스 메서드(static/class method)에 대해 알아봅니다.

목차

1.  메서드(method)
    1.1.  메서드 정의
    1.2.  내장 클래스 및 메서드 활용 예시
    1.3.  메서드 종류
2.  인스턴스 메서드(instance method)
3.  스태틱/클래스 메서드(static/class method)

1.  메서드(method)

1.1.  메서드 정의

메서드(method)는 클래스의 객체에서 호출하여 속성에 대한 연산을 수행하는 역할을 하며, 멤버 함수(member function)라고도 부릅니다. 아래와 같이 "[객체 이름]. [method 이름]()"과 같은 구문으로 사용합니다.

1.2.  내장 클래스 및 메서드 활용 예시

파이썬 기본 데이터 타입 중 하나인 리스트(list) 클래스를 예를 들어보겠습니다. 'a'라는 이름의 리스트 객체를 생성하겠습니다.

a = list() # "a = []" 와 동일

아래와 같이 리스트에 원소를 추가하는 append() 함수와 원소를 정렬하는 sort() 메서드를 활용해 보았습니다.

a.append(777) # a 리스트에 777 추가
a.append(1) # a 리스트에 1 추가
print(a) # [777, 1]
a.sort() # 오름차순 정렬
print(a) # [1, 777]

1.3.  메서드 종류

메서드는 아래와 같이 2가지 종류가 있으며 각각에 대한 특징과 사용방법에 대해 알아보겠습니다.

 

(1) 인스턴스 메서드(instance method)

(2) 스태틱 메서드(static method) 또는 클래스 메서드(class method)

2.  인스턴스 메서드(instance method)

먼저 인스턴스 메서드(instance method)는 객체 레벨에서 호출하는 함수입니다. 따라서 해당 메서드를 호출한 객체에만 영향을 미칩니다. 예시를 통해 더욱 자세히 살펴보겠습니다. 아래와 같이 Calculate1 이라는 클래스에서 현재 객체의 속성 값인 num 을 1씩 증가하는 메서드(increse), 0으로 초기화하는 메서드(reset), 현재 값을 출력하는 메서드(print_value)를 정의하였습니다.

 

새롭게 메서드를 정의하는 방법은 일반적으로 def 구문을 활용해 함수를 정의할 때와 동일합니다. 생성자 함수 등에 대한 자세한 내용은 이전 포스팅을 참고해 주세요!

class Calulate1:
    def __init__(self):
        self.num = 0
    def increse(self):
        self.num +=1
    def reset(self):
        self.num = 0
    def print_value(self):
        print(f"The current value: {self.num}")

정의한 클래스의 새로운 객체 cal1_1, cal1_2 을 각각 생성하고 아래와 같이 메서드를 차례로 호출해 보겠습니다.

cal1_1 = Calulate1()
cal1_1.print_value()
cal1_1.increse()
cal1_1.increse()
cal1_1.print_value()
cal1_1.reset()
cal1_1.print_value()

print("=======")

cal1_2 = Calulate1()
cal1_2.print_value()
cal1_2.increse()
cal1_2.print_value()

출력 결과

출력 결과는 아래와 같습니다. 출력 결과에서 볼 수 있듯이, 인스턴스 메서드는 객체 생성 시에 초기화된 속성 값을 내부적으로 계속 저장하며 호출한 메서드에 따라 결괏값이 계속 변경되는 것을 확인할 수 있습니다. 특히 Calculate1 클래스에 해당하는 두 객체 속성 값은 각 객체별로 호출한 메서드에만 영향을 받기 때문에, 두 객체의 속성 값은 서로 독립적이라는 것을 확인할 수 있습니다.

The current value: 0
The current value: 2
The current value: 0

=======

The current value: 0
The current value: 1

3.  스태틱/클래스 메서드(static/class method)

인스턴스 메서드와 다르게, 스태틱 메서드는 클래스 레벨에서 호출하는 메서드로서 연산을 위한 속성 값이 필요 없다는 특징이 있습니다. 더불어, 객체를 따로 생성할 필요 없이 클래스 이름으로 바로 메서드를 호출할 수 있습니다. 따라서 내부적으로 속성 값을 유지할 필요가 없는 여러 메서드로 이루어진 클래스를 정의하고자 할 때 스태틱 메서드를 사용하면 효과적입니다.

 

예를 들어, 스태틱 메서드를 활용해 2가지 숫자의 사칙연산을 지원하는 클래스를 생성해 보겠습니다.  스태틱 메서드는 메서드 바로 윗줄에 @staticmethod라는 데코레이터(decorator)를 활용해 정의합니다.

class Calculate2:
    @staticmethod
    def add(x, y):
        print(f"x+y = {x+y}") 
    @staticmethod
    def sub(x, y):
        print(f"x-y = {x-y}") 
    @staticmethod
    def multiply(x, y):
        print(f"x*y = {x*y}") 
    @staticmethod
    def divide(x, y):
        if y != 0:
            print(f"x/y = {x/y}") 
        return None

아래와 같이 인스턴스 메서드와 달리 객체를 생성할 필요 없이 바로 클래스 이름으로, 클래스 레벨에서 메서드를 호출할 수 있습니다.

Calculate2.add(20, 10)
Calculate2.sub(20, 10)
Calculate2.multiply(20, 10)
Calculate2.divide(20, 10)

출력 결과

x+y = 30
x-y = 10
x*y = 200
x/y = 2.0

마치며...

이번 포스팅에서는 인스턴스 메서드와 스태틱/클래스 메서드에 대해 각각 알아봤습니다. 특히 파이썬에서 예시 구문을 통해 두 메서드 간의 차이에 대해 알아봤습니다. 다음 포스팅에서는 클래스의 상속에 대해 알아보도록 하겠습니다.

참고할만한 포스팅

1.  [Python] 클래스(class), 객체(object), 속성(attribute), 함수(method)에 대해 알아보자!
2.  [Python] 메서드(method)와 스태틱/클래스 메서드(static/class method)에 대해 알아보자!
3.  [Python] 클래스 상속, 메서드 오버라이딩(method overriding), 슈퍼(super) 함수에 대해 알아보자!

포스팅 내용에 오류가 있을 경우 댓글 남겨주시면 감사드리겠습니다.

그럼 오늘도 건강한 하루 보내시길 바랍니다 :-)

고맙습니다.

728x90
반응형
Comments