아래 글은 C# 문법 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

 

 

# 함수의 호출 방법 두가지

  • Call by value(값에 의한 호출)
  • Call by reference(참조에 의한 호출)

 

 

# Call by value (값에 의한 호출)

인자로 받은 값을 복사하여 처리를 한다.

프로그래밍 구조상 call by Value를 하면 복사가 되기 때문에 메모리량이 늘어난다.

요즘은 기기의 성능이 종아져서 상관이 없다지만 많은 계산이 들어간다면 과부하의 원인이 된다.

하지만 복사처리가 되기 때문에 원래의 값은 영향을 받지 않아서 안전하다.

 

  • 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.
    (c++의 경우 stack frame) 함수가 종료되면 해당 공간은 사라진다.
  • 스택 프레임(Stack Frame): 함수 호출 시 할당되는 메모리 블록(지역변수의 선언으로 인해 할당되는 메모리 블록)
  • call by Value 값에 의한 호출방식은 함수 호출 시 전달되는 변수의 값을 복사하여 함수의 인자로 전달한다.
  • 복사된 인자는 함수 안에서 지역적으로 사용되는 local value의 특성을 가진다.
  • 따라서 함수 안에서 인자의 값이 변경되어도, 외부의 변수의 값은 변경되는 않는다.
  • Java의 경우 함수에 전달되는 인자의 데이터 타입에 따라서(원시자료형 / 참조자료형)함수 호출 방식이 달라진다.
    - 원시 자료형(primitive type) : call by Value 로 동작 (int, short, long, float, double, char, boolean)
    - 참조 자료형(reference type) : call by reference 로 동작 (Array, Class Instance)

 

 

장, 단점

  • 장점: 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존 된다.
  • 단점: 복사를 하기 때문에 메모리 사용량이 늘어난다.

 

 

 

# Call by reference (참조에 의한 호출)

인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다.

 

  • 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.
    (예: stack frame)함수가 종료되면 해당 공간은 사라진다.
  • call by Reference 참조에 의한 호출방식은 함수 호출 시 인자로 전달되는 변수의 레퍼런스를 전달한다.
    (해당 변수를 가르킨다.)
  • 따라서 함수 안에서 인자의 값이 변경되면, Arguement 로 전달된 객체의 값도 함께 변경된다.

 

 

장, 단점

  • 장점: 복사하지 않고 직접 참조를 하기에 빠르다.
  • 단점: 직접 참조를 하기에 원래 값이 영향을 받는다.(리스크)
반응형

+ Recent posts