코딩 스쿨에 오신것을 환영합니다~~

질의응답 게시판

 
7-3 함수의 반환값 예제 7-4 질문 드립니다.
권 * 철 | 2019-07-06


def inch_to_cm(inch):
   cm = inch * 2.54
   return cm

이라고 한 후에는 inch_to_cm의 매개변수는 inch이고 
inch_to_cm(20)
이라고 쓰면 호출이 될 것입니다.

그런데 

책의 동그라미 3번을 보면
retult = inch_to_cm(num)
이라고 나오는데요.

제가 드리고자 하는 질문은
result 우변에 'num'이 아니라 'inch'가 들어가야 하는 것 아닌가요?
그냥 대충 생각하면 그럴 수도 있겠다는 생각이 드는데,
구체적으로 납득하려고 하니 inch를 넣어야 하는데 왜 num을 넣는지 이해가 잘 안 가네요
num을 넣어야 한다면, 함수의 매개변수 inch는 책의 동그라미 1번에서만 사용되고 버려지는(?) 것인가요?

  • 관 * 자
  • 2019-07-06 (06:40)
안녕하세요.

함수 호출부인 ②③④에서 사용되는 변수와 함수정의부인 ①의 변수는 서로 다른 컴퓨터 메모리 영역을 내부적으로 사용하게 됩니다. 
일반적으로 프로그래밍 시 함수 호출부의 변수명과 정의부의 변수명은 달리 사용합니다. 따라서 예제에서 함수 호출부에서는 num은 키보드로 값을 입력받아 inch_to_cm() 함수의 매개 변수 inch로 값을 넘겨줍니다. 
이 때 num의 변수 값이 inch의 매개 변수에 복사가 됩니다.

말씀하신 것과 같이 함수의 매개변수 inch는 호출된 함수 내에서만 사용되고 버려지게 됩니다.

물론

def inch_to_cm(inch) :
    cm = inch * 2.54
    return cm
                
inch = int(input('인치를 입력하세요: '))
result = inch_to_cm(inch)
print('%d inch => %.2f cm' % (num, result))

와 같이 하셔도 됩니다. 하지만 함수 호출부의 inch와 정의부의 inch는 서로 다른 별개의 변수라는 것을 프로그래머가 인지하면 됩니다. 취향의 문제이지만 이런식으로 프로그램을 짜는 분도 많이 있습니다. 

하지만 호출부의 변수명과 정의부의 변수명을 달리하는 것이 프로그램의 가독성을 높이고 혹시 발생할지 모르는 오류를 방지하는 효과도 있습니다.

참고로 inch를 양쪽에 사용할 경우 정의부의 inch 값이 변경되어도 호출부의 inch에는 영향을 주지 않지만 간혹 호출부의 값이 변경된 것으로 착각할 수도 있거든요. 

도움이 되시길...

혹시 또 궁금한 점은 아래 댓글에 적어주세요.^^