본문 바로가기
Algorithm/알고리즘 공부노트

Return에 대하여

by devraphy 2021. 11. 28.

- 알고리즘을 공부하면서, 다른사람이 작성한 다양한 코드를 접하고 분석하게 된다.

- 그러다 보니 내가 알고있다고 생각한 것들도 완전히 알지 못했다는 것을 깨닫게 되었다.

- 최근에 이런 경험을 한 것이 Return이다. 


1. Return의 기능 

- return은 메소드를 구현할 때 굉장히 자주 사용되는 명령어다.

 

- 단순히 함수를 종료하거나 값을 반환한다는 이해보다 한 단계 깊게 알아보자.

 

a) Return은 함수를 종료하기만 하는걸까? 

- return은 함수를 종료한다.

 

- 아무런 반환값 또는 함수 내부의 지역변수 없이 return만 덩그러니 사용되는 경우가 여기에 해당한다.

 

- 그러나 생각해보면 return이 수행되고 난 후에, 다음 코드가 실행된다. 

 

- 즉, return은 함수를 종료하고나서 main() 함수로 돌아가도록 설계되어 있는 것이다.

 

- 그러므로 함수 이후의 코드를 실행할 수 있게 된다.  

 

b) Return은 값을 어떻게 반환할까?

- return은 변수와 함께 사용되면 해당 변수의 값을 반환한다.

 

- 그렇다면 언제 어떻게 반환되는 것일까? 다음 코드를 생각해보자. 

def say(data):
   return data

print(say("Hello"))

- 위의 코드는 어떤 순서로 작동될까?

 

- return은 함수 내부에 작성되어 있으므로, 함수가 종료됨과 동시에 메모리 영역에서 해제된다. 

 

- 그러나 함수가 실행되고 난 뒤에 반환된 data 라는 변수의 값이 콘솔에 출력되게 된다.

 

- 이미 메모리 영역에서는 해제 되었을 텐데, 어떻게 가능할까?

 

- return 키워드를 통해 반환된 값은 main()함수로 전달되기 때문이다.

 

- 함수에서 반환된 값이 main()에게 전달되기 때문에, 함수가 종료되어도 함수 외부에서 return 값을 사용할 수 있게 되는 것이다.

 

c) Return 값은 어디에 저장될까?

- 그렇다면 main()에게 전달된 return 값은 어디에 저장되는 걸까?

 

- 결론부터 말하자면 return 값은 저장되지 않는다.

 

- main() 함수에게 전달되면 일시적으로 레지스터나 stack 메모리에 저장되지만, 결국에는 메모리에서 삭제된다.  

 

- 그러므로 return 값을 저장하고 싶다면 전역변수를 생성하고 여기에 return 값을 저장하는 방법이 유일하다.

 

- 즉, return 값은 휘발된다.  

 

d) main() 함수는 무엇을 말하는 걸까?

- main() 함수는 눈에 보이지 않지만, 가장 최상위 클래스인 object 클래스가 기본으로 할당된다. 

 

- 그러므로 main()이라 함은 object 클래스의 main() 일수도, 어떤 메소드가 위치한 특정 클래스의 main()일 수도 있다. 

댓글