배너 이미지

Call by Reference와 Call by Value

2025. 4. 23. 22:45·CS공부/Java & Spring

메서드 호출 시 값이나 참조를 어떻게 전달할 것인지에 따라 프로그램의 동작이 달라진다.
Java와 Spring에서 사용하는 Call by Value와 Call by Reference 개념을 정리하고,
둘의 차이점과 사용 사례를 통해 어떻게 코드가 작동하는지 이해할 수 있었다.


✅ Call by Value (값에 의한 호출)

개념

Call by Value는 메서드에 전달된 값을 복사하여 사용한다는 의미다.
메서드 호출 시, 인자의 값이 메서드로 복사되고, 메서드 내에서 이 값을 변경하더라도 원본 값은 변경되지 않는다.

예시 코드

public class CallByValueExample {
    public static void main(String[] args) {
        int a = 10;
        modifyValue(a);  // 값에 의한 호출
        System.out.println(a);  // 출력: 10
    }

    public static void modifyValue(int num) {
        num = 20;  // num만 변경, 원본 변수는 영향을 받지 않음
    }
}

왜 중요한가?

  • Call by Value는 기본 자료형에 대해 주로 사용된다. 메서드 내에서 값이 바뀌어도 원본 값은 변경되지 않기 때문에, 값 전달 시 불변성을 유지할 수 있다.

✅ Call by Reference (참조에 의한 호출)

개념

Call by Reference는 메서드에 변수의 참조(메모리 주소)를 전달하는 방식이다.
이 경우 메서드 내에서 해당 참조를 통해 객체를 수정하면, 호출자의 변수도 변경된다.

예시 코드

class Student {
    String name;
    int age;

    Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class CallByReferenceExample {
    public static void main(String[] args) {
        Student student = new Student("Alice", 20);
        modifyObject(student);  // 참조에 의한 호출
        System.out.println(student.name);  // 출력: Bob
    }

    public static void modifyObject(Student s) {
        s.name = "Bob";  // 객체의 상태를 수정
    }
}

왜 중요한가?

  • Call by Reference는 객체를 메서드로 전달할 때 사용된다. 객체의 속성을 수정할 수 있기 때문에, 객체의 상태 관리에 유용하다.

✅ Spring에서의 호출 방식

Spring에서 메서드를 호출할 때, 기본적으로 Call by Value 방식을 따른다.
하지만 객체를 참조로 전달할 때는 객체의 상태를 변경할 수 있다.
그러므로, Spring에서는 객체의 속성만 변경할 수 있고, 객체 자체를 대체하는 것은 불가능하다.

예시 코드:

@Component
public class MyService {
    public void updateName(Student student) {
        student.setName("Bob");  // 객체의 속성 변경
    }
}

왜 중요한가?

  • 객체를 참조로 전달하면 객체의 속성만 변경할 수 있다. 객체 자체를 대체하는 것은 불가능하므로, Spring에서는 객체의 속성만을 안전하게 변경하는 방식으로 동작한다.

✅ 결론

  • Call by Value: 메서드에 값을 복사하여 전달, 메서드 내에서 값이 변경되어도 호출자 변수에는 영향을 미치지 않는다.
  • Call by Reference: 메서드에 변수의 참조(메모리 주소)를 전달, 메서드 내에서 변수의 상태를 변경하면 호출자 변수도 변경된다.
  • Spring에서는 객체의 속성만 변경 가능하고, 객체 자체를 다시 할당하는 것은 불가능하다.

이렇게, Call by Value와 Call by Reference의 차이를 이해하면, 자바의 메서드 호출 시 어떻게 값이 전달되고 처리되는지 명확히 파악할 수 있다.
Spring에서 객체를 참조로 전달하고 상태를 변경하는 방식은 효율적이고 예측 가능한 코드를 만들 수 있게 도와준다.

'CS공부 > Java & Spring' 카테고리의 다른 글

MVC 모델이란 무엇인가?  (0) 2025.04.23
자바 컴파일 과정  (0) 2025.04.23
Spring 내부 구조 - DispatcherServlet, 요청 흐름, 에러 처리  (0) 2025.04.22
Spring Boot @Transactional 어노테이션  (0) 2025.04.22
Spring Boot 프로젝트 horong 리팩토링  (1) 2025.04.22
'CS공부/Java & Spring' 카테고리의 다른 글
  • MVC 모델이란 무엇인가?
  • 자바 컴파일 과정
  • Spring 내부 구조 - DispatcherServlet, 요청 흐름, 에러 처리
  • Spring Boot @Transactional 어노테이션
quokkaST
quokkaST
  • quokkaST
    stquokka
    quokkaST
    • 개발자 (77)
      • n8n (2)
      • CS공부 (46)
        • Java & Spring (15)
        • 인프라 (7)
        • 운영체제 & 시스템 (9)
        • 기타 CS지식 (7)
        • 네트워크 (6)
        • 데이터베이스 (2)
      • 알고리즘 (16)
      • 프로젝트 (8)
        • 감정&금융챗봇 (8)
      • 리팩토링 (5)
        • horong (5)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
상단으로

티스토리툴바