25.01.13 TIL Call by reference

신성훈·2025년 1월 13일

TIL

목록 보기
117/162

1. Call by Reference란?

Call by Reference는 함수 호출 시 변수의 메모리 주소를 전달하는 방식입니다.
함수 내부에서 전달받은 주소를 통해 원본 데이터를 직접 수정할 수 있습니다.

특징

  • 함수 호출 시 참조(Reference)가 전달됨
  • 원본 데이터가 변경될 수 있음
  • Java와 같은 언어는 엄밀히 말하면 Call by Reference를 지원하지 않지만, 참조 타입(Object)은 Call by Reference처럼 동작합니다.

2. Call by Reference 동작 방식 (Java 예시)

예제 1: 참조 타입(Object)에서의 Call by Reference

class Person {
    String name;
}

public class Main {
    public static void updateName(Person person) {
        person.name = "Updated Name"; // 원본 객체의 속성 변경
    }

    public static void main(String[] args) {
        Person person = new Person();
        person.name = "Original Name";

        System.out.println("Before: " + person.name); // Original Name
        updateName(person); // 객체의 참조가 전달됨
        System.out.println("After: " + person.name);  // Updated Name
    }
}

출력 결과

Before: Original Name  
After: Updated Name  
  • updateName 함수는 객체의 참조를 전달받아 원본 데이터를 수정합니다.

3. Call by Reference와 Call by Value 비교

특징Call by ValueCall by Reference
전달 내용변수의 값을 복사하여 전달변수의 메모리 주소를 전달
원본 데이터 변경 가능성불가능 (기본 타입)가능 (참조 타입)
사용 언어Java(기본 타입), CJava(참조 타입), C++

4. Call by Reference의 장단점

장점

  • 함수 호출 시 데이터 복사가 필요 없어 성능이 우수
  • 원본 데이터를 수정하는 데 유용

단점

  • 원본 데이터가 예상치 못하게 수정될 수 있음
  • 데이터 무결성 보장이 어려울 수 있음

5. 마무리

Java는 기본 타입에서는 Call by Value, 참조 타입에서는 Call by Reference처럼 동작한다는 점이 인상 깊었습니다. 객체의 참조를 활용하여 데이터를 수정할 수 있는 강력한 기능이지만, 코드의 가독성과 데이터 안전성을 고려해야 한다는 점을 배웠습니다. 함수 내부에서 객체를 다룰 때는 원본 데이터에 영향을 줄 수 있음을 항상 염두에 두고, 불변 객체(Immutable Object)를 적극적으로 활용하는 것이 중요하다고 느꼈습니다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글