Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 함수와 메소드의 차이점 완벽 정리

함수(Function)란?

파이썬에서 함수는 특정 작업을 수행하기 위해 작성된 코드 블록입니다. 함수는 자체적인 유효 범위(scope)를 가지며, 이름을 통해 호출됩니다. 함수는 인자(argument)를 전혀 받지 않거나 하나 이상의 인자를 받을 수 있고, 종료 시 값을 반환할 수도 있고 반환하지 않을 수도 있습니다.

기본 함수 문법

def functionName( arg1, arg2,...):
    ......
    # 함수 본문
    ......

간단한 사용자 정의 함수를 만들어 보겠습니다. 아래 예제의 함수 이름은 'sum'으로 지정했지만, 원하는 이름을 자유롭게 사용할 수 있습니다. 이 함수는 num1과 num2라는 두 개의 인자를 받아 두 값의 합을 반환합니다. 함수를 5와 6이라는 인자로 호출하면 11이 반환됩니다.

def sum(num1, num2):
    return (num1 + num2)

실행 결과

>>> sum(5,6)
11

위 예제에서 볼 수 있듯이, return 문은 파이썬 함수로부터 값을 반환하는 역할을 합니다.

함수를 활용하면 코드 재사용성(code reusability)을 높일 수 있습니다. 파이썬의 함수는 크게 세 가지로 나눌 수 있습니다.

  • 내장 함수(Built-in functions): 파이썬 언어에 기본적으로 포함되어 있는 함수입니다. 예를 들어 도움말을 요청하는 help(), 최댓값을 구하는 max(), 객체의 타입을 반환하는 type() 등이 있습니다.
  • 사용자 정의 함수(User-defined functions): 사용자가 직접 만들어 사용하는 함수입니다. 위에서 만든 'sum' 함수가 대표적인 예입니다.
  • 익명 함수(Anonymous Functions): 일반적으로 lambda 함수라고 불리며, def 키워드 대신 lambda 키워드로 정의한다는 점이 일반 함수와 다릅니다.

메소드(Method)란?

파이썬에서 메소드는 함수와 매우 유사하지만, 객체나 클래스에 연관되어 있다는 점이 다릅니다. 메소드는 함수와 비슷하지만 다음 두 가지 중요한 차이점이 있습니다.

  • 메소드는 호출된 객체에 암묵적으로(implicitly) 적용됩니다.
  • 메소드는 해당 클래스 내부에 포함된 데이터에 접근할 수 있습니다.

일반적인 메소드 문법

class ClassName:
    def method_name():
        ..........
        # 메소드 본문
        ..............

간단한 코드 예제를 통해 메소드를 이해해 보겠습니다.

class Pet(object):
    def my_method(self):
        print("I am a Cat")
cat = Pet()
cat.my_method()

실행 결과

I am a Cat

위 코드에서는 먼저 'Pet'이라는 클래스를 정의했습니다. 그다음 이 설계도(클래스)를 바탕으로 'cat'이라는 객체를 생성하고, 마지막으로 해당 객체를 통해 my_method라는 사용자 정의 메소드를 호출했습니다.

파이썬에서 메소드와 함수의 핵심 차이점

함수와 메소드에 대한 기본 개념을 살펴보았으니, 이제 두 가지의 핵심적인 차이점을 정리해 보겠습니다.

  • 함수와 달리 메소드는 반드시 객체를 통해 호출됩니다. 위 예제에서 메소드인 'my_method'는 객체 'cat'을 통해 호출된 반면, 함수인 'sum'은 어떠한 객체 없이 독립적으로 호출되었습니다. 또한 메소드는 객체를 통해 호출되기 때문에 그 객체 내부의 데이터에 접근할 수 있습니다.
  • 메소드는 객체의 상태(state)를 변경할 수 있는 반면, 파이썬의 일반 함수는 객체의 상태를 변경하지 않고 주어진 데이터를 처리하는 방식으로 동작합니다.

요약하자면, 메소드란 특정 객체에 속해 있는 함수라고 할 수 있습니다.