티스토리 뷰

반응형

※ 파라미터 전달 방식: 값 전달과 참조 전달의 차이

데이터 관련 이미지

프로그래밍에서 함수나 메서드를 호출할 때, 종종 파라미터를 전달해야 합니다. 이때 파라미터를 전달하는 방식에는 값 전달과 참조 전달이라는 두 가지 기본적인 방법이 있습니다. 이 두 가지 방법은 서로 다른 동작 방식을 갖고 있으며, 이해하고 활용하는 것은 프로그래밍에서 중요한 역할을 합니다.

1. 값 전달 (Pass by Value)

값 전달은 파라미터를 함수로 전달할 때 해당 파라미터의 값만을 전달하는 방식입니다. 간단히 말해, 함수 내부에서 파라미터 값이 변경되더라도 호출하는 쪽의 변수 값은 변경되지 않습니다. 이 방식은 변수의 값을 복사하여 함수로 전달하기 때문에 호출된 함수에서 파라미터 값에 대한 변경이 있더라도 호출하는 쪽의 변수에는 영향을 주지 않습니다.

예를 들어, 다음과 같은 C++ 코드를 살펴봅시다.

#include <iostream>

void increment(int num) {

      num++;

      std::cout << "Inside function: " << num << std::endl;

}

int main() {

     int x = 5;

     std::cout << "Before function call: " << x << std::endl;

     increment(x);

     std::cout << "After function call: " << x << std::endl;

     return 0;

}

 

위 코드에서 'increment' 함수는 정수를 하나 증가시키는 역할을 합니다. 그런데 함수 내부에서 'num'을 1 증가시켰음에도 불구하고, 'main' 함수에서 'x'의 값은 변하지 않습니다. 이는 'x'의 값이 'increment' 함수로 값 전달되었기 때문입니다.

2. 참조 전달 (Pass by Reference)

참조 전달은 값 전달과 달리 변수의 주소(참조)를 전달하는 방식입니다. 이는 함수 호출 시 전달된 변수에 대한 복사본을 만드는 대신에, 변수 자체의 메모리 주소를 전달하여 함수에서 해당 변수를 직접 조작할 수 있도록 합니다. 따라서 함수 내부에서 변수의 값이 변경되면 호출하는 쪽의 변수 값도 변경됩니다.

다시 위의 C++ 코드를 참조 전달로 수정하여 살펴봅시다.

#include <iostream>

void increment(int& num) {

      num++;

      std::cout << "Inside function: " << num << std::endl;

}

int main() {

     int x = 5;

     std::cout << "Before function call: " << x << std::endl;

     increment(x);

     std::cout << "After function call: " << x << std::endl;

     return 0;

}

 

이번에는 'increment' 함수의 파라미터를 'int& num'으로 변경하여 참조 전달을 사용합니다. 이렇게 수정된 코드를 실행하면, 'increment' 함수 내부에서 'num'을 1 증가시키면서 호출하는 쪽의 'x' 값도 함께 증가합니다. 이는 'x'의 참조가 함수로 전달되었기 때문에 발생하는 현상입니다.

3. 값 전달과 참조 전달의 선택

값 전달과 참조 전달은 각각의 상황에 맞게 선택되어야 합니다. 값 전달은 파라미터 값을 변경할 필요가 없을 때, 혹은 파라미터가 복사되는 것이 적합한 경우에 사용됩니다. 이는 함수 내부에서 파라미터 값을 변경해도 호출하는 쪽의 변수에 영향을 주고 싶지 않을 때 유용합니다. 반면에, 참조 전달은 함수 내부에서 파라미터 값을 변경하고 그 변경이 호출하는 쪽에 영향을 주어야 할 때 유용합니다. 특히 대용량 데이터나 객체를 다룰 때 복사를 피하고 메모리를 절약하기 위해 참조 전달이 사용될 수 있습니다.

 

파라미터 전달 방식은 프로그래밍에서 중요한 개념 중 하나입니다. 값 전달과 참조 전달은 각각의 장단점을 가지고 있으며, 상황에 따라 적절한 방식을 선택하여 사용해야 합니다. 값 전달은 변수의 복사본을 전달하여 원본 변수에 영향을 주지 않으며, 참조 전달은 변수의 주소(참조)를 전달하여 원본 변수를 직접 조작할 수 있습니다. 이러한 차이를 이해하고 적절히 활용함으로써 프로그래밍의 효율성과 가독성을 높일 수 있습니다.

반응형