EP.3-3 Call by Reference

EP.3-3 Call by Reference: 함수의 국경을 넘는 원격 제어 | 제어 엔지니어 구조 분석

Phase 3: Memory & Address Control

EP.3-3 Call by Reference — 함수의 국경을 넘는 제어

값을 복사해주는 '통보'가 아니라, 열쇠를 넘겨주는 '권한 위임'의 기술

복사(Value)와 주소(Reference)의 차이

함수에 데이터를 보낼 때, 우리는 두 가지 선택을 할 수 있습니다. 변수 안의 내용물을 복사해서 보내느냐(Value), 아니면 변수가 있는 창고의 열쇠를 보내느냐(Reference)입니다.

포인터를 사용한 Call by Reference는 함수가 메인 공정(main)의 데이터를 직접 수정할 수 있게 해줍니다. 이것은 마치 원격지에 있는 장비의 관리자 권한을 획득하는 것과 같습니다.

⚡ 실습: 두 장비의 데이터를 맞바꾸는 Swap 공정

포인터 없이는 절대 불가능한 '값 교체(Swap)' 공정을 통해 원격 제어의 위력을 확인합니다.

#include <stdio.h>

// [함수 설계] 리모컨(주소)을 받아 직접 값을 교체함
void swap(int *pA, int *pB) {
    int temp; // 값을 잠시 담아둘 임시 보관함

    temp = *pA; // A의 위치로 가서 값을 temp에 보관
    *pA = *pB; // B의 값을 A의 위치에 덮어쓰기
    *pB = temp; // 보관했던 값을 B의 위치에 쓰기
}

int main() {
    int sensor_1 = 10;
    int sensor_2 = 20;

    printf("교체 전: sensor_1 = %d, sensor_2 = %d\n", sensor_1, sensor_2);

    // [국경 개방] 주소(&)를 함수로 전달합니다.
    swap(&sensor_1, &sensor_2);

    printf("교체 후: sensor_1 = %d, sensor_2 = %d\n", sensor_1, sensor_2);

    return 0;
}

▲ 실습 결과

📍 왜 엔지니어는 포인터를 고집하는가?

수만 개의 데이터를 가진 배열을 함수로 보낼 때, 이를 일일이 복사하는 것은 엄청난 리소스 낭비입니다. 포인터(시작 주소)만 던져주면 데이터가 1개든 100만 개든 단 1초의 지체 없이 제어권을 넘길 수 있기 때문입니다. 이것이 고속 제어의 핵심입니다.

🛠️ 마스터의 시운전 메모

함수 안에서 *(역참조)를 사용하는 순간, 우리는 이미 함수의 벽을 뚫고 밖으로 나간 것입니다. &로 열쇠를 만들고, *로 문을 여는 이 일련의 과정이 '껌'처럼 느껴진다면 당신은 이미 포인터의 주인입니다.

© 2026 ZIN PARK · MASTERING CONTROL ENGINEERING SERIES
"주소를 다루는 능력은 곧 메모리라는 광활한 대지의 통치권이다."

댓글

이 블로그의 인기 게시물

EP.0 코딩의 첫걸음 — 전기를 어떻게 연결할 것인가?

EP.0-1 천공카드

EP.1-1트랜지스터