-
Call by value?? Call by reference?? 알아보자IT 2025. 4. 9. 17:38728x90반응형
📌 Call by Value vs Call by Reference
프로그래밍 언어에서 함수나 메서드에 인자를 전달할 때, 그 방식은 크게 두 가지로 나뉩니다.
✅ Call by Value (값에 의한 호출)
- 값 자체를 복사해서 전달
- 함수 내부에서 매개변수의 값을 변경해도, 원본 값에는 영향이 없음
public class Example { public static void changeValue(int x) { x = 100; } public static void main(String[] args) { int num = 50; changeValue(num); System.out.println(num); // 👉 출력: 50 } }
설명:
num
은50
이라는 값을 가지고 있고,changeValue(num)
호출 시50
이라는 값이 복사되어 전달됩니다. 따라서x
를 100으로 바꿔도,num
에는 영향이 없습니다.
✅ Call by Reference (참조에 의한 호출)
- 참조(주소)를 전달
- 함수 내부에서 매개변수로 전달된 객체를 변경하면, 원본 객체도 변경됨
class Person { String name; Person(String name) { this.name = name; } } public class Example { public static void changeName(Person p) { p.name = "Chris"; } public static void main(String[] args) { Person person = new Person("Alex"); changeName(person); System.out.println(person.name); // 👉 출력: Chris } }
설명:
Person
객체는 참조형이기 때문에, 함수로 전달될 때 주소값이 전달됩니다. 함수 안에서name
을 바꾸면 원본 객체에도 영향을 줍니다.
🚀 Java는 Call by Value? Call by Reference?
많은 사람들이 Java는 Call by Reference라고 생각하지만, 정확히는 Java는 오직 Call by Value만 지원합니다.
📌 "값"이 객체의 참조 주소일 뿐인 경우, 그 참조값이 복사되어 전달되므로 마치 Call by Reference처럼 보일 수 있습니다.
- 기본형 변수: 값이 복사됨 → 함수 내 변경 불가능
- 참조형 변수: 참조값이 복사됨 → 객체의 내부 상태는 변경 가능
🌱 스프링(Spring)에서는 어떻게 동작할까?
Spring은 Java 기반이기 때문에 동일하게 Call by Value 방식으로 동작합니다.
예시 (Spring Service)
@Service public class UserService { public void updateUser(User user) { user.setName("Updated Name"); } }
@RestController @RequiredArgsConstructor public class UserController { private final UserService userService; @PostMapping("/update") public String update() { User user = new User("Original Name"); userService.updateUser(user); return user.getName(); // 👉 출력: Updated Name } }
설명:
User
객체는 참조형이고, 그 참조값이 복사되어 전달되므로updateUser
내부에서 이름을 바꾸면 원본 객체에도 영향을 줍니다.
🔍 정리
구분 설명 Java 기본형 Java 참조형 Call by Value 값 복사 ✔️ 변경 불가 ✔️ 참조값 복사됨 Call by Reference 주소 전달 ❌ (Java 미지원) ❌ 직접 주소 전달 아님 728x90반응형'IT' 카테고리의 다른 글
동등하다?(동등성) 동일하다?(동일성) 개념 정리 (0) 2025.04.17 Git 브랜치 전략에 대해 알아보자! (+ git flow) (0) 2025.04.16 UTF-8 vs EUC-KR 알아보자 (0) 2025.04.08 암호화(Encryption) vs 해시화(Hashing): 차이점과 사용 예시 (0) 2025.04.08 [IT용어] Cloud 뜻이 뭐야? 뭐가 다르지? (0) 2022.10.22