- 변수에 값을 저장하는 방식에는
값에 의한 호출(Call By Value)
와참조에 의한 호출(Call By Reference)
로 구분됨.
기본 자료형 변수의 복사 : Call By Value
public class CallByValue {
public static void main(String[] args) {
int a = 10;
int b = a;
b = 20;
System.out.println(a); // 10
System.out.println(b); // 20
}
}
- 변수 a 에 10을 대입하고
- b에 해당 값을 복사한 다음에 ( 10 할당 )
- b에 20 대입
- a 는 10 출력
- b는 20 출력
- 기본 자료형의 변수의 경우 단순히 값만 할당되기에,
int b = a;
로 할당해도, 10의 값이 할당됨.
객체 참조변수와 Call By Reference
public class CallByReference {
public static void main(String[] args) {
Animal ref_a = new Animal();
Animal ref_b = ref_a;
ref_a.age = 10;
ref_b.age = 20;
System.out.println(ref_a.age); // 20
System.out.println(ref_b.age); // 20
}
}
class Animal{
public int age;
}
Animal
클래스를 선언하고, 참조하는 변수ref_a
와ref_b
가 있음.
ref_a
아ref_b
는 같은 객체를 참조하고 있기에, 하나를 변경하면 다른 하나도 영향을 받게 된다.
- 메모리 상황
- 두 참조 변수는 같은 객체를 가리킨다. (0x100)
- 그래서 하나가 변경되면, 결국 같은 주소를 바라보기에 age도 같은 값이 출력되는 것임.
본질적 차이는 없음.
- 값과 주소의 해석
Call By Value
와Call By Reference
차이는 사실상 없는편.
- 기본 자료형 변수는 값을
값
으로 해석
- 객체 참조 변수는 값을
주소
로 해석하는 차이만 있음.
- 메모리 상의 해석
- 두 가지 스택 메모리를 비교해보면
- 결국 변수가 가진
값
자체가 복사된다는 것을 알 수 있음.
- 단순히
값
을 어떻게 해석하느냐에 차이점일 뿐이다.
값 자체로 해석하느냐
, 주소값으로 해석하느냐
의 차이뿐
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[4단원]final 키워드 (0) | 2023.08.28 |
---|---|
[4단원]생성자 (0) | 2023.08.28 |
[4단원]자바가 확장한 객체지향 초읽기 - Abstract 키워드 - 추상메서드와 추상 클래스 (0) | 2023.08.27 |
[3단원]다형성이 지원되지 않는 언어 (0) | 2023.08.26 |
[3단원]캡슐화: 정보 은닉 (0) | 2023.08.26 |