본문 바로가기

프로그래밍, 쉽게 배워보자

함수, 인수, 반환값, 지역변수, 전역변수

함수란, 일정한 형식의 명령을 수학 공식처럼 규칙화한 것을 말합니다.  수학의 '함수'와 의미가 비슷합니다. 이때 (수학의 함수에서의)  x값에 해당하는 것을 인수, y값에 해당하는 것을 리턴값/ 반환값이라고 합니다.

그리고 앞서 배운 프로그래밍의 변수와 인수는 동일합니다. 다만 변수 중에서 함수에 전달할 정보, 또는 함수가 받은 정보를 인수로 구분하여 부르고 있을 뿐입니다.

함수를 호출하는 방법은, 프로그래밍 언어마다 다르지만, 리턴 = 함수의 이름 (인수) ..... 로 나타냅니다.

가인수실인수
가인수란, (수학 함수의) 정의역에 속한 x값들. 실인수란, (수학 함수의) 실제 함수에 사용하는  인수를 의미합니다. 주의할 점은 수학의 함수와 마찬가지로, 정의역에 속한 모든 x값은 함수에 남김없이 대입되어야 합니다. 즉, 가인수 = 실인수여야하며, 데이터타입도 동일해야 합니다.

한편, 인수가 없는 함수도 있습니다. 가령, 컴퓨터에 내장된  '부저음'함수는 '부저음이 나게 하시오.'라는 명령만으로도 컴퓨터 자체에 내장된 경고음이 나게 할 수 있습니다. 이러한 인수가 필요없는 함수를 어떻게 호출할지는 프로그래밍 언어마다 다릅니다만 C언어에서는 void 사용합니다. '빈, 무효의' 의 뜻인 void는 데이터값을 대입할 필요없는 데이터타입을 의미합니다.

인수를 함수에 전달하는 방법

함수에 인수를 전달하는 방법은 값 전달참조 전, 두 가지 방법이 있습니다.

값 전달이란 : 함수를 호출하면, 메모리 어딘가 데이터가 저장된 변수를 복사합니다. 그리곤 그 사본을 (인수라는) 별도의 상자에 담아, 함수가 사용하는 영역에 저장하는 것입니다. 원래의 변수가 아닌 사본을 (함수 안의 별도 영역에) 따로 저장했으므로, 함수쪽의 값을 변경해도 원래의 값은 달라지지는 않습니다.

참조 전달이란 : 함수에 정보를 전달할 때, 메모리상의 주소값인 포인터를 전달하는 방법입니다. 참조 전달은 값 전달과 달리, 함수내에 별도의 공간에 사본을 저장하는 방법이 아닙니다. 원래 메모리상에 저장된 주소값을, 함수가 간접 참조하는 방식이므로, 함수측에서 값을 변경하면 프로그램에서 사용하던 원래의 변수 값도 갱신됩니다.

인수 함수전달 값전달 참조전달인수를 함수로 전달하는 방법

반환값(리턴값)

함수는 처리한 결과를 호출한 프로그램에 반환하는데 이를 반환값(리턴값)이라고 부릅니다.

앞서 함수에 인수를 전달하는 방식에는 두 가지 방법이 있다고 설명했는데요, 그 중 하나인 전달은 반환값이 한 개뿐이지만,  참조 전달은 포인터를 활용해 간접 참조하는 방식이므로 반환값이 여러 개일 수 있습니다.

주의할 점은, 준비하고 있던 변수의 데이터타입과 함수가 반환하는 값의 데이터타입이 다를 수 있다는 점입니다. 예를 들어 계산상 소수점이 나올 수 있는데 정수형 타입을 준비해 둔다면 오류가 발생할 수 있으므로 주의하시기 바랍니다.

지역변수와 전역변수
프로그램내에서 변수를 사용할 수 있는 영역을 유효범위(scope)라고 합니다. 값을 이용할 수 있는 범위에 따라 지역변수전역변수로 구분합니다. 지역변수는 지역구, 전역변수는 전국구와 비슷한 개념입니다.

지역변수는 선언된 함수내에서만 유효합니다. 다른 함수에서는 무효하므로 함수가 다르면 같은 이름을 사용할 수 있습니다. 전역(global)변수는 전체 프로그램에서 유효합니다. 그러므로 함수가 달라도 동일한 이름을 사용할 수 없습니다.

프로그래밍 과정에서 지역변수인지 전역변수인지 혼동할 수 있으므로, 일반적으로 지역변수는 이름을 cnt로, 전역변수는 gcnt로 만든다고 합니다. 접두사 g처럼 변수앞에 붙이는 문자를 프리픽스(prefix)라고 합니다!

* 위 내용은 프로그래밍의 기초 개념을 정말 쉽게 배울 수 있는 [기초 튼튼 코트 튼튼, 다함께 프로그래밍] (출판사 : 제이펍)을 참조하였습니다.