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

호기심 파이썬 : 메소드 (메소드 만드는 법 / 파이썬 클래스 메소드 / 스택을 구현해보자!)

by 인성패밀리 2022. 12. 2.
반응형

지난 포스팅에서 생성자에 대해서 알아보았습니다. 이번에는 method에 대해서 알아보도록 하겠습니다.

 

method는 클래스의 기능이라고 보면 됩니다. def를 이용해서 만들며 함수 기본 문법을 이용해 만듭니다.

 

우리가 평소 자주 사용하던 list 자료형도 사실은 객체입니다. 클래스로 구현이 되어있습니다.(파이썬은 전부 객체로 이루어져 있습니다.)

 

보통 처음 파이썬을 처음 공부할 때 리스트에 추가할 때 리스트변수.append(값) 이런 형태로 사용을 했는데 이때 append 함수라고 용어를 배우는 부분이 있는데 사실 함수가 아니라 append method라고 불러야 맞는 말입니다. (처음 배우고 기능적으로 별 차이도 없는데 용어를 구분해서 부른다면 헷갈리는 부분이 있기 마련입니다. 클래스까지 학습을 한다면 그 만큼 파이썬에 대해서 많이 경험을 했을 것이고 클래스를 학습하면 메소드와 함수를 받아들이는데 큰 문제가 없을 것 이므로 이렇게 하는 곳도 있는 것 같습니다.)

 

메소드도 어떤 기능을 하는 문법이며 함수 또한 그 안에 있는 코드에 따라서 어떤 기능을 하는 문법입니다.

그렇다면 메소드와 함수의 차이점은 뭘까요?

바로 클래스 인지 아닌지의 차이점이 있습니다. 그리고 사용법 또한 다릅니다.

 

일반적인 코드에서 def 를 이용해 어떤 기능을 만들었다면 그것은 함수라고 불리고 클래스 내부에서 def 를 만들었다면 그것은 메소드가 됩니다.

 

메소드를 만드는 문법을 알아보겠습니다.

class Stack:
    def __init__(self):
        self.data = []

    def stack_push(self, value):
        self.data.append(value)

    def stack_pop(self):
        temp = self.data[-1]
        del self.data[-1]
        return temp


# 클래스 사용하기
s = Stack()
s.stack_push(1)
s.stack_push(2)
s.stack_push(3)
print(s.data)

원래 스택을 연결리스트나 배열을 이용해서 만드는데 클래스를 쉽게 이해해보기 위해서 리스트로 구현해보겠습니다.

스택의 특징은 벽돌을 쌓듯이 데이터가 쌓이는 것입니다. 만약 맨 아래의 데이터를 꺼내고 싶다면 위의 있는 벽돌 즉, 쌓인 값들을 전부 제거해야만 그 값을 사용할 수 있는 특징이 있습니다.

때문에 스택의 주요 기능으로는 넣기와 빼기가 있습니다.

 

위 코드의 기능입니다.

init 메소드 -> 객체 생성 시 빈 리스트를 생성합니다.

stack_push -> data를 매개변수로 받아 스택에 추가합니다.

stack_pop -> 스택의 맨 위의 값(가장 최근에 쌓은 값)을 제거하고 그 값을 반환합니다.

 

메소드를 만드는 방법은 일반 함수를 만드는 과정과 동일합니다. 그런데 매개변수로 self가 있다는 특징이 있습니다.

 

메소드의 첫 매개변수는 반드시 self여야 합니다. self의 의미는 클래스 내부에 있는 메소드, 인스턴스 변수에 접근한다는 의미이며 굳이 self라는 단어 대신에 다른 단어를 선택해도 됩니다. 이런 경우입니다.

class Stack:
    def __init__(test):
        test.data = []

    def stack_push(test, value):
        test.data.append(value)

    def stack_pop(test):
        temp = test.data[-1]
        del test.data[-1]
        return temp


# 클래스 사용하기
s = Stack()
s.stack_push(1)
s.stack_push(2)
s.stack_push(3)
print(s.data)

위 코드를 보면 self 대신에 test가 사용된 것을 볼 수 있습니다. 그러나 self를 사용하는 것이 규칙으로 정해져있습니다.

 

정리하자면 메소드를 만들 때는 반드시 첫 번째 매개변수로 self가 있어야 하며 이는 클래스 내부 변수, 메소드를 이용한다는 의미입니다.

 

메소드 내부 코드는 구현하고자 하는 기능을 코드로 일반 함수를 작성하듯이 작성하면 되며 다만 클래스 내부 변수, 메소드를 사용할 때 만드시 self.변수 또는 self.메소드 이런식으로 사용해야 합니다.

 

다음 시간에는 연결리스트를 클래스로 구현해보겠습니다.

반응형

댓글