본문 바로가기
무모한 도전-주식 인공지능 만들기/지식 정리 창고

클래스(Class)안에 있는 메서드(Method)의 데이터 주고 받기

by 인터넷떠돌이 2020. 7. 28.
반응형

안녕하세요?

 

이래저래 다른 작업이 바쁜 와중에 최근도 아니고 좀 되기는 했지만, 제가 프로그램을 짜는 것인지 프로그램이 저를 짜는 것인지......... 제가 파이썬을 하는 것인지 파이썬이 저를 하는 것인지 모를 정도로 하다가 사용해 보니 상당히 유용하게 사용할 수 있는 사실이 있어서 한번 지식정리창고에 집어넣어 볼까 합니다.

 

일단 여기서는 class안에 하위로 들어가 있는 메서드에 대해서 다루고 있는데, 이 경우에는 일반적으로 위 스크린샷과 같은 형태를 띄게 됩니다. 여기서 return은 굳이 붙여 주지 않아도 되기는 되지만, 그래도 나중에 후술할 이유로 인해서 붙여주는 편이 어느정도 편하기는 편합니다.

 

그런데 문제가 하나 있습니다. 이렇게 메서드를 실행시키려고 하면 불러와야 하는데, 일단 초창기에 초보일 적에는 저는 위 스크린샷에서 볼 수 있는 것처럼, 일단 메서드의 끝에서 다음으로 실행시키고자 하는 메서드를 호출하는 식으로 무슨 줄줄이 소세지 처럼 엮었습니다.

 

그래서 위 스크린샷처럼 일단 시작을 하는 메서드에서 주로 일련의 프로세스를 시작시키거나, 최초로 실행되는 메서드에서 줄줄히 일련의 메서드들을 차례차례 불러와서 작업을 해 주도록 했습니다.

 

 

그런데 여기서 하나 문제가 생기는 것이, 일단 메서드에서 메서드를 건너뛸 수 있는 변수는 self.를 앞에 붙여서 만들 수 있기는 있습니다. 하지만 이런 식으로 해서 메서드에서 메서드간에 계속해서 변수를 주고 받는 것에는 매우 애로사항이 많기는 많습니다.

 

그래서 메서드를 호출할 때 어떻게 메서드 자체에 변수를 집어넣을 수 있는지를 하다보니 익히게 된게, 일단 위 스크린샷의 내용처럼, 메서드는 self.메서드명()이런 식으로 호출을 보통 하게 됩니다. 그런데 여기다가 데이터인 변수를 ()안에 집어넣고, 메서드를 만드는 코드에서는 self다음에 , 로 새로 사용할 변수명을 입력하면 됩니다. 여기서 중요한 것은 집어넣을 때 변수의 이름과, 이를 받을 메서드의 변수명이 달라도 된다는 것 입니다.

 

그럼 복수의 변수를 집어넣을 수 있느냐 하면, 예, 가능합니다. 이런 경우에는 집어 넣고자 하는 변수의 숫자에 맞게 메서드에서 준비를 해 줄 필요가 있습니다. 이제부터는 이렇게 해서 일단 데이터를 메서드에 집어넣는데 성공했는데, 문제는 메서드에 집어넣은 이유는 결과를 얻기 위해서 입니다. 그래서 결과는 어떻게 받아오는 지에 대해서 이야기를 하면.........

 

일단 위 스크린샷에서 볼 수 있는 것처럼, 변수를 메서드를 호출할 때 집어넣었습니다. 그런데 이런 상황에서 메서드를 호출하는 코드 앞에 변수를 대입하는 코드형식으로 해주면, return이 반환값이라고 하는데 간단히 말해서 메서드에서 계산한 결과를 내 보낸다고 할 수 있습니다.

즉, return 뒤에 오는 변수인 result의 값을 메서드가 내놓았기 때문에, name1이라는 변수에 집어넣을 수 있게 되는 것 입니다. 이런 이유로 인해서 붙이지 않아도 되는 return이지만, 그래도 붙이는 것이 좋은 이유는 데이터를 내보내기 위해서 입니다.

 

그럼 이런 식으로 연속해서 메서드를 호출하고, 각각의 메서드에서 계산을 했는 값을 받아와서 다음 메서드에 집어넣을 수 있느냐 하면, 답은 Yes라고 할 수 있습니다.

 

실제로 이게 가능한지 알아보기 위해서 위 스크린샷에서 보이는 것처럼 코드를 짜고서 한번 작동을 시켜 보고자 합니다. 일단 실행환경운 우분투 리눅스를 지원하는 구름IDE에서 진행을 했습니다.

 

이렇게 해서 각각의 결과에서 나온 데이터를 다음 메서드가 받아서 처리하는 것을 확인할 수 있었습니다. 이게 int나 flaot만 되는가 싶지만, 실제로는 str형식부터 가지가지 형식 - 심지어는 pandas의 데이터 프레임까지 가능한 것을 확인할 수 있었습니다. 그래서 이런 식으로 프로그램을 짜서, 하나하나 데이터를 주고 받기하는 것으로 조금이라도 괜찮은 코드를 만들 수 있어 보입니다.

반응형