728x90
반응형
💡함수 호출 방식
💁♀️JAVA는 함수에 전달되는 인자의 데이터 타입에 따라서
기본 자료형 / 참조 자료형 함수 호출 방식이 달라집니다.
⭐JAVA가 C언어와 다른 점은, call by reference는 해당 객체의 주소값을 직접 넘기는게 아니다.
객체를 보는 또 다른 주소값을 만들어서 값을 넘긴다.
◾ call by value(값에 의한 호출)
◾ call by reference(참조에 의한 호출)
✏️ call by value
call by value는 인자로 받은 값을 복사하여 처리한다.
▪️ 기본 자료형
▪️ int, short, long, float, double, char, boolean
▪️ 복사된 인자는 함수 안에서 지역적으로 사용하는 변수이다.
▪️ 함수가 호출될 때, 메모리 공간 안에서 임시의 공간이 생성되고 함수가 종료되면 해당 공간은 사라진다.
▪️ 복사하여 처리하기 때문에 메모리 양이 늘어난다는 단점이 있다.
만약, 많은 계산이 들어간다면 과부하의 원인이 된다.
▪️ 그러나 복사하여 사용하기 때문에 원래의 값은 영향을 받지 않아서 안전한 장점이 있다.
📃 swap 예제 - call by value
▪️ call by value이기 때문에 값이 바뀌지 않는다.
▪️ a, b는 기본 자료형의 변수이다.
public class SwapTest {
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a + ", " + b);
swap(a,b);
System.out.println(a + ", " + b);
}
public static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
}
✏️ call by reference
인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다.
▪️ 참조 자료형
▪️ Array, Class Instance
▪️ 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성되고 함수가 종료되면 해당 공간은 사라진다.
▪️ 함수 안에서 인자의 값이 변경되면, 함수 호출시에 있던 변수들도 값이 바뀐다.
▪️ 직접 참조를 하기 때문에 원래 값이 영향을 받는 위험성이 있다는 단점이 있다.
▪️ 그러나 복사하지 않고 사용하기 때문에 직접 참조를 하기에는 빠르다는 장점이 있다.
📃 swap 예제 - call by reference
▪️ 메소드 호출을 할 때 새로운 reference를 만들어 호출하게 만든다.
▪️ swap 메소드에서도 해당 객체를 가르키지만 다른 reference 값으로 가르킨다.
public class SwapTest {
int value;
public static void main(String[] args) {
SwapTest a = new SwapTest(1);
SwapTest b = new SwapTest(2);
System.out.println(a.value + ", " + b.value);
swap(a,b);
System.out.println(a.value + ", " + b.value);
}
public SwapTest(int value) {
this.value = value;
}
public static void swap(SwapTest a, SwapTest b) {
int temp = a.value;
a.value = b.value;
b.value = temp;
}
}
▪️ 전역변수 value를 선언
▪️ main 메서드에서 SwapTest로 된 객체 a, b를 생성
▪️ swap 메서드의 매개변수는 SwapTest 객체인 a, b로 받는다.
▪️ 객체의 value에 직접 접근하여 값을 서로 바꾼다.
✨Reference
글 작성시 참고되었던 참고 블로그입니다!
감사합니다 😊😊
728x90
반응형
'Develop' 카테고리의 다른 글
[#Dev] @NotBlank, @NotEmpty, @NotNull의 차이점 (0) | 2022.07.27 |
---|---|
[#Dev] Spring Boot 문제 모음 (0) | 2022.07.27 |
[#Dev] SELECT * 의 단점 (0) | 2022.07.27 |
[#Dev] 메모리 구조 (0) | 2022.07.20 |
[#Dev] 프레임워크와 라이브러리의 차이점 (0) | 2022.07.20 |
댓글