[Java] call by value, call by reference

2024. 9. 27. 01:18·Language/Java
반응형

call by value와 call by reference는 함수 호출 시 매개변수를 전달하는 방식이다. 함수 호출 과정에서 함수의 매개변수가 전달될 때 원본 데이터를 복사하는 것인지, 원본 데이터의 참조를 전달한 것인지를 구분하는데 사용한다. 함수 내부에서 원본 데이터를 변경할 수 있는지의 차이가 있다.

call by value

call by value는 값을 복사해서 함수로 전달하는 방식이다. 함수는 전달받은 값의 복사본을 사용하며 함수 내부에서 값을 변경하더라도 호출한 쪽의 원본 데이터에는 영향을 미치지 않는다.

call by reference

call by reference는 값이 저장된 메모리의 주소를 전달하는 방식이다. 함수는 전달받은 주소를 통해 원본 데이터를 직접 참조하기 때문에, 함수 내부에서 값을 변경하면 호출한 쪽의 원본 데이터에도 영향을 미칩니다.

자바에서는?

자바는 기본 데이터 타입, 참조 타입 모두 동일하게 함수 호출 시 Call by value 방식을 사용한다. 객체가 전달될 때 객체의 참조값이 복사되어 전달되기 때문에 call by reference로 이해할 수 있다.

class SomeObject {
    int value;
}

public class Example {
    public static void modify(SomeObject obj) {
        obj.value = 10;
    }

    public static void reassign(SomeObject obj) {
        obj = new MyObject();
        obj.value = 20;
    }

    public static void main(String[] args) {
        SomeObject someObject = new SomeObject();
        someObject.value = 5;

        modify(someObject);
        System.out.println(someObject.value); // 10

        reassign(someObject);
        System.out.println(someObject.value); // 10
    }
}
  • modify 메서드 내부에서 객체의 속성을 value를 변경하면 호출한 쪽에 그 변경이 반영된다.
  • reassign 메서드 내부에서는 참조 변수에 새로운 값을 할당했지만 호출한 쪽에 영향을 미치지 않았다.
반응형
저작자표시 비영리 변경금지 (새창열림)
'Language/Java' 카테고리의 다른 글
  • [Java] Enum 비교를 equals() 로 하지않고 == 로 해야 하는 이유
  • [Java] Exception
  • [Java] sealed
  • [Java] StringUtils의 hasLength()와 hasText()
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (123)
      • Spring Framework (10)
        • Spring (5)
        • JPA (3)
        • Spring Security (0)
      • Language (51)
        • Java (11)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (3)
      • 프로젝트 (2)
      • Book (2)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    CPP
    게임
    C
    redis
    게임 개발
    C++
    자바
    클래스
    PS
    Unreal Engine
    딥러닝
    php
    파이썬
    FPS
    NUXT
    map
    pytorch
    mscoco
    MySQL
    프로그래머스
    Unreal
    알고리즘
    웹
    JS
    Python
    블루프린트
    JavaScript
    memcached
    언리얼엔진4
    select
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[Java] call by value, call by reference
상단으로

티스토리툴바