1. Call by Value
Call by Value란, 값을 호출하는 것. 정확히는 '값만 전달하는 방식'이다.
예시 코드를 통해 확인해보자.


method_1 과 method_2의 a 와 b 라는 변수는 서로 다른 변수다. 정확히는 전달받은 값을 복사하여 처리한 결과를 나타낸다. 따라서 전달받은 값을 변경하여도 원래 변수값은 변하지 않는다. 자바는 하나의 메서드당 하나의 스택 프레임을 필요로 하며, 각 메서드는 매개변수, 지역변수, 리턴값 등의 데이터를 스택 프레임에 쌓으며 연산하고, 메스드 호출이 종료되면 스택에서 제거된다.
2. Call by Reference
Call by Reference란, '참조에 의한 호출'을 의미한다. 즉, 전달받은 값을 직접 참조하기 때문에 전달받은 값을 변경할 경우 원본도 같이 변경된다.


위의 코드는 method_2 에서 호출한 person 객체를 변경하니 method_1 의 변수도 변경된 것을 확인할 수 있다. 그렇다면 이것을 Call by Reference라고 생각해도 괜찮을까?
※ 자바의 Reference Type 별 동작
결론적으로 자바는 Call by Value 방식을 채택하여 사용한다. (자바에는 pointer라는 개념이 없어서 주소값을 줄 수 없다!)
그 전에 자바의 데이터 형을 확인해보자.
- 기본형(primitive type) : 미리 정해진 크기의 데이터 표현. 변수 자체에 값을 저장
~~> Boolean Type(boolean), Numeric Type(short, int, long, float, double, char)
- 참조형(reference type) : 크기가 정해질 수 없는 데이터 표현. 변수에는 값을 참조할 수 있는 주소만 저장
~~> Class Type, Interface Type, Array Type, Enum Type 등
메소드의 파라미터로 기본형(Primitive type)를 저장하는 것과 참조형(reference type)을 전달하는 것에는 분명한 동작 차이가 있다.
2024-01-17(수)
'Programming Language > JAVA' 카테고리의 다른 글
| [프로그래머스] 순위검색 - 2021 KAKAO BLIND RECRUITMENT (0) | 2024.04.08 |
|---|---|
| 'The package java.sql is not accessible' 해결 (0) | 2024.03.14 |
| [Java] BFS vs DFS (0) | 2024.02.20 |
| [Java] 순열 - 조합 - 부분집합 정리 (0) | 2024.01.31 |
| [Java] 자바 JVM 내부 구조 & 메모리 구조 (1) | 2024.01.16 |