call by value, call by reference, call by assignment 차이
함수란?
- 어떤 작업을 수행하는 코드를 모아 이름을 붙인 것
- 변수를 이용해 데이터에 이름을 붙이는 것처럼, 함수를 이용해 프로그램 조각에 이름을 붙일 수 있음
- 필요한 데이터를 전달받아 함수에 넣으면, 함수의 결과값을 반환해줌
- 주어진 문제를 작은 단위의 문제로 나누어 풀게 되는데 이때, 작은 단위의 문제를 해결하기 위한 함수를 여러개 만들어 큰 문제를 풀 수 있도록 함
- 함수는 독립적 기능을 수행하는 프로그램 단위로 구성되어 읽기 쉽고 이해하기 쉬움
- 함수는 한번 만들어 재사용이 가능하기에 프로그램의 양을 줄여 생산성을 높일 수 있음
함수를 호출하는 방법은?
C언어
-
call by value
- 함수에서 값을 복사해서 전달하는 방식
- 인자로 전달되는 변수를 함수의 매개변수에 복사
- 이렇게 복사되면 인자로 전달한 변수와는 별개의 변수가 되면, 매개변수를 변경해도 원래의 변수에는 영향을 주지 않음
- 원본 값을 바꿀 필요가 없는 경우에 사용하는 방식
-
call by reference
- 함수에서 주소 값 자체를 복사해서 넘겨주는 방식
- 함수 안에서 인자의 값이 변경되면, 인자로 전달된 객체의 값도 함께 변경
파이썬
- 파이썬의 경우 함수의 호출 방식으로 callby Assignment를 사용 (Call by Assignment는 객체에 따라 다르게 작동하는 방식을 의미함)
- 명시적인 Call by Reference 혹은 Call by Value 라는 개념이 존재하지 않음
- Mutable Object 는 Call by reference의 형태로 참조형으로 변수를 다루며 Immutable Object는 Call by value 의 형태로 변수를 핸들링함.
- immutable object
- 수치, 문자, 튜플
- 함수 내에서 formal parameter 값이 바뀌어도, actual parameter에는 영향이 없음
- mutable object
- 리스트, 딕셔너리, 집합형
- mutable 객체가 함수의 argument로 넘어가면 call by reference로 동작
- object reference가 전달되어 actual parameter의 값에 영향을 미칠 수 있음